• 6、ssm整合(干货)


    1、数据库用表:

    CREATE DATABASE ssmbuild;
    USE ssmbuild;
    CREATE TABLE `books`(
    `bookID` INT NOT NULL AUTO_INCREMENT COMMENT '书id',
    `bookName` VARCHAR(100) NOT NULL COMMENT '书名',
    `bookCounts` INT 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,'从进门到进牢')

    2、新建一个maven项目,添加web支持

    3、添加pom依赖

    <dependencies>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.11</version>
                <scope>test</scope>
            </dependency>
            <!--servlet依赖-->
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
                <version>4.0.1</version>
            </dependency>
            <!--jsp依赖-->
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>jsp-api</artifactId>
                <version>2.0</version>
            </dependency>
            <!--mysql-jdbc依赖-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.48</version>
            </dependency>
            <!--JSTL表达式依赖-->
            <dependency>
                <groupId>javax.servlet.jsp.jstl</groupId>
                <artifactId>jstl-api</artifactId>
                <version>1.2</version>
            </dependency>
            <!--standard标签库依赖-->
            <dependency>
                <groupId>taglibs</groupId>
                <artifactId>standard</artifactId>
                <version>1.1.2</version>
            </dependency>
            <!--mybatis依赖-->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>3.4.6</version>
            </dependency>
            <!--自动生成set/get等方法的注解-->
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.18.12</version>
            </dependency>
            <!--spring依赖-->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
                <version>5.2.12.RELEASE</version>
            </dependency>
            <!--springAOP的包-->
            <dependency>
                <groupId>org.aspectj</groupId>
                <artifactId>aspectjweaver</artifactId>
                <version>1.9.4</version>
            </dependency>
            <!--ssm整合jdbc依赖-->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-jdbc</artifactId>
                <version>5.2.12.RELEASE</version>
            </dependency>
            <!--mybatis整合依赖-->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis-spring</artifactId>
                <version>2.0.5</version>
            </dependency>
            <!--JSON转换-->
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
                <version>2.10.2</version>
            </dependency>
            <!--c3po数据库连接池-->
            <dependency>
                <groupId>com.mchange</groupId>
                <artifactId>c3p0</artifactId>
                <version>0.9.5.2</version>
            </dependency>
    
            <!--阿里巴巴的JSON格式转换-->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>1.2.75</version>
            </dependency>
        </dependencies>
    View Code

    4、maven资源过滤(资源导出问题)

    <build>
            <resources>
                <resource>
                    <directory>src/main/java</directory>
                    <includes>
                        <include>**/*.properties</include>
                        <include>**/*.xml</include>
                    </includes>
                    <filtering>false</filtering>
                </resource>
                <resource>
                    <directory>src/main/resources</directory>
                    <includes>
                        <include>**/*.properties</include>
                        <include>**/*.xml</include>
                    </includes>
                    <filtering>false</filtering>
                </resource>
            </resources>
        </build>
    View Code

    5、使用idea测试连接数据库

     6、建立基本结构包

    1. com/zhixi/pojo -->编写跟数据库对应的实体类
    2. com/zhixi/dao -->数据库持久化层,数据访问对象。他只负责对数据进行访问
    3. com/zhixi/service -->业务逻辑都会放在这里处理,比如用户的增删改查
    4. com/zhixi/controller -->负责请求转发,接受页面过来的参数,传给Service处理,接到返回值,再传给页面

    ============================================================================================

    7、pojo实体类

    package com.zhixi.pojo;
    
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    
    /**
     * @author zhangzhixi
     */
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public class Books {
        private Integer bookID;
        private String bookName;
        private Integer bookCounts;
        private String detail;
    }

    8、dao层

    package com.zhixi.dao;
    
    import com.zhixi.pojo.Books;
    import org.apache.ibatis.annotations.Param;
    
    import java.util.List;
    
    /**
     * @author zhangzhixi
     */
    public interface BooksMapper {
        // 增加一本书
        int addBook(Books book);
    
        // 删除一本书
        int delBook(@Param("bookId") int id);
    
        // 查询一本书
        Books queryBookById(int id);
    
        // 更新一本书
        int updateBook(Books book);
    
        // 查询所有的书
        List<Books> queryBooks();
    
        // 根据书名查询书籍
        Books queryBookByName(@Param("bookName") String bookName);
    }

    9、service层:与dao层业务方法保持一致

      service层接口:

    package com.zhixi.service;
    
    import com.zhixi.pojo.Books;
    import org.apache.ibatis.annotations.Param;
    
    import java.util.List;
    
    /**
     * @author zhangzhixi
     */
    public interface BooksService {
        // 增加一本书
        int addBook(Books book);
    
        // 删除一本书
        int delBook(int id);
    
        // 查询一本书
        Books queryBookById(int id);
    
        // 更新一本书
        int updateBook(Books book);
    
        // 查询所有的书
        List<Books> queryBooks();
    
        // 根据书名查询书籍
        Books queryBookByName(String bookName);
    }

      service层接口实现类:service调dao层(含有dao层接口对象的引用)

    package com.zhixi.service;
    
    import com.zhixi.dao.BooksMapper;
    import com.zhixi.pojo.Books;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    import javax.annotation.Resource;
    import java.util.List;
    
    @Service
    public class BooksServiceImpl implements BooksService {
        // 业务层service调dao层
        private BooksMapper booksMapper;
    
        public void setBooksMapper(BooksMapper booksMapper) {
            this.booksMapper = booksMapper;
        }
    
        public int addBook(Books book) {
            return booksMapper.addBook(book);
        }
    
        public int delBook(int id) {
            return booksMapper.delBook(id);
        }
    
        public Books queryBookById(int id) {
            return booksMapper.queryBookById(id);
        }
    
        public int updateBook(Books book) {
            return booksMapper.updateBook(book);
        }
    
        public List<Books> queryBooks() {
            return booksMapper.queryBooks();
        }
    
        public Books queryBookByName(String bookName) {
            return booksMapper.queryBookByName(bookName);
        }
    }

    ☆:Controller层:

    package com.zhixi.controller;
    
    import com.zhixi.pojo.Books;
    import com.zhixi.service.BooksService;
    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.RequestMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * @author zhangzhixi
     */
    @Controller
    @RequestMapping("/books")
    public class BookController {
    
        // controller调service层
        @Autowired
        @Qualifier("booksService")
        private BooksService booksService;
    
        // 1、查询全部的书籍,并跳转到书籍展示页面
        @RequestMapping("/allBook")
        public String queryBooks(Model model) {
            List<Books> list = booksService.queryBooks();
    
            model.addAttribute("list", list);
            return "queryAllBookPage";
        }
    
        // 2、添加书籍页面
        @RequestMapping("/toBookPage")
        public String toBookPage() {
            return "addBookPage";
        }
    
        // 2.1、添加书籍
        @RequestMapping("/addBook")
        public String addBook(Books books) {
            // 添加书籍
            booksService.addBook(books);
            // 跳转到查询全部书籍的页面【使用重定向】
            return "redirect:/books/allBook";
        }
    
        // 3、修改书籍页面
        @RequestMapping("/updateBookPage")
        // 这个id是从jsp页面拿到的,可以知道是对哪个用户进行修改数据
        public String updateBook(int id, Model model) {
            Books books = booksService.queryBookById(id);
            model.addAttribute("QUpdate", books);
            return "updateBookPage";
        }
    
        // 3.1、修改书籍
        @RequestMapping("/toUpdate")
        public String toUpdate(Books books) {
            booksService.updateBook(books);
            // 返回书籍首页
            return "redirect:/books/allBook";
        }
    
        // 4、删除书籍,删除完成后跳转到书籍首页
        @RequestMapping("/delBook")
        public String delBook(int id) {
            booksService.delBook(id);
            return "redirect:/books/allBook";
        }
    
    
        // 5、根据id查找书籍
        @RequestMapping("/queryById")
        // RequestParam是为了设置前端过来的请求与参数名不一致的情况
        public String queryBookById(@RequestParam("bookById") int id, Model model) {
            List<Books> list = new ArrayList<Books>();
            // 根据id查询
            Books books = booksService.queryBookById(id);
            list.add(books);
    
            if (books == null) {// 没有查询到书籍,就回到书籍首页并显示错误信息
                list = booksService.queryBooks();
                model.addAttribute("errorById", "没有查询到书籍!");
            }
    
            model.addAttribute("list", list);
            return "queryAllBookPage";
        }
    
        // 6、根据书名查找书籍
        @RequestMapping("/queryByName")
        public String queryBookByName(@RequestParam("bookName") String bookName, Model model) {
            List<Books> list = new ArrayList<Books>();
            Books books = booksService.queryBookByName(bookName);
            list.add(books);
    
            if (books == null) { // 没有查询到书籍,就回到书籍首页并显示错误信息
                list = booksService.queryBooks();
                model.addAttribute("errorByName", "没有查询到书籍!");
            }
    
            model.addAttribute("list", list);
            return "queryAllBookPage";
        }
    }

    10、mybatis-config.xml :mybatis配置文件

      因为是整合项目,都交给spring做了,所以mybatis中几乎都保留很少的功能,比如日志,给实体类起别名等设置

    <?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>
    
        <!--日志-->
        <settings>
            <setting name="logImpl" value="STDOUT_LOGGING"/>
        </settings>
    
        <!--设置实体类别名-->
        <typeAliases>
            <package name="com.zhixi.pojo"/>
        </typeAliases>
    </configuration>

    11、resources/mapper/BooksMapper.xml :dao层的映射文件-->做mybatis的CRUD

      dao层接口的映射文件,主要是做CRUD操作

    <?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="com.zhixi.dao.BooksMapper">
    
        <!--添加书籍-->
        <insert id="addBook" parameterType="books">
            insert into ssmbuild.books (bookName, bookCounts, detail)
            values (#{bookName}, #{bookCounts}, #{detail})
        </insert>
    
        <!--根据id删除书籍-->
        <delete id="delBook" parameterType="int">
            delete
            from ssmbuild.books
            where bookID = #{bookId}
        </delete>
    
        <!--修改书籍-->
        <update id="updateBook" parameterType="books">
            update ssmbuild.books
            set bookName=#{bookName},
                bookCounts=#{bookCounts},
                detail = #{detail}
                /*这里的bookID需要指定,是因为要与修改的jsp给id起的name保持一致*/
            where bookID = #{bookID}
        </update>
    
        <!--查询所有书籍-->
        <select id="queryBooks" resultType="books">
            select *
            from ssmbuild.books;
        </select>
    
        <!--根据id查询书籍-->
        <select id="queryBookById" resultType="books" parameterType="int">
            select *
            from ssmbuild.books
            where bookID = #{bookById};
        </select>
    
        <!--根据名字查询书籍-->
        <select id="queryBookByName" parameterType="java.lang.String" resultType="books">
            select * from ssmbuild.books where bookName = #{bookName}
        </select>
    </mapper>

    12、spring-dao.xml:主要跟数据连接打交道

      jdbc.properties:数据连接池的基本配置文件:

        需要注意的是如果是mysql8以上的版本需要在后面加上时区serverTimezone=UTC

        因为中国时区比美国早八个小时,所以我们要在mysql中进行设置时区(防止以后的各种bug)

        具体操作可以看我的这篇博客:https://www.cnblogs.com/zhangzhixi/p/14286664.html

    jdbc.driver=com.mysql.jdbc.Driver
    jdbc.url=jdbc:mysql://localhost:3306/ssmbuild?useSSL=true&amp;useUnicode=true&;characterEncoding=UTF-8&;serverTimezone=UTC
    jdbc.username=root
    jdbc.password=zhixi158
    <?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 https://www.springframework.org/schema/context/spring-context.xsd">
    
        <!--1、关联数据库配置文件-->
        <context:property-placeholder location="classpath:jdbc.properties"/>
    
        <!--2、导入c3p0数据库连接池-->
        <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>
        
        <!--spring提供的数据连接池-->
        <!--    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
                <property name="driverClassName" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </bean>-->
    
        <!--3、sqlSessionFactor-->
        <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
            <property name="dataSource" ref="dataSource"/>
            <!--4、绑定mybatis配置文件-->
            <property name="configLocation" value="classpath:mybatis-config.xml"/>
            <!--mapper映射器,也可以在mybatis中配置-->
            <property name="mapperLocations" value="classpath:mapper/BooksMapper.xml"/>
        </bean>
    
        <!--5、配置dao层接口扫描包,动态的实现了Dao层接口可以注入到Spring容器中!-->
        <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
            <!--注入SQLSessionFactory-->
            <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
            <!--要扫描的dao包-->
            <property name="basePackage" value="com.zhixi.dao"/>
        </bean>
    </beans>

    13、spring-service.xml:做一些事务以及aop的植入

    <?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:tx="http://www.springframework.org/schema/tx"
           xmlns:aop="http://www.springframework.org/schema/aop"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
    
           http://www.springframework.org/schema/beans/spring-beans.xsd
           http://www.springframework.org/schema/tx
            http://www.springframework.org/schema/tx/spring-tx.xsd
            http://www.springframework.org/schema/aop
            https://www.springframework.org/schema/aop/spring-aop.xsd
            http://www.springframework.org/schema/context
            https://www.springframework.org/schema/context/spring-context.xsd
    ">
    
        <!--1、统一管理bean-->
        <context:component-scan base-package="com.zhixi.service"/>
    
        <!--2、将所有业务类,注入到bean-->
        <bean id="booksService" class="com.zhixi.service.BooksServiceImpl">
            <property name="booksMapper" ref="booksMapper"/>
        </bean>
    
        <!--3、声明式事务配置:开启事务-->
        <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            <property name="dataSource" ref="dataSource"/>
        </bean>
    
        <!--4、aop事务支持-->
        <tx:advice id="txAdvice" transaction-manager="transactionManager">
            <tx:attributes>
                <tx:method name="*" propagation="REQUIRED"/>
            </tx:attributes>
        </tx:advice>
    
        <!--配置事务切入-->
        <aop:config>
            <!--
                配置切入点表达式:指定哪些包中类, 要使用事务
                id:切入点表达式的名称,唯一值
                expression :切入点表达式, 指定哪些类要使用事务, aspectj会创建代理对象
            -->
            <aop:pointcut id="exPoint" expression="execution(* com.zhixi.dao.*.*(..))"/>
            <!--配置增强类-->
            <aop:advisor advice-ref="txAdvice" pointcut-ref="exPoint"/>
        </aop:config>
    
    </beans>

    14、spring-mvc.xml:映射controller层

    <?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:aop="http://www.springframework.org/schema/aop"
           xmlns:mvc="http://www.springframework.org/schema/mvc"
    
           xsi:schemaLocation="http://www.springframework.org/schema/beans
            https://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context
            https://www.springframework.org/schema/context/spring-context.xsd
            http://www.springframework.org/schema/aop
            https://www.springframework.org/schema/aop/spring-aop.xsd
            http://www.springframework.org/schema/mvc
            https://www.springframework.org/schema/mvc/spring-mvc.xsd">
    
        <!--1、注解驱动-->
        <mvc:annotation-driven/>
        <!--2、静态资源过滤-->
        <mvc:default-servlet-handler/>
        <!--3、扫描controller包-->
        <context:component-scan base-package="com.zhixi.controller"/>
        <!--4、配置视图解析器-->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <!--前缀跟后缀-->
            <property name="prefix" value="/WEB-INF/jsp/"/>
            <property name="suffix" value=".jsp"/>
        </bean>
    
    </beans>

    15、applicationContext.xml:spring总的配置文件,为了方便管理所有的spring文件

    <?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:aop="http://www.springframework.org/schema/aop"
    
           xsi:schemaLocation="http://www.springframework.org/schema/beans
            https://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context
            https://www.springframework.org/schema/context/spring-context.xsd
    
            http://www.springframework.org/schema/aop
            https://www.springframework.org/schema/aop/spring-aop.xsd">
    
        <!--注解的支持-->
        <context:annotation-config/>
        <import resource="classpath:spring-dao.xml"/>
        <import resource="classpath:spring-service.xml"/>
        <import resource="classpath:spring-mvc.xml"/>
    </beans>

    16、web.xml:主要是关联spring配置文件以及解决一些乱码跟过滤器

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
             version="4.0">
    
    <!--    <error-page>
            <error-code>500</error-code>
            <location>/WEB-INF/error/500.jpg</location>
        </error-page>-->
    
        <!--1、配置spring提供的servlet-->
        <servlet>
            <servlet-name>springmvc</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <!--2、关联配置文件-->
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>classpath:applicationContext.xml</param-value>
            </init-param>
            <!--3、设置启动级别-->
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>springmvc</servlet-name>
            <url-pattern>/</url-pattern>
        </servlet-mapping>
        
        <!--4、乱码过滤-->
        <filter>
            <filter-name>encodingFilter</filter-name>
            <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
            <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>

    17、JSP页面

    index.jsp:网站首页-->跳转到暑假展示页面

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>首页</title>
    </head>
    <body>
    <div align="center">
        <a  href="${pageContext.request.contextPath}/books/allBook">跳转到书籍展示页面</a>
    </div>
    </body>
    </html>

    jsp/queryAllBookPage.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>
    </head>
    <body>
    <center><h1>欢迎来到书籍展示页面</h1></center>
    
    <div style="text-align: center">
    
        <div>
            <%--跳转到添加书籍的页面--%>
            <a href="${pageContext.request.contextPath}/books/toBookPage">添加书籍</a>
            &nbsp;&nbsp;&nbsp;
            <a href="${pageContext.request.contextPath}/books/allBook">查询全部书籍</a>
        </div>
    
        <div>
            <%--根据id查询书籍--%>
            <form method="post" action="${pageContext.request.contextPath}/books/queryById">
                <input type="text" name="bookById" placeholder="输入id查询书籍">
                <input type="submit" value="查询"/><span style="color: #ff6659">${errorById}</span>
            </form>
        </div>
    
        <div>
            <%--根据书名查询书籍--%>
            <form method="post" action="${pageContext.request.contextPath}/books/queryByName">
                <input type="text" name="bookName" placeholder="输入书名查询书籍">
                <input type="submit" value="查询"><span style="color: red">${errorByName}</span>
            </form>
        </div>
    
        <table border="1" align="center" style="text-align: center">
            <tr>
                <th>书籍编号</th>
                <th>书籍名称</th>
                <th>书籍数量</th>
                <th>书籍详情</th>
                <th>操作</th>
            </tr>
    
            <c:forEach var="books" items="${list}">
                <tr>
                    <td>${books.bookID}</td>
                    <td>${books.bookName}</td>
                    <td>${books.bookCounts}</td>
                    <td>${books.detail}</td>
                    <td>
                        <a href="${pageContext.request.contextPath}/books/updateBookPage?id=${books.bookID}">修改</a>
                        &nbsp; | &nbsp;
                        <a href="${pageContext.request.contextPath}/books/delBook?id=${books.bookID}">删除</a>
                    </td>
                </tr>
            </c:forEach>
        </table>
    
    </div>
    
    
    </body>
    </html>

    jsp/addBookPage.jsp:添加书籍页面

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>添加书籍页面</title>
    </head>
    <body>
    <form style="text-align: center" action="${pageContext.request.contextPath}/books/addBook" method="post">
        <div>书籍名称:<input type="text" name="bookName" required/></div>
        <div>书籍数量:<input type="text" name="bookCounts" required/></div>
        <div>书籍描述:<input type="text" name="detail" required/></div>
        <div><input type="submit" value="提交"></div>
    </form>
    </body>
    </html>

    jsp/updateBookPage.jsp:修改书籍页面

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>修改书籍页面</title>
    </head>
    <body>
    <form style="text-align: center" action="${pageContext.request.contextPath}/books/toUpdate" method="post">
        <%--
            出现的问题:我们提交了修改的SQL请求,但是修改失败,初次考虑,是事务问题,配置完毕事务,依旧失败!
            看一下SQL语句,能否执行成功: SQL执行失败,修改未完成
            前端传递隐藏域
        --%>
        <input type="hidden" name="bookID" value="${QUpdate.bookID}">
    
        <div>书籍名称:<input type="text" name="bookName" value="${QUpdate.bookName}" required/></div>
        <div>书籍数量:<input type="text" name="bookCounts" value="${QUpdate.bookCounts}" required/></div>
        <div>书籍描述:<input type="text" name="detail" value="${QUpdate.detail}" required/></div>
        <div><input type="submit" value="修改"/></div>
    </form>
    </body>
    </html>

    至此SSM框架整合基本的所有步骤已经完成!

    首页:

    书籍展示页面:

  • 相关阅读:
    父页面与子页面间相互传值
    PS常用技能综合
    JS 提交form表单
    html实体字符
    js基础
    Delegate模式
    IOS-基础知识
    测试工具综合
    [Linux] Nginx 提供静态内容和优化积压队列
    [Linux] Nginx响应压缩gzip
  • 原文地址:https://www.cnblogs.com/zhangzhixi/p/14282700.html
Copyright © 2020-2023  润新知