Maven搭建SSM框架
来源:互联网 发布:初中英语词汇软件 编辑:程序博客网 时间:2024/05/18 04:50
Maven搭建SSM框架
此笔记是在学习XXXSSM整合视频后的一般总结
Maven创建web项目
原来使用maven创建web项目,选择的是webapp模板,这里在创建Maven项目时,选中create a simple project(skip archetype selection)
此时的项目只是一个普通的java项目,需要把它变成一个web项目
然后右键项目,选中properties
中,在Project Facets
中,取消选中的Dynamic Web Module
,Apply
之后,再选中Dynamic Web Module
,测试,选择如下的红色框所示:
弹出如下所示的输入框,在Content directory
中输入src/main/webapp
(表示生成的web.xml
的位置),勾选上Generate web.xml deployment descriptor
创建好后,一个基本的web项目就成型了,也可能还需要对web.xml做一些响应的修改
pom.xml
创建好后,就需要导入jar包了,引入的jar包。需要引入的jar包包括:
1.Spring
2.SpringMVC
3.Mybatis
4.数据库连接池,驱动包
5.其它模块
- jstl
- servlet-api,注意其
scope
为provided
,表示服务器提供的有 - junit,注意其
scope
为test
- jackson,返回
json
数据用
6.其它可选的包,根据自己需求,导入的包,如
- mybatis generator的包,自动生成mybatis相关的mapper和sql
- mybatis的pagehelper,分页插件
- spring-test包,用于测试
- hibernate-validator,JSR303数据校验
一些注意点是:
1.在maven中依赖spring-webmvc
后,会自动导入如下的包,所以就不用导入其它的包了,可参考spring核心框架体系结构(各个jar包作用),来了解各个jar包之间的依赖关系:
- spring-webmvc
- spring-aop
- spring-beans
- spring-context
- spring-core
- commons-logging
- spring-expression
- spring-web
pom.xml
中导入的主要包如下:
<properties> <!-- spring版本号 --> <spring.version>4.1.1.RELEASE</spring.version> <!-- mybatis版本号 --> <mybatis.version>3.4.2</mybatis.version> </properties> <dependencies> <!-- Springmvc Spring的包 --> <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <!-- Spring jdbc --> <!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${spring.version}</version> </dependency> <!-- Spring 面向切面编程 --> <!-- https://mvnrepository.com/artifact/org.springframework/spring-aspects --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <version>${spring.version}</version> </dependency> <!-- Mybatis --> <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>${mybatis.version}</version> </dependency> <!-- Mybatis整合Spring的适配包 --> <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.3.1</version> </dependency> <!-- 数据库连接池 驱动的包 --> <!-- https://mvnrepository.com/artifact/c3p0/c3p0 --> <dependency> <groupId>c3p0</groupId> <artifactId>c3p0</artifactId> <version>0.9.1</version> </dependency> <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.41</version> </dependency> <!-- jstl, servlet-api, junit --> <!-- https://mvnrepository.com/artifact/jstl/jstl --> <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.0.1</version> <scope>provided</scope> </dependency> <!-- https://mvnrepository.com/artifact/junit/junit --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <!-- https://mvnrepository.com/artifact/org.mybatis.generator/mybatis-generator-core --> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>1.3.5</version> </dependency> <!-- spring测试模块 --> <!-- https://mvnrepository.com/artifact/org.springframework/spring-test --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring.version}</version> <scope>test</scope> </dependency> <!-- 引入pageHelper分页插件 --> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.0.0</version> </dependency> <!-- Jackson返回json数据用 --> <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.8.8</version> </dependency> <!-- JSR303数据校验支持 1.tomcat7以上的服务器,直接导入hibernate-validator即可 2.tomcat7以下的服务器,el表达式不是新的标准,所以额外的给服务器lib包中替换新的标准的el --> <!-- https://mvnrepository.com/artifact/org.hibernate.validator/hibernate-validator --> <dependency> <groupId>org.hibernate.validator</groupId> <artifactId>hibernate-validator</artifactId> <version>6.0.2.Final</version> </dependency> </dependencies>
静态文件的处理
对于js、css,image等静态资源,可在webapp
文件下,创建一个static
文件夹,将所有的静态资源放在static文件夹下,如下:
配置文件
配置文件主要包括如下的几个部分:
- web.xml的配置
- Spring的配置
- SpringMVC的配置
- Mybatis的配置
web.xml
的配置
web.xml
的配置主要包括:
- 启动Spring的容器的配置,配置一个
ContextLoaderListener
,指定spring配置文件的位置 - 配置SpringMVC的前端控制器
DispatcherServlet
。其默认配置文件名为servlet的名字-servlet.xml
,其默认的位置是位于WEB-INF
文件夹下。但我们也可以指定SpringMVC配置文件的文件名和位置 - 字符编码过滤器
- 如果是使用REST风格的URI,配置
HiddenHttpMethodFilter
过滤器。如果想直接可以发送PUT请求,可配置一个HttpPutFormContentFilter
过滤器
配置文件都位于src/main/resources
下:
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_2_5.xsd" id="WebApp_ID" version="2.5"> <!-- 1.启动Spring的容器 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- 2.SpringMVC的前端控制器 --> <servlet> <servlet-name>dispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:dispatcherServlet-servlet.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <!-- 3.字符编码过滤器,一定放在所有过滤器之前 --> <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> <init-param> <param-name>forceRequestEncoding</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>forceResponseEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- 4.使用Restful风格的URI,把post请求转为delete或put请求 --> <filter> <filter-name>HiddenHttpMethodFilter</filter-name> <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class> </filter> <filter-mapping> <filter-name>HiddenHttpMethodFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- HttpPutFormContentFilter 可直接发送put请求 --> <filter> <filter-name>HttpPutFormContentFilter</filter-name> <filter-class>org.springframework.web.filter.HttpPutFormContentFilter</filter-class> </filter> <filter-mapping> <filter-name>HttpPutFormContentFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping></web-app>
SpringMVC的配置
SpringMVC的配置dispatcherServlet-servlet.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/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd 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-4.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd"> <!-- SpringMVC的配置文件,包含网站跳转逻辑的控制,配置 --> <!-- 只扫描控制器,需要把use-default-filters设置为false --> <context:component-scan base-package="com.wz" use-default-filters="false"> <!-- 只扫描控制器 --> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/> </context:component-scan> <!-- 配置视图解析器 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/"></property> <property name="suffix" value=".jsp"></property> </bean> <!-- 两个标准配置 --> <!-- 将springmvc不能处理的资源交给tomcat --> <mvc:default-servlet-handler/> <!-- 能支持springmvc更高级的功能,比如JSR303校验,快捷的ajax..... --> <mvc:annotation-driven/></beans>
Spring的配置
Spring的配置文件applicationContext.xml
,包括:
1.数据源
2.事务控制
3.Mybatis的整合
- mybatis配置文件的位置
- mybatis的数据源
- 指定mapper映射文件的位置
- 扫描路径,即dao接口的位置
创建一个dbconfig.properties
,包含数据源相关信息:
jdbc.driverClass=com.mysql.jdbc.Driverjdbc.jdbcUrl=jdbc:mysql://127.0.0.1:3306/ssm_crud?useUnicode=true&characterEncoding=utf8jdbc.user=rootjdbc.password=
applicationContext.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:aop="http://www.springframework.org/schema/aop" 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-4.1.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.1.xsd"> <!-- Spring的配置文件,主要配置和业务逻辑有关的 --> <context:component-scan base-package="com.wz"> <!-- 不扫描控制器 --> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" /> </context:component-scan> <!-- 数据源 --> <context:property-placeholder location="classpath:dbconfig.properties" /> <bean id="pooledDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass" value="${jdbc.driverClass}"></property> <property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property> <property name="user" value="${jdbc.user}"></property> <property name="password" value="${jdbc.password}"></property> </bean> <!-- 配置和Mybatis的整合 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="pooledDataSource"></property> <!-- 指定mybatis全局配置文件的位置 --> <property name="configLocation" value="classpath:mybatis-config.xml"></property> <!-- 指定mybatis mapper文件 --> <property name="mapperLocations" value="classpath:mapper/*.xml"></property> </bean> <!-- 配置扫描器,将mybatis接口的实现加入到ioc容器 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <!-- 扫描所有dao接口的实现,加入到ioc容器 --> <property name="basePackage" value="com.wz.crud.dao"></property> </bean> <!-- 配置一个批量插入的sqlSession 可选 --> <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate"> <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"></constructor-arg> <constructor-arg name="executorType" value="BATCH"></constructor-arg> </bean> <!-- 事务控制的配置 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="pooledDataSource"></property> </bean> <!-- 开启基于注解的事务,使用xml配置形式的事务(主要使用的都是配置式) --> <aop:config> <!--切入点表达式 --> <aop:pointcut expression="execution (* com.wz.crud.service..*(..))" id="txPoint" /> <!-- 配置事务增强 --> <aop:advisor advice-ref="txAdvice" pointcut-ref="txPoint" /> </aop:config> <!-- 配置事务增强,事务如何增强 --> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <!-- 所有的方法都是事务方法 --> <tx:method name="*" /> <!-- 以get开始的方法 --> <tx:method name="get*" read-only="true"/> </tx:attributes> </tx:advice></beans>
Mybatis配置
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> <!-- 驼峰转换 --> <setting name="mapUnderscoreToCamelCase" value="true" /> </settings> <typeAliases> <package name="com.wz.crud.bean" /> </typeAliases> <!-- 在 MyBatis 配置 xml 中配置拦截器插件 可选 --> <plugins> <!-- com.github.pagehelper为PageHelper类所在包名 --> <plugin interceptor="com.github.pagehelper.PageInterceptor"> <!-- 使用下面的方式配置参数,后面会有所有的参数介绍 --> <!-- 分页合理化参数 --> <property name="reasonable" value="true" /> </plugin> </plugins></configuration>
测试
框架基本搭建起来后,就需要验证测试了。
官网Testing
可参考:
- 使用 Spring 进行单元测试
- Spring Test 整合 JUnit 4 使用总结
DAO测试
原来通常的方法是,加载IoC容器获取bean,但这样做还是比较麻烦的。Spring有一个测试框架,能够整合JUnit进行测试。
1.需要导入Spring Test
,在maven中添加依赖即可:
<!-- spring测试模块 --> <!-- https://mvnrepository.com/artifact/org.springframework/spring-test --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring.version}</version> <scope>test</scope> </dependency>
2.配置测试类,添加如下的注解,指定spring配置文件的位置:
@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(locations = { "classpath:applicationContext.xml" })
@RunWith
注释标签是 Junit 提供的,用来说明此测试类的运行者,这里用了SpringJUnit4ClassRunner
,这个类是一个针对 Junit 运行环境的自定义扩展,用来标准化在 Spring 环境中 Junit4.5 的测试用例,例如支持的注释标签的标准化@ContextConfiguration
注释标签是 Spring test context 提供的,用来指定 Spring 配置信息的来源,支持指定 XML 文件位置或者 Spring 配置类名,这里我们指定 classpath 下的 applicationContext.xml 为配置文件的位置
Mapper的测试如下:
@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(locations = { "classpath:applicationContext.xml" })public class MapperTest { @Autowired DepartmentMapper departmentMapper; @Autowired EmployeeMapper employeeMapper; @Autowired SqlSession sqlSession;// 批量的sqlSession @Test public void testCRUD() { // ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); // context.getBean(DepartmentMapper.class); System.out.println(departmentMapper); // 1.插入几个部门 // departmentMapper.insertSelective(new Department(null, "开发部")); // departmentMapper.insertSelective(new Department(null, "测试部")); // 2.插入几个员工 // employeeMapper.insertSelective(new Employee(null, "Jerry", "M", "jerry@163.com", 3)); // 批量插入 EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class); for (int i = 0; i < 1000; i++) { String uid = UUID.randomUUID().toString().substring(0, 5) + i; mapper.insertSelective(new Employee(null, uid, "M", uid + "@163.com", 3)); } }}
SpringMVC测试
可参考:
- pring MVC测试框架详解——服务端测试
- 基于Spring MVC做单元测试(一)——使用Spring Test框架
如下的分页测试:
@RunWith(SpringJUnit4ClassRunner.class)@WebAppConfiguration@ContextConfiguration(locations = { "classpath:applicationContext.xml", "classpath:dispatcherServlet-servlet.xml"})public class MVCTest { @Autowired WebApplicationContext context; //虚拟mvc请求,获得处理结果 MockMvc mockMvc; @Before public void initMockMVC() { mockMvc = MockMvcBuilders.webAppContextSetup(context).build(); } @Test public void testPage() throws Exception{ MvcResult result = mockMvc.perform(MockMvcRequestBuilders.get("/emps").param("pn", "1")).andReturn(); MockHttpServletRequest request = result.getRequest(); PageInfo pi = (PageInfo) request.getAttribute("pageInfo"); System.out.println("当前页码:" + pi.getPageNum()); System.out.println("总页码:" + pi.getPages()); System.out.println("总记录数:" + pi.getTotal()); System.out.println("在页面连续显示的页码:"); int[] nums = pi.getNavigatepageNums(); for (int i : nums) { System.out.print(" " + i); } List<Employee> list = pi.getList(); for (Employee employee : list) { System.out.println(employee); } }}
参考
- xxxSSM整合视频
- Maven搭建SSM框架
- Maven搭建SSM框架
- Maven搭建SSM框架
- [非maven] ssm框架搭建
- maven+SSM框架工程搭建
- 用maven搭建SSM框架
- maven+ssm框架搭建+oracle
- eclipse + maven搭建SSM框架
- eclipse + maven搭建SSM框架
- eclipse + maven搭建SSM框架
- 用MAVEN搭建SSM框架
- eclipse maven ssm框架搭建
- 基于maven管理的SSM框架搭建
- 使用IDEA maven搭建SSM框架
- ssm+rpc+maven框架搭建(1)
- ssm+rpc+maven框架搭建(2)
- Maven环境下SSM框架搭建
- 使用Maven搭建SSM框架教程
- 普通流中块级元素的水平格式化和margin
- 树莓派3B+ 启用LCD显示屏
- 今天第一次写博客,心情好紧张。
- eclipse下配置struts2,超详细!(包括war文件不能解压问题)
- 数据结构-二叉树的基本操作
- Maven搭建SSM框架
- 斧钺智能推出两款无人机,二次发力专业级市场
- 6.1(2)
- CC2530中的MAC层确认帧(兼容IEEE 802.15.4-2006)
- 线性链表
- maximal-rectangle Java code
- 6.1(1)
- 全卷积神经网络 图像语义分割实验:FCN数据集制作,网络模型定义,网络训练(提供数据集和模型文件,以供参考)
- Linux之CentOS-7安装步骤总结