阅读 118

SSM项目实例——简易版图书管理系统

SSM项目实例——简易版图书管理系统

文章目录

概述

准备

实现

1.搭建数据库

2.实现pojo层

3.实现dao层

4.实现service层

5.配置Spring整合dao层

6.配置Spring整合service层

7.配置Spring整合Spring MVC

8.配置Spring整合文件

9.实现controller层

10.实现view层

11.运行前检查

运行

后记

概述

通过对数据库中一张表的CRUD,将相应的操作结果渲染到页面上。

如果想查看Spring Boot架构的同等规模的项目,可参考此篇博客Spring Boot项目实例——简易版商城管理系统

由于广大读者要求源码,作者通过这篇博客还原了项目(当然有一些隐藏的坑),然后将该项目上传到了Gitee,在末尾的后记部分有源码地址,读者可参考。


准备

环境:


IDEA

MySQL 5.7.19

Tomcat 9

Maven 3.6

要求:


掌握MySQL数据库

掌握Spring,

掌握SpringMVC

掌握MyBatis知识

掌握简单的前端知识

实现

1.搭建数据库

创建一个存放书籍数据的数据库(ssmbuild),并在该数据库中建立一个名为books的表,代码如下:

CREATE DATABASE `ssmbuild`;


USE `ssmbuild`;


DROP TABLE IF EXISTS `books`;


CREATE TABLE `books` (

  `bookID` INT(10) NOT NULL AUTO_INCREMENT COMMENT '书id',

  `bookName` VARCHAR(100) NOT NULL COMMENT '书名',

  `bookCounts` INT(11) NOT NULL COMMENT '数量',

  `detail` VARCHAR(200) NOT NULL COMMENT '描述',

  KEY `bookID` (`bookID`)

) ENGINE=INNODB DEFAULT CHARSET=utf8


INSERT  INTO `books`(`bookID`,`bookName`,`bookCounts`,`detail`)VALUES 

(1,'Java',1,'从入门到放弃'),

(2,'MySQL',10,'从删库到跑路'),

(3,'Linux',5,'从进门到进牢');

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

写好数据库的配置文件database.properties,该文件可以放在resources目录下,代码如下:

jdbc.driver=com.mysql.jdbc.Driver

jdbc.url=jdbc:mysql://localhost:3306/ssmbuild?useSSL=true&useUnicode=true&characterEncoding=utf8

jdbc.username=root

jdbc.password=123456

1

2

3

4

在Maven中导入数据库连接所需要的驱动包(mysql-connector),代码如下:

    <dependency>

      <groupId>mysql</groupId>

      <artifactId>mysql-connector-java</artifactId>

      <version>5.1.47</version>

    </dependency>

1

2

3

4

5

2.实现pojo层

在项目的java目录下新建pojo包,因为数据库中只有一个表,所以只需要编写一个实体类Book即可,代码如下所示:


package pojo;


public class Book {


    private int bookID;

    private String bookName;

    private int bookCounts;

    private String detail;


    public Book() {

    }


    public Book(int bookID, String bookName, int bookCounts, String detail) {

        this.bookID = bookID;

        this.bookName = bookName;

        this.bookCounts = bookCounts;

        this.detail = detail;

    }


    public int getBookID() {

        return bookID;

    }


    public void setBookID(int bookID) {

        this.bookID = bookID;

    }


    public String getBookName() {

        return bookName;

    }


    public void setBookName(String bookName) {

        this.bookName = bookName;

    }


    public int getBookCounts() {

        return bookCounts;

    }


    public void setBookCounts(int bookCounts) {

        this.bookCounts = bookCounts;

    }


    public String getDetail() {

        return detail;

    }


    public void setDetail(String detail) {

        this.detail = detail;

    }


    @Override

    public String toString() {

        return "Book{" +

                "bookID=" + bookID +

                ", bookName='" + bookName + '\'' +

                ", bookCounts=" + bookCounts +

                ", detail='" + detail + '\'' +

                '}';

    }

}


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

3.实现dao层

在项目的java目录下新建dao包,编写dao层接口BookDao即可,代码如下所示:

package dao;


import org.apache.ibatis.annotations.Param;

import pojo.Book;


import java.util.List;


public interface BookDao {


    //增加一个Books

    int addBook(Book books);


    //根据id删除Books

    int deleteBookByID(@Param("bookID") int id);


    //更新Books

    int updateBook(Book books);


    //根据id查询Book

    Book queryBookByID(@Param("bookID") int id);


    //查看全部的Book

    List<Book> queryAllBook();


}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

在Maven中导入Mybatis所需要的驱动包(mybatis),代码如下:

    <!-- MyBatis -->

    <dependency>

      <groupId>org.mybatis</groupId>

      <artifactId>mybatis</artifactId>

      <version>3.4.6</version>

    </dependency>

1

2

3

4

5

6

在dao包下编写对应的映射文件BookMapper.xml,代码如下:

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE mapper

        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"

        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">


<mapper namespace="dao.BookDao">

    <!--//增加一个Books-->

    <insert id="addBook" parameterType="Book">

        insert into ssmbuild.books(bookID , bookName, bookCounts, detail)

        values (#{bookID},#{bookName},#{bookCounts},#{detail})

    </insert>


    <!--//根据id删除Books-->

    <delete id="deleteBookByID" parameterType="int">

        delete from ssmbuild.books where bookID = #{bookID}

    </delete>


    <!--//更新Books-->

    <update id="updateBook" parameterType="Book">

        update ssmbuild.books

        set bookName = #{bookName} , bookCounts = #{bookCounts} ,detail = #{detail}

        where bookID = #{bookID}

    </update>


    <!--//根据id查询Book-->

    <select id="queryBookByID" resultType="Book">

        select * from ssmbuild.books where bookID = #{bookID}

    </select>


    <!--//查看全部的Book-->

    <select id="queryAllBook" resultType="Book">

        select * from ssmbuild.books

    </select>


</mapper>

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

在resources目录下编写Mybatis的配置文件Mybatis-config.xml,用于配置别名,以及注册映射文件,代码如下:

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE configuration

        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"

        "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>


    <typeAliases>

        <package name="pojo"/>

    </typeAliases>


    <mappers>

        <mapper resource="dao/BookMapper.xml"></mapper>

    </mappers>



</configuration>

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

4.实现service层

在项目的java目录下新建service包,编写service层接口BookService,代码如下所示:

package service;


import org.apache.ibatis.annotations.Param;

import pojo.Book;


import java.util.List;


public interface BookService {


    //增加一个Books

    int addBook(Book books);


    //根据id删除Books

    int deleteBookByID( @Param("bookID") int id);


    //更新Books

    int updateBook(Book books);


    //根据id查询Book

    Book queryBookByID(@Param("bookID") int id);


    //查看全部的Book

    List<Book> queryAllBook();


}


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

在service包下编写对应的实现类BookServiceImpl,代码如下:

package service;


import dao.BookDao;

import pojo.Book;


import java.util.List;


public class BookServiceImpl implements BookService{


    // 组合

    private BookDao bookDao;


    public void setBookDao(BookDao bookDao) {

        this.bookDao = bookDao;

    }



    @Override

    public int addBook(Book books) {

        return bookDao.addBook(books);

    }


    @Override

    public int deleteBookByID(int id) {

        return bookDao.deleteBookByID(id);

    }


    @Override

    public int updateBook(Book books) {

        return bookDao.updateBook(books);

    }


    @Override

    public Book queryBookByID(int id) {

        return bookDao.queryBookByID(id);

    }


    @Override

    public List<Book> queryAllBook() {

        return bookDao.queryAllBook();

    }

}


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

5.配置Spring整合dao层

在本例中使用c3p0连接池,需要在Maven导入相关的包,代码如下:

    <!-- 数据库连接池 -->

    <dependency>

      <groupId>com.mchange</groupId>

      <artifactId>c3p0</artifactId>

      <version>0.9.5.2</version>

    </dependency>

    <!-- mybatis-spring整合包 -->

    <dependency>

      <groupId>org.mybatis</groupId>

      <artifactId>mybatis-spring</artifactId>

      <version>1.3.1</version>

    </dependency>

    <!--Spring相关包-->

    <dependency>

      <groupId>org.springframework</groupId>

      <artifactId>spring-jdbc</artifactId>

      <version>4.3.24.RELEASE</version>

    </dependency>

    <dependency>

      <groupId>org.springframework</groupId>

      <artifactId>spring-webmvc</artifactId>

      <version>4.3.24.RELEASE</version>

    </dependency>

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

在resources目录下新建spring文件夹,并在该文件夹中新建一个名为spring-dao.xml的配置文件,用于让Spring整合mybatis,代码如下:

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

       xmlns:context="http://www.springframework.org/schema/context"

       xsi:schemaLocation="http://www.springframework.org/schema/beans

    http://www.springframework.org/schema/beans/spring-beans.xsd

    http://www.springframework.org/schema/context

    http://www.springframework.org/schema/context/spring-context.xsd">


    <!--整合Mybatis-->

    <!--1.关联数据库文件-->

    <context:property-placeholder location="classpath:database.properties"/>


    <!--2.数据库连接池-->

    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">

        <!--数据库的基本配置-->

        <property name="driverClass" value="${jdbc.driver}"/>

        <property name="jdbcUrl" value="${jdbc.url}"/>

        <property name="user" value="${jdbc.username}"/>

        <property name="password" value="${jdbc.password}"/>

    </bean>


    <!--3.sqlSessionFactory-->

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">

        <property name="dataSource" ref="dataSource"/>

        <!--关联mybatis-->

        <property name="configLocation" value="classpath:mybatis-config.xml"/>

    </bean>


    <!--4.注册dao层Bean-->

    <!--动态实现dao接口注入Spring容器中-->

    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">

        <!--绑定sqlSessionFactory-->

        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>

        <!--扫描包-->

        <property name="basePackage" value="dao"/>

    </bean>


    <!--5.扫描包-->

    <context:component-scan base-package="dao"/>


</beans>

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

6.配置Spring整合service层

在resources/spring文件夹中新建一个名为spring-service.xml的配置文件,用于让Spring整合service层,代码如下:


<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

       xmlns:context="http://www.springframework.org/schema/context"

       xsi:schemaLocation="http://www.springframework.org/schema/beans

    http://www.springframework.org/schema/beans/spring-beans.xsd

    http://www.springframework.org/schema/context

    http://www.springframework.org/schema/context/spring-context.xsd">


    <!--1.扫描包-->

    <context:component-scan base-package="service"/>


    <!--2.手动配置bean-->

    <bean id="bookServiceImpl" class="service.BookServiceImpl">

        <property name="bookDao" ref="bookDao"/>

    </bean>


    <!--3.事务管理-->

    <bean class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

        <!--数据源-->

        <property name="dataSource" ref="dataSource"/>

    </bean>



</beans>

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

7.配置Spring整合Spring MVC

修改webapp目录下的web.xml文件,代码如下:

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

         xmlns="http://java.sun.com/xml/ns/javaee"

         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

         http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"

         id="WebApp_ID" version="3.0">


  <!--1.DispatchServlet-->

  <servlet>

    <servlet-name>springmvc</servlet-name>

    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

    <!--关联Spring配置文件-->

    <init-param>

      <param-name>contextConfigLocation</param-name>

      <param-value>classpath:applicationContext.xml</param-value>

    </init-param>

    <load-on-startup>1</load-on-startup>

  </servlet>

  <servlet-mapping>

    <servlet-name>springmvc</servlet-name>

    <url-pattern>/</url-pattern>

  </servlet-mapping>



    <!--2.字符编码过滤-->

  <!--字符编码过滤-->

  <filter>

    <filter-name>encodingFilter</filter-name>

    <!--<filter-class>com.kuang.filter.GenericEncodingFilter</filter-class>-->

    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>

    <!--参数:CharacterEncodingFilter-->

    <init-param>

      <param-name>encoding</param-name>

      <param-value>utf-8</param-value>

    </init-param>

  </filter>

  <filter-mapping>

    <filter-name>encodingFilter</filter-name>

    <url-pattern>/*</url-pattern>

  </filter-mapping>


</web-app>

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

在resources/spring文件夹中新建一个名为spring-mvc.xml的配置文件,用于让Spring整合servlet层,代码如下:

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

       xmlns:context="http://www.springframework.org/schema/context"

       xmlns:mvc="http://www.springframework.org/schema/mvc"

       xsi:schemaLocation="http://www.springframework.org/schema/beans

    http://www.springframework.org/schema/beans/spring-beans.xsd

    http://www.springframework.org/schema/context

    http://www.springframework.org/schema/context/spring-context.xsd

    http://www.springframework.org/schema/mvc

    http://www.springframework.org/schema/mvc/spring-mvc.xsd">


    <!--1.扫描包-->

    <context:component-scan base-package="controller"/>


    <!--2.静态资源过滤-->

    <mvc:default-servlet-handler/>


    <!--3.注解驱动-->

    <mvc:annotation-driven/>


    <!--4.视图解析器-->

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">

        <property name="prefix" value="/WEB-INF/jsp/"/>

        <property name="suffix" value=".jsp"/>

    </bean>


</beans>

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

在目录中新建一个名为filter的包,在包中新建名为GenericEncodingFilter的类,用于字符编码过滤,代码如下:

package filter;


import javax.servlet.*;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletRequestWrapper;

import javax.servlet.http.HttpServletResponse;

import java.io.IOException;

import java.io.UnsupportedEncodingException;

import java.util.Map;


/**

 * 解决get和post请求 全部乱码的过滤器

 */

public class GenericEncodingFilter implements Filter {


    @Override

    public void destroy() {

    }


    @Override

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

        //处理response的字符编码

        HttpServletResponse myResponse=(HttpServletResponse) response;

        myResponse.setContentType("text/html;charset=UTF-8");


        // 转型为与协议相关对象

        HttpServletRequest httpServletRequest = (HttpServletRequest) request;

        // 对request包装增强

        HttpServletRequest myrequest = new MyRequest(httpServletRequest);


        chain.doFilter(myrequest, response);

    }


    @Override

    public void init(FilterConfig filterConfig) throws ServletException {

    }


}


//自定义request对象,HttpServletRequest的包装类

class MyRequest extends HttpServletRequestWrapper {


    private HttpServletRequest request;

    //是否编码的标记

    private boolean hasEncode;

    //定义一个可以传入HttpServletRequest对象的构造函数,以便对其进行装饰

    public MyRequest(HttpServletRequest request) {

        super(request);// super必须写

        this.request = request;

    }


    // 对需要增强方法 进行覆盖

    @Override

    public Map getParameterMap() {

        // 先获得请求方式

        String method = request.getMethod();

        if (method.equalsIgnoreCase("post")) {

            // post请求

            try {

                // 处理post乱码

                request.setCharacterEncoding("utf-8");

                return request.getParameterMap();

            } catch (UnsupportedEncodingException e) {

                e.printStackTrace();

            }

        } else if (method.equalsIgnoreCase("get")) {

            // get请求

            Map<String, String[]> parameterMap = request.getParameterMap();

            if (!hasEncode) { // 确保get手动编码逻辑只运行一次

                for (String parameterName : parameterMap.keySet()) {

                    String[] values = parameterMap.get(parameterName);

                    if (values != null) {

                        for (int i = 0; i < values.length; i++) {

                            try {

                                // 处理get乱码

                                values[i] = new String(values[i]

                                        .getBytes("ISO-8859-1"), "utf-8");

                            } catch (UnsupportedEncodingException e) {

                                e.printStackTrace();

                            }

                        }

                    }

                }

                hasEncode = true;

            }

            return parameterMap;

        }

        return super.getParameterMap();

    }


    //取一个值

    @Override

    public String getParameter(String name) {

        Map<String, String[]> parameterMap = getParameterMap();

        String[] values = parameterMap.get(name);

        if (values == null) {

            return null;

        }

        return values[0]; // 取回参数的第一个值

    }


    //取所有值

    @Override

    public String[] getParameterValues(String name) {

        Map<String, String[]> parameterMap = getParameterMap();

        String[] values = parameterMap.get(name);

        return values;

    }

}


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

8.配置Spring整合文件

在resources中新建一个名为applicationContext.xml的配置文件,用于整合上面的spring-dao.xml、spring-service.xml、spring-mvc.xml,代码如下:

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

       xsi:schemaLocation="http://www.springframework.org/schema/beans

    http://www.springframework.org/schema/beans/spring-beans.xsd">

    

    <!--整合Spring-->

    <import resource="classpath:spring/spring-dao.xml"/>

    <import resource="classpath:spring/spring-service.xml"/>

    <import resource="classpath:spring/spring-mvc.xml"/>


</beans>

1

2

3

4

5

6

7

8

9

10

11

12

在Maven导入jsp和servlet的包,代码如下:

   <dependency>

      <groupId>javax.servlet</groupId>

      <artifactId>javax.servlet-api</artifactId>

      <version>3.0.1</version>

      <scope>provided</scope>

    </dependency>

    <dependency>

      <groupId>javax.servlet.jsp</groupId>

      <artifactId>jsp-api</artifactId>

      <version>2.2</version>

      <scope>provided</scope>

    </dependency>

    <dependency>

      <groupId>javax.servlet</groupId>

      <artifactId>jstl</artifactId>

      <version>1.2</version>

    </dependency>

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

9.实现controller层

在项目的java目录下新建controller包,编写控制器BookController,代码如下所示:


package controller;


import org.apache.ibatis.annotations.Param;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.beans.factory.annotation.Qualifier;

import org.springframework.stereotype.Controller;

import org.springframework.ui.Model;

import org.springframework.web.bind.annotation.PathVariable;

import org.springframework.web.bind.annotation.RequestMapping;

import pojo.Book;

import service.BookService;


import java.util.List;


@Controller

@RequestMapping("/book")

public class BookController {

    @Autowired

    @Qualifier("bookServiceImpl")

    private BookService bookService;


    // 展示全部的书籍

    @RequestMapping("/allBook")

    public String list(Model model){

        List<Book> list = bookService.queryAllBook();

        model.addAttribute("list",list);

        return "allBook";

    }


    // 跳转到新增书籍页面

    @RequestMapping("/toAddBook")

    public String toAddBookPage(){

        return "addBook";

    }


    // 增加书籍

    @RequestMapping("/addBook")

    public String addBook(Book book){

        bookService.addBook(book);

        return "redirect:/book/allBook";

    }


    // 跳转到修改书籍页面

    @RequestMapping("/toUpdateBook")

    public String toUpdateBook(int id,Model model){

        Book book = bookService.queryBookByID(id);

        model.addAttribute("book",book);

        return "updateBook";

    }


    // 修改书籍

    @RequestMapping("/updateBook")

    public String updateBook(Book book,Model model){

        bookService.updateBook(book);

        // 更新最新的书籍

        Book book1 = bookService.queryBookByID(book.getBookID());

        model.addAttribute("books",book1);

        return "redirect:/book/allBook";

    }


    // 删除书籍,使用Restful风格

    @RequestMapping("/del/{bookID}")

    public String delete(@PathVariable("bookID") int id){

        bookService.deleteBookByID(id);

        return "redirect:/book/allBook";

    }

}


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

10.实现view层

编写主页index.jsp,用于进入查看所有图书的页面,代码如下:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>

<!DOCTYPE HTML>

<html>

<head>

    <title>首页</title>

    <style type="text/css">

        a {

            text-decoration: none;

            color: black;

            font-size: 18px;

        }

        h3 {

            width: 180px;

            height: 38px;

            margin: 100px auto;

            text-align: center;

            line-height: 38px;

            background: deepskyblue;

            border-radius: 4px;

        }

    </style>

</head>

<body>


<h3>

    <a href="${pageContext.request.contextPath}/book/allBook">点击进入列表页</a>

</h3>

</body>

</html>

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

在WEB-INF目录下新建jsp目录,并在该目录下编写allBook.jsp,用于查看所有图书,代码如下:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<html>

<head>

    <title>书籍列表</title>

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <!-- 引入 Bootstrap -->

    <link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">

</head>

<body>


<div class="container">


    <div class="row clearfix">

        <div class="col-md-12 column">

            <div class="page-header">

                <h1>

                    <small>书籍列表 —— 显示所有书籍</small>

                </h1>

            </div>

        </div>

    </div>


    <div class="row">

        <div class="col-md-4 column">

            <a class="btn btn-primary" href="${pageContext.request.contextPath}/book/toAddBook">新增</a>

        </div>

    </div>


    <div class="row clearfix">

        <div class="col-md-12 column">

            <table class="table table-hover table-striped">

                <thead>

                <tr>

                    <th>书籍编号</th>

                    <th>书籍名字</th>

                    <th>书籍数量</th>

                    <th>书籍详情</th>

                    <th>操作</th>

                </tr>

                </thead>


                <tbody>

                <c:forEach var="book" items="${requestScope.get('list')}">

                    <tr>

                        <td>${book.getBookID()}</td>

                        <td>${book.getBookName()}</td>

                        <td>${book.getBookCounts()}</td>

                        <td>${book.getDetail()}</td>

                        <td>

                            <a href="${pageContext.request.contextPath}/book/toUpdateBook?id=${book.getBookID()}">更改</a> |

                            <a href="${pageContext.request.contextPath}/book/del/${book.getBookID()}">删除</a>

                        </td>

                    </tr>

                </c:forEach>

                </tbody>

            </table>

        </div>

    </div>

</div>

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

在WEB-INF/jsp目录下编写addBook.jsp,用于添加图书,代码如下:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


<html>

<head>

    <title>新增书籍</title>

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <!-- 引入 Bootstrap -->

    <link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">

</head>

<body>

<div class="container">


    <div class="row clearfix">

        <div class="col-md-12 column">

            <div class="page-header">

                <h1>

                    <small>新增书籍</small>

                </h1>

            </div>

        </div>

    </div>

    <form action="${pageContext.request.contextPath}/book/addBook" method="post">

        书籍名称:<input type="text" name="bookName"><br><br><br>

        书籍数量:<input type="text" name="bookCounts"><br><br><br>

        书籍详情:<input type="text" name="detail"><br><br><br>

        <input type="submit" value="添加">

    </form>


</div>

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

在WEB-INF/jsp目录下编写updateBook.jsp,用于添加图书,代码如下:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<html>

<head>

    <title>修改信息</title>

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <!-- 引入 Bootstrap -->

    <link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">

</head>

<body>

<div class="container">


    <div class="row clearfix">

        <div class="col-md-12 column">

            <div class="page-header">

                <h1>

                    <small>修改信息</small>

                </h1>

            </div>

        </div>

    </div>


    <form action="${pageContext.request.contextPath}/book/updateBook" method="post">

        <input type="hidden" name="bookID" value="${book.getBookID()}"/>

        书籍名称:<input type="text" name="bookName" value="${book.getBookName()}"/>

        书籍数量:<input type="text" name="bookCounts" value="${book.getBookCounts()}"/>

        书籍详情:<input type="text" name="detail" value="${book.getDetail() }"/>

        <input type="submit" value="提交"/>

    </form>


</div>

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

11.运行前检查

Maven的包导入应如下所示(注意添加build标签中的resources标签,该标签用于让Maven导入相关资源):

<?xml version="1.0" encoding="UTF-8"?>


<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

  <modelVersion>4.0.0</modelVersion>


  <groupId>com.moxitao</groupId>

  <artifactId>SSMbuild-test</artifactId>

  <version>1.0-SNAPSHOT</version>

  <packaging>war</packaging>


  <name>SSMbuild-test Maven Webapp</name>

  <!-- FIXME change it to the project's website -->

  <url>http://www.example.com</url>


  <properties>

    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

    <maven.compiler.source>1.7</maven.compiler.source>

    <maven.compiler.target>1.7</maven.compiler.target>

  </properties>


  <dependencies>

    <!--junit部分-->

    <!--测试模块单元-->

    <dependency>

      <groupId>junit</groupId>

      <artifactId>junit</artifactId>

      <version>4.11</version>

      <scope>test</scope>

    </dependency>


    <!--Mybatis部分-->

    <!--数据库驱动包-->

    <dependency>

      <groupId>mysql</groupId>

      <artifactId>mysql-connector-java</artifactId>

      <version>5.1.47</version>

    </dependency>

    <!--mybatis的包-->

    <dependency>

      <groupId>org.mybatis</groupId>

      <artifactId>mybatis</artifactId>

      <version>3.4.6</version>

    </dependency>

    <!--Mybatis部分完结-->


    <!--Spring部分-->

    <!--mybatis-srping整合包-->

    <dependency>

      <groupId>org.mybatis</groupId>

      <artifactId>mybatis-spring</artifactId>

      <version>1.3.1</version>

    </dependency>

    <!--第三方数据源:c3p0-->

    <dependency>

      <groupId>com.mchange</groupId>

      <artifactId>c3p0</artifactId>

      <version>0.9.5.2</version>

    </dependency>

    <!--Spring相关的-->

    <dependency>

      <groupId>org.springframework</groupId>

      <artifactId>spring-webmvc</artifactId>

      <version>4.3.24.RELEASE</version>

    </dependency>

    <dependency>

      <groupId>org.springframework</groupId>

      <artifactId>spring-jdbc</artifactId>

      <version>4.3.24.RELEASE</version>

    </dependency>

    <!--Spring部分完结-->


    <!--SpringMVC部分-->

    <!--servlet-->

    <dependency>

      <groupId>javax.servlet</groupId>

      <artifactId>javax.servlet-api</artifactId>

      <version>3.0.1</version>

    </dependency>

    <!--jsp-->

    <dependency>

      <groupId>javax.servlet.jsp</groupId>

      <artifactId>jsp-api</artifactId>

      <version>2.2</version>

    </dependency>

    <!--jstl-->

    <dependency>

      <groupId>javax.servlet</groupId>

      <artifactId>jstl</artifactId>

      <version>1.2</version>

    </dependency>

  </dependencies>

  <!--SpringMVC部分完结-->



  <build>

    <finalName>SSMbuild-test</finalName>

    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->

      <plugins>

        <plugin>

          <artifactId>maven-clean-plugin</artifactId>

          <version>3.1.0</version>

        </plugin>

        <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->

        <plugin>

          <artifactId>maven-resources-plugin</artifactId>

          <version>3.0.2</version>

        </plugin>

        <plugin>

          <artifactId>maven-compiler-plugin</artifactId>

          <version>3.8.0</version>

        </plugin>

        <plugin>

          <artifactId>maven-surefire-plugin</artifactId>

          <version>2.22.1</version>

        </plugin>

        <plugin>

          <artifactId>maven-war-plugin</artifactId>

          <version>3.2.2</version>

        </plugin>

        <plugin>

          <artifactId>maven-install-plugin</artifactId>

          <version>2.5.2</version>

        </plugin>

        <plugin>

          <artifactId>maven-deploy-plugin</artifactId>

          <version>2.8.2</version>

        </plugin>

      </plugins>

    </pluginManagement>


    <resources>

      <resource>

        <directory>src/main/java</directory>

        <includes>

          <include>**/*.xml</include>

        </includes>

        <filtering>false</filtering>

      </resource>

      <resource>

        <directory>src/main/resources</directory>

        <includes>

          <include>**/*.xml</include>

          <include>**/*.properties</include>

        </includes>

        <filtering>false</filtering>

      </resource>

    </resources>

  </build>

</project>


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

项目目录如图所示:


运行

配置好Tomcat运行环境后,即可开始运行,结果图如下:


首页(index.jsp)


显示全部书籍(allBook.jsp)


增加书籍页面(addBook.jsp)


修改书籍页面(updateBook.jsp)


后记

尽管现在的Java Web项目的开发多用Spring Boot进行搭建,但是使用相对原生的SSM(Spring + Spring MVC + Mybatis)进行开发,不仅能让我们对于Web项目的搭建流程更加熟悉,还会对我们在日后的学习和工作中大有裨益

项目的源码地址:SSM版本 简易管理系统,由于该博客之前有一些细节错误尚未修正,这里在搭建项目的时候进行了部分修改。对按照该博客搭建项目后遇到坑的读者表示抱歉,感谢您的浏览!

————————————————

版权声明:本文为CSDN博主「赈川」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/qq_41151659/article/details/98115573


文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐