三大框架整合ssm:SpringMVC + Spring + Mybatis
2017-08-22 10:31
519 查看
github地址: https://github.com/laichilueng/ssm
首先打开IDE ,我这边用的是myeclipse10, 创建一个web项目,添加maven支持。
接着我们修改pom.xml文件,使用maven管理我们的jar包,这里可以参考我的pom.xml文件
pom.xml
然后我们创建对应的目录文件夹以及对应的包,并将resources和java添加到source里面。
创建后的目录
到了这里,目录的框架已经出来了,现在我们开始写配置文件。
首先我们配置mybatis,先在spring的文件夹里面创建一个spring-dao.xml
读入数据库连接相关参数(可选)
配置数据连接池
配置连接属性,可以不读配置项文件直接在这里写死
配置c3p0,只配了几个常用的
配置SqlSessionFactory对象(mybatis)
spring-dao.xml
然后在resources文件夹里面创建一个文件jdbc.properties,用来填写数据库信息
jdbc.properties
因为使用了mybatis,所以我们在resource文件夹里创建一个mybatis-donfig.xml,用于配置mybatis
mybatis-config.xml
至此,mybatis的配置基本完成,下面配置service层
首先在spring里面创建spring-service.xml文件,用于:
扫描service包所有注解 @Service
配置事务管理器,把事务管理交由spring来完成
配置基于注解的声明式事务,可以直接在方法上@Transaction
spring-service.xml
接着我们配置controller,在spring文件夹里面创建spring-mvc.xml文件
开启SpringMVC注解模式,可以使用@RequestMapping,@PathVariable,@ResponseBody等
对静态资源处理,如js,css,jpg等
配置jsp 显示ViewResolver,例如在controller中某个方法返回一个string类型的”login”,实际上会返回”/WEB-INF/login.jsp”
扫描web层 @Controller
spring-mvc.xml
最后就是修改web.xml文件,他位于webapp/WEB-INF下
web.xml
在开发中,我们经常使用到日志输出,所以这里配置一个日志配置文件logback.xml,同样在resource里面创建文件。
logback.xml
那么到目前为止我们一共配置了7个xml文件,现在我们测试一下使用tomcat跑,看看是否出错。(tomcat的配置在这里就不说了,大伙上网学习下)
框架是能跑起来的,那么目前为止我们已经成功整合了三大框架。下面我们结合数据库来测试该框架。首先在数据库中建立一个test库,并创建一张表。
然后往里面添加一些数据, 然后修改jdbc.properties文件,填写数据库信息,如下:
在项目的entity里面创建实体类Book.java
Book.java
在dao中创建接口BookDao.java
BookDao.java
接下来我们不需要实现这个接口,而是需要写mapper文件,这样mybatis会帮我们自动实现接口,在mapper中创建BookDao.xml
BookDao.xml
dao层写完了,那么我们写对应的test方法。因为后面的业务逻辑需要写很多测试方法,所以我们抽象出一个BaseTest类,当我们调用单元测试前,先加载三大框架的配置文件,那么在写其他测试类时,只需要继承这个BaseTest类就可以了。
在test/java里面创建BaseTest.java
BaseTest.java
创建TestBookDao.java
进行junit测试,可看到测试结果
至此,我们的dao层测试已经完成了,下面将进行service层和controller层的测试。
首先在service中创建接口BookService.java
然后在service.impl中创建实现类BookServiceImpl.java
接着我们创建BookController类
BookController.java
接着在webapp/WEB-INF/jsp中创建Book.jsp,并将数据展示
然后请求页面
可以看到成功的把数据库中的数据取到页面中,至此三大框架测试完成。源码和jar包我已经打包放在了github上,需要的可以去下载,喜欢的请给个star。
github地址: https://github.com/laichilueng/ssm
若有什么疑问,欢迎与我联系,谢谢。
首先打开IDE ,我这边用的是myeclipse10, 创建一个web项目,添加maven支持。
接着我们修改pom.xml文件,使用maven管理我们的jar包,这里可以参考我的pom.xml文件
pom.xml
<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>SSM</groupId> <artifactId>SSM</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <name>SSM</name> <description /> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <!-- 单元测试 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> </dependency> <!-- 1.日志 --> <!-- 实现slf4j接口并整合 --> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.1.1</version> </dependency> <!-- 2.数据库 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.37</version> <scope>runtime</scope> </dependency> <dependency> <groupId>c3p0</groupId> <artifactId>c3p0</artifactId> <version>0.9.1.2</version> </dependency> <!-- DAO: MyBatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.3.0</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.2.3</version> </dependency> <!-- 3.Servlet web --> <dependency> <groupId>taglibs</groupId> <artifactId>standard</artifactId> <version>1.1.2</version> </dependency> <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.5.4</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> </dependency> <!-- 4.Spring --> <!-- 1)Spring核心 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>4.1.7.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>4.1.7.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.1.7.RELEASE</version> </dependency> <!-- 2)Spring DAO层 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>4.1.7.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>4.1.7.RELEASE</version> </dependency> <!-- 3)Spring web --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>4.1.7.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.1.7.RELEASE</version> </dependency> <!-- 4)Spring test --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>4.1.7.RELEASE</version> </dependency> <!-- redis客户端:Jedis --> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.7.3</version> </dependency> <dependency> <groupId>com.dyuproject.protostuff</groupId> <artifactId>protostuff-core</artifactId> <version>1.0.8</version> </dependency> <dependency> <groupId>com.dyuproject.protostuff</groupId> <artifactId>protostuff-runtime</artifactId> <version& 1890a gt;1.0.8</version> </dependency> <!-- Map工具类 --> <dependency> <groupId>commons-collections</groupId> <artifactId>commons-collections</artifactId> <version>3.2</version> </dependency> <dependency> <groupId>org.apache.openejb</groupId> <artifactId>javaee-api</artifactId> <version>5.0-1</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.1</version> <scope>provided</scope> </dependency> </dependencies> <build> <plugins> <plugin> <artifactId>maven-war-plugin</artifactId> </plugin> <plugin> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.5</source> <target>1.5</target> </configuration> </plugin> </plugins> <finalName>ssm</finalName> </build> </project>
然后我们创建对应的目录文件夹以及对应的包,并将resources和java添加到source里面。
创建后的目录
到了这里,目录的框架已经出来了,现在我们开始写配置文件。
首先我们配置mybatis,先在spring的文件夹里面创建一个spring-dao.xml
读入数据库连接相关参数(可选)
配置数据连接池
配置连接属性,可以不读配置项文件直接在这里写死
配置c3p0,只配了几个常用的
配置SqlSessionFactory对象(mybatis)
spring-dao.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" 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.配置数据库相关参数properties的属性:${url} --> <context:property-placeholder location="classpath:jdbc.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}" /> <!-- c3p0连接池的私有属性 --> <property name="maxPoolSize" value="30" /> <property name="minPoolSize" value="10" /> <!-- 关闭连接后不自动commit --> <property name="autoCommitOnClose" value="false" /> <!-- 获取连接超时时间 --> <property name="checkoutTimeout" value="10000" /> <!-- 当获取连接失败重试次数 --> <property name="acquireRetryAttempts" value="2" /> <property name="automaticTestTable" value="test_c3p0"/> <property name="idleConnectionTestPeriod" value="100000" /> </bean> <!-- 3.配置SqlSessionFactory对象 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!-- 注入数据库连接池 --> <property name="dataSource" ref="dataSource" /> <!-- 配置MyBaties全局配置文件:mybatis-config.xml --> <property name="configLocation" value="classpath:mybatis-config.xml" /> <!-- 扫描entity包 使用别名 --> <property name="typeAliasesPackage" value="com.dnf.entity" /> <!-- 扫描sql配置文件:mapper需要的xml文件 --> <property name="mapperLocations" value="classpath:mapper/*.xml" /> </bean> <!-- 4.配置扫描Dao接口包,动态实现Dao接口,注入到spring容器中 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <!-- 注入sqlSessionFactory --> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" /> <!-- 给出需要扫描Dao接口包 --> <property name="basePackage" value="com.dnf.dao" /> </bean> </beans>
然后在resources文件夹里面创建一个文件jdbc.properties,用来填写数据库信息
jdbc.properties
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://127.0.0.1:3306/test?autoReconnect=true&useUnicode=true&characterEncoding=utf8 jdbc.username=root jdbc.password=123456
因为使用了mybatis,所以我们在resource文件夹里创建一个mybatis-donfig.xml,用于配置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> <!-- 配置全局属性 --> <settings> <!-- 使用jdbc的getGeneratedKeys获取数据库自增主键值 --> <setting name="useGeneratedKeys" value="true" /> <!-- 使用列别名替换列名 默认:true --> <setting name="useColumnLabel" value="true" /> <!-- 开启驼峰命名转换:Table{create_time} -> Entity{createTime} --> <setting name="mapUnderscoreToCamelCase" value="true" /> </settings> </configuration>
至此,mybatis的配置基本完成,下面配置service层
首先在spring里面创建spring-service.xml文件,用于:
扫描service包所有注解 @Service
配置事务管理器,把事务管理交由spring来完成
配置基于注解的声明式事务,可以直接在方法上@Transaction
spring-service.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" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" 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/tx http://www.springframework.org/schema/tx/spring-tx.xsd"> <!-- 扫描service包下所有使用注解的类型 --> <context:component-scan base-package="com.lzl.service" /> <!-- 配置事务管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <!-- 注入数据库连接池 --> <property name="dataSource" ref="dataSource" /> </bean> <!-- 配置基于注解的声明式事务 --> <tx:annotation-driven transaction-manager="transactionManager" /> </beans>
接着我们配置controller,在spring文件夹里面创建spring-mvc.xml文件
开启SpringMVC注解模式,可以使用@RequestMapping,@PathVariable,@ResponseBody等
对静态资源处理,如js,css,jpg等
配置jsp 显示ViewResolver,例如在controller中某个方法返回一个string类型的”login”,实际上会返回”/WEB-INF/login.jsp”
扫描web层 @Controller
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" 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-3.2.xsd"> <!-- 配置SpringMVC --> <!-- 1.开启SpringMVC注解模式 --> <!-- 简化配置: (1)自动注册DefaultAnootationHandlerMapping,AnotationMethodHandlerAdapter (2)提供一些列:数据绑定,数字和日期的format @NumberFormat, @DateTimeFormat, xml,json默认读写支持 --> <mvc:annotation-driven /> <!-- 2.静态资源默认servlet配置 (1)加入对静态资源的处理:js,gif,png (2)允许使用"/"做整体映射 --> <mvc:default-servlet-handler /> <mvc:resources mapping="/resources/**" location="/resources/"/> <!-- 3.配置jsp 显示ViewResolver --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /> <property name="prefix" value="/WEB-INF/jsp/" /> <property name="suffix" value=".jsp" /> </bean> <!-- 4.扫描web相关的bean --> <context:component-scan base-package="com.lzl.controller" /> <!--5. 拦截器的配置 --> <mvc:interceptors> <mvc:interceptor> <!-- /**包括路径及其子路径 拦截所有controller 如果是/admin/* 拦截的是/admin/add, /admin/list,etc. 而/admin/user/add不会被拦截 如果/admin/** 拦截/admin/user/add,/admin/add --> <mvc:mapping path="/**" /> <!-- 由于拦截器是优先于mvc配置的静态资源路径,所以这里要使用mvc的execlude-mapping标签,否则拦截器将会拦截静态资源 这里的LoginInterceptor要自己写,可以上网查下interceptor的用法,也可以不配置该项目 --> <mvc:exclude-mapping path="/resources/**"/> <bean class="com.lzl.interceptors.LoginInterceptor"></bean> </mvc:interceptor> </mvc:interceptors> <!--6. 全局异常配置 --> <bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> <property name="exceptionMappings"> <props> <prop key="java.lang.Exception">error/500</prop> <prop key="java.lang.Throwable">error/500</prop> </props> </property> <property name="statusCodes"> <props> <prop key="errors/500">500</prop> </props> </property> <!-- 设置日志输出级别,不定义则默认不输出警告等错误日志信息 --> <property name="warnLogCategory" value="WARN"></property> <!-- 默认错误页面,当找不到上面mappings中指定的异常对应视图时,使用本默认配置 --> <property name="defaultErrorView" value="error/500"></property> <!-- 默认HTTP状态码 --> <property name="defaultStatusCode" value="500"></property> </bean> </beans>
最后就是修改web.xml文件,他位于webapp/WEB-INF下
web.xml
<?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_3_1.xsd" version="3.1" metadata-complete="true"> <display-name></display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <!-- 配置DispatcherServlet --> <servlet> <servlet-name>seckill-dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 配置springMVC需要加载的配置文件 spring-dao.xml,spring-service.xml,spring-web.xml Mybatis - > spring -> springmvc --> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring/spring-*.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>seckill-dispatcher</servlet-name> <!-- 默认匹配所有的请求 --> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
在开发中,我们经常使用到日志输出,所以这里配置一个日志配置文件logback.xml,同样在resource里面创建文件。
logback.xml
<?xml version="1.0" encoding="UTF-8"?> <configuration debug="true"> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <!-- encoders are by default assigned the type ch.qos.logback.classic.encoder.PatternLayoutEncoder --> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <root level="debug"> <appender-ref ref="STDOUT" /> </root> </configuration>
那么到目前为止我们一共配置了7个xml文件,现在我们测试一下使用tomcat跑,看看是否出错。(tomcat的配置在这里就不说了,大伙上网学习下)
框架是能跑起来的,那么目前为止我们已经成功整合了三大框架。下面我们结合数据库来测试该框架。首先在数据库中建立一个test库,并创建一张表。
创建一个测试表给c3p0连接池做测试 CREATE TABLE `test_c3p0` ( `id` int(11) NOT NULL, PRIMARY KEY (`id`) ); CREATE TABLE `book` ( `id` varchar(200) NOT NULL, `name` varchar(50) DEFAULT NULL, `author` varchar(50) DEFAULT NULL, `number` int(10) NOT NULL, PRIMARY KEY (`id`) );
然后往里面添加一些数据, 然后修改jdbc.properties文件,填写数据库信息,如下:
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://127.0.0.1:3306/test?autoReconnect=true&useUnicode=true&characterEncoding=utf8 jdbc.username=root jdbc.password=123456
在项目的entity里面创建实体类Book.java
Book.java
package com.lzl.entity; public class Book { private String id; private String name; private String author; private int number; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public int getNumber() { return number; } public void setNumber(int number) { this.number = number; } @Override public String toString() { return "Book [id=" + id + ", name=" + name + ", author=" + author + ", number=" + number + "]"; } }
在dao中创建接口BookDao.java
BookDao.java
package com.lzl.dao; import java.util.List; import com.lzl.entity.Book; public interface BookDao { List<Book> query4books(); }
接下来我们不需要实现这个接口,而是需要写mapper文件,这样mybatis会帮我们自动实现接口,在mapper中创建BookDao.xml
BookDao.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.lzl.dao.BookDao"> <!-- 目的:为dao接口方法提供sql语句配置 --> <select id="query4books" resultType="Book"> SELECT id, name, author, number FROM book </select> </mapper>
dao层写完了,那么我们写对应的test方法。因为后面的业务逻辑需要写很多测试方法,所以我们抽象出一个BaseTest类,当我们调用单元测试前,先加载三大框架的配置文件,那么在写其他测试类时,只需要继承这个BaseTest类就可以了。
在test/java里面创建BaseTest.java
BaseTest.java
package com.lzl; import org.junit.runner.RunWith; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; /** * 配置spring和junit整合,junit启动时加载springIOC容器 spring-test,junit */ @RunWith(SpringJUnit4ClassRunner.class) // 告诉junit spring配置文件 @ContextConfiguration({ "classpath:spring/spring-dao.xml", "classpath:spring/spring-service.xml" }) public class BaseTest { }
创建TestBookDao.java
package com.lzl.dao; import java.util.ArrayList; import java.util.List; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; import com.lzl.BaseTest; import com.lzl.entity.Book; public class TestBookDao extends BaseTest{ @Autowired private BookDao dao; @Test public void testquery4books(){ List<Book> list = new ArrayList<Book>(); list = dao.query4books(); for(Book book : list){ System.out.println(book.toString()); } } }
进行junit测试,可看到测试结果
至此,我们的dao层测试已经完成了,下面将进行service层和controller层的测试。
首先在service中创建接口BookService.java
package com.lzl.service.impl; import java.util.List; import com.lzl.entity.Book; public interface BookService { List<Book> query4books(); }
然后在service.impl中创建实现类BookServiceImpl.java
package com.lzl.service.impl; import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.lzl.dao.BookDao; import com.lzl.entity.Book; //这里一定要加上service这个注解,这样spring初始化的时候会扫描该实现类 @Service public class BookServiceImpl implements BookService{ private Logger logger = LoggerFactory.getLogger(this.getClass()); @Autowired private BookDao bookDao; @Override public List<Book> query4books() { // TODO Auto-generated method stub return bookDao.query4books(); } }
接着我们创建BookController类
BookController.java
package com.lzl.controller; import java.util.List; import javax.servlet.http.HttpServletRequest; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import com.lzl.entity.Book; import com.lzl.service.impl.BookService; @Controller @RequestMapping("/") public class BookController { private Logger logger = LoggerFactory.getLogger(this.getClass()); @Autowired private BookService service; // 该方法将请求映射到Book.jsp这个页面上 @RequestMapping("/book") public String toBookPage(HttpServletRequest request){ List<Book> list = service.query4books(); // 这里在请求Book页面时,查询所有的book并将其存到request里面 if(list != null){ for(Book book : list){ logger.info(book.toString()); } request.setAttribute("books", list); } // 返回string类型,jsp渲染器会自动寻找/jsp/Book.jsp return "Book"; } }
接着在webapp/WEB-INF/jsp中创建Book.jsp,并将数据展示
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; %> <!-- 引入jstl库 --> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>Book</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <link rel="stylesheet" type="text/css" href="styles.css"> </head> <body> <div align="center"> <table> <tr> <td>id</td> <td>name</td> <td>author</td> <td>number</td> </tr> <c:forEach var="book" items="${ books}"> <tr> <td>${ book.id}</td> <td>${ book.name}</td> <td>${ book.author}</td> <td>${ book.number}</td> </tr> </c:forEach> </table> </div> </body> </html>
然后请求页面
可以看到成功的把数据库中的数据取到页面中,至此三大框架测试完成。源码和jar包我已经打包放在了github上,需要的可以去下载,喜欢的请给个star。
github地址: https://github.com/laichilueng/ssm
若有什么疑问,欢迎与我联系,谢谢。
相关文章推荐
- 最容易的ssm三大框架整合(spring+springmvc+mybatis)教程
- SSM三大框架整合详细教程(Spring+SpringMVC+MyBatis)【转】
- SSM三大框架整合详细教程(Spring+SpringMVC+MyBatis
- SSM三大框架整合详细教程(Spring+SpringMVC+MyBatis
- Eclipse Maven建web项目 与SSM三大框架整合教程(Spring+SpringMVC+MyBatis)
- 使用maven,实现ssm(spring+springmvc+mybatis)三大框架的整合DEMO
- Eclipse Maven建web项目 与SSM三大框架整合教程(Spring+SpringMVC+MyBatis)
- 【SSM】SSM三大框架整合详细教程(Spring+SpringMVC+MyBatis)
- SSM三大框架整合详细教程(Spring+SpringMVC+MyBatis)【转】
- Spring+SpringMVC+MyBatis三大框架整合的SSM
- SSM(Spring+SpringMVC+MyBatis)三大框架整合及遇到的各种问题
- SSM三大框架整合详细教程(Spring+SpringMVC+MyBatis)
- SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
- spring+websocket整合(springMVC+spring+MyBatis即SSM框架和websocket技术的整合)
- SSM框架整合(IntelliJ IDEA + maven + Spring + SpringMVC + MyBatis)
- SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
- SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
- 手把手教你整合最优雅SSM框架:SpringMVC + Spring + MyBatis
- SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
- SSM系列2:简易详细的(Spring +Springmvc+Mybatis)框架整合搭建