转载文章,排版可能有些错乱,建议移步原文:
https://blog.csdn.net/asd_128598/article/details/82952010#7springMVC_114
SSM项目搭建的主要步骤
- 一、说明
- 二、配置springMVC
- 1、前端控制器(DispatcherServlet)
- 2、拦截器(HandlerInterceptor)
- 3、视图解析器(ViewResolver,全称为InternalResourceViewResolver(内部资源的视图解析器))
- 4、后端控制器(Controller)
- 5、url映射处理器(HanlderMapping)
- 扩展配置
- 6、全站乱码处理过滤器(CharacterEncodingFilter)
- 7、开启springMVC注解
- 8、放行静态资源文件
- 三、配置Mybatis
- 1、数据源(使用druid连接池,DruidDataSource)
- 2、会话工厂(SqlSessionFactoryBean)
- 3、Mapper扫描(MapperScannerConfigurer)
- 4、Mybatis自身的配置(主要用来配置mybatis自身的某些功能,最后使用会话工厂来加载)
- 四、配置Spring
- 五、整体搭建
一、说明
因本人个人习惯,一般将项目的核心的配置分为如下几个配置文件配置(名字也是本人的个人爱好,不喜别喷),下文说到配置文件时就不会再进行解释。
spring-mybatis.xml:springMybatis配置文件,主要用来配置与mybatis有关的配置,如数据源等。
spring-mvc.xml:springMVC配置文件,主要用来配置与springMVC有关的配置,如视图解析器等。
spring.xml:spring配置文件,主要用来配置其他的配置,如包扫描,事务管理等。
spring-configs.xml:核心配置文件,主要用来引入其他的配置文件和配置一些共用的配置,如引入springMybatis配置文件和配置包扫描等。
二、配置springMVC
springMVC的五大组件,包括“前端控制器”、“后端控制器”、“视图解析器”、“拦截器”和“url映射处理器”。
1、前端控制器(DispatcherServlet)
1.1 在web.xml文件中配置
1.2 给“contextConfigLocation”变量指定核心配置文件的路径(如:classpath:/spring-configs.xml)。在前端控制器启动的时候会使用其来加载核心配置文件。
1.3 设置优先级,一般设置为1(数字越小优先级越高)。如果没有设置,服务器启动时不会启动前端控制器。
1.4 具体代码配置如下:
<!-- 配置前端控制器 -->
<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:/spring-configs.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup> <!-- 配置优先级,数字越小越高 -->
</servlet>
<!--
.do .action 以前的规范,现在不常用了
路径描述:
前缀型: /service/* 只要请求以service开头被前端控制器拦截
后缀型: .do 请求拦截以.do结尾
全路径: /service/*.do 以service开头以.do结尾请求
/* 不管请求是什么路径统统拦截
/ 拦截请求和静态资源,放行jsp等动态资源(静态资源一般会在核心配置文件中配置放行,具体配置看扩展8)
为restFul格式做准备
-->
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
2、拦截器(HandlerInterceptor)
本人没有配置
3、视图解析器(ViewResolver,全称为InternalResourceViewResolver(内部资源的视图解析器))
3.1 在springMVC配置文件中配置
3.2 给“Prefix”变量指定前缀,在解析视图时和后缀一起与传入的字符串拼接成完整的url路径
3.3 给“Suffix”变量指定后缀,同上
3.4 具体代码配置如下:
<!-- 配置视图解析器,具体实现类为:InternalResourceViewResolver(内部资源视图解析器) -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="Prefix" value="/WEB-INF/views/"/>
<property name="Suffix" value=".jsp"/>
</bean>
4、后端控制器(Controller)
4.1 可以配置也可以不配置。
4.2 如果想配置就使用bean标签在springMVC配置文件中配置(一般不建议使用)
4.3 如果不想配置就使用注解的方式。在类前面添加后端控制器注解(@Controller),然后在spring配置文件中配置扫描就行了。(建议使用)
4.4 具体代码实现:
@Controller //后端控制器注解
@RequestMapping("/") //url映射路径注解
public class PageController {
@RequestMapping("doTestPage")
public String doTestPage(){
return "test_page";
}
}
5、url映射处理器(HanlderMapping)
5.1 不需要配置URL映射处理器,但需要使用注解方式配置url映射路径。在后端控制器类或方法的前面加上url映射路径的注解(@ RequestMapping)。(建议使用,本人表示只会注解方式,其他方式不会)
5.2 具体代码实现:
@Controller //后端控制器注解
@RequestMapping("/") //url映射路径注解
public class PageController {
@RequestMapping("doTestPage")
public String doTestPage(){
return "test_page";
}
}
扩展配置
6、全站乱码处理过滤器(CharacterEncodingFilter)
6.1 在web.xml文件中配置
6.2 给“encoding”变量指定编码格式(一般为UTF-8)
6.3 具体代码配置如下:
<!-- 为了解决中文乱码问题(POST乱码),配置过滤器 -->
<filter>
<filter-name>characterEncodingFilter</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>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
注:该过滤器只针对POST请求,其他请求无效。请求参数中包含中文的,建议使用POST请求
7、开启springMVC注解
7.1 在springMVC配置文件中配置
7.2 具体代码配置如下:
<!-- 开启mvc注解 -->
<mvc:annotation-driven/>
7.3 扩展
7.3.1 配置阿里巴巴的fashjson对象,主要用于高并发时的数据传输格式转化
7.3.2 具体代码配置如下:
<!-- 配置阿里巴巴的fashjson对象,主要用于高并发时的数据传输格式转化 -->
<mvc:annotation-driven>
<mvc:message-converters register-defaults="true">
<bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
<property name="SupportedMediaTypes">
<list>
<value>text/html;charset=utf-8</value>
<value>application/json;charset=utf-8</value>
</list>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
注:如果不开启springMVC注解,会出现一些意想不到的问题。例如:@GetMapping注解无效,@DateTimeFormat注解无效等
8、放行静态资源文件
8.1 在springMVC配置文件中配置
8.2 具体代码配置如下:
<!-- 放行静态资源文件 -->
<mvc:default-servlet-handler/>
注:放行后,过滤器和前端控制器将不会再进行拦截
三、配置Mybatis
1、数据源(使用druid连接池,DruidDataSource)
1.1 在springMybatis配置文件配置
1.2 给“DriverClassName”变量指定驱动
1.3 给“Url”变量指定数据库的url
1.4 给“Username”变量指定数据库的用户名
1.5 给“Password”变量指定数据库的密码
1.6 具体代码配置如下:
<!-- 配置数据源 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<!-- 驱动的类全名 -->
<property name="DriverClassName" value="#{jdbc.jdbcDriver}"/>
<!-- 数据库的url -->
<property name="Url" value="#{jdbc.jdbcUrl}"/>
<!-- 数据库的用户名 -->
<property name="Username" value="#{jdbc.jdbcUsername}"/>
<!-- 数据库的密码 -->
<property name="Password" value="#{jdbc.jdbcPassword}"/>
</bean>
2、会话工厂(SqlSessionFactoryBean)
2.1 在springMybatis配置文件配置
2.2 给“DataSource”变量指定一个数据源(这里为druid连接池)
2.3 给“ConfigLocation”变量指定mybatis自身的配置文件(mybatis-config.xml),用于加载mybatis自身的配置
2.4 给“MapperLocations”变量指定mapper文件的路径,为后面的生成动态代理对象做准备
2.5 给“TypeAliasesPackage”变量指定扫描路径,相当于给指定包下的pojo对象起别名。typeAliasesPackage 默认只能扫描某一个路径下,或以逗号等分割的 几个路径下的内容,不支持通配符和正则
2.6 具体代码配置如下:
<!-- 配置会化工厂 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 指定数据源 -->
<property name="DataSource" ref="dataSource"/>
<!-- 指定mybatis自身的配置文件 -->
<property name="ConfigLocation" value="classpath:/mybatis/mybatis-config.xml"/>
<!-- 指定mapper文件路径 -->
<property name="MapperLocations" value="classpath*:/mybatis/mapper/*Mapper.xml"/>
<!-- 指定扫描路径 -->
<property name="TypeAliasesPackage" value="com.jt.manage.pojo"/>
</bean>
注:会话工厂(SqlSessionFactory)是通过SqlSessionFactoryBean创建的,所有配置的是SqlSessionFactoryBean,而不是SqlSessionFactory
3、Mapper扫描(MapperScannerConfigurer)
3.1 在springMybatis配置文件配置
3.2 给“SqlSessionFactoryBeanName”变量指定一个会话工厂类,也可以不写,spring默认注入
3.3 给“”变量指定dao接口的包路径,主要用于扫描并生成对应的动态代理对象
3.4 具体代码配置如下:
<!-- 配置mapper扫描 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 注入会化工厂 -->
<property name="SqlSessionFactoryBeanName" value="sqlSessionFactory"/>
<!-- 注入dao接口包路径 -->
<property name="BasePackage" value="com.jt.**.dao"/>
</bean>
注:MapperScannerConfigurer类会扫描指定的dao包下的接口,并关联对应的mapper动态生成代理对象,代理对象的“BeanId”默认为接口名(首字母小写)
4、Mybatis自身的配置(主要用来配置mybatis自身的某些功能,最后使用会话工厂来加载)
4.1 配置时需要注意标签的配置顺序,如果顺序颠倒会出现问题。可能配置无效或报错。将鼠标放在configuration标签上面会提示其他标签的配置顺序,具体如下:
配置顺序 (properties?, settings?,typeAliases?,typeHandlers?,objectFactory?, objectWrapperFactory?, reflectorFactory?, plugins?, environments?, databaseIdProvider?, mappers?)
4.2 开启驼峰自动映射
具体代码配置如下:
<settings>
<!-- 开启驼峰自动映射 -->
<setting name="mapUnderscoreToCamelCase" value="true" />
</settings>
四、配置Spring
1、事务控制
1.1 配置事务控制
具体配置如下:
<!-- 配置事务控制 -->
<tx:annotation-driven/>
1.2 定义事务管理器
具体配置如下:
<!-- 定义事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="DataSource" ref="dataSource"></property>
</bean>
1.3 定义事务策略
具体配置如下:
<!-- 定义事务策略
propagation="REQUIRED" 表示执行该方法必须添加事务
propagation="SUPPORTS" 表示之前操作添加了事务,该方法也添加事务,否则该操作没有添加事务
read-only="true" 表示该方法中只允许查询操作,如果其中存在增删改操作则会报错
-->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="save*" propagation="REQUIRED"/>
<tx:method name="delete*" propagation="REQUIRED"/>
<tx:method name="update*" propagation="REQUIRED"/>
<tx:method name="find*" propagation="SUPPORTS" read-only="true"/>
<tx:method name="*" propagation="SUPPORTS" read-only="true"/>
</tx:attributes>
</tx:advice>
1.4 定义事务切面
具体配置如下:
<!-- 定义事务切面
pointcut*, advisor*, aspect*
expression 切入点表达式
within(包名.类名) 按类匹配,粗粒度
execution(返回值的类型 包名.类名.方法名(参数列表)) 细粒度
-->
<aop:config>
<!-- 切入点 -->
<aop:pointcut expression="execution(* com.jt.manage.service..*.*(..))" id="pc"/>
<!-- 指定事务策略和切入点 -->
<aop:advisor advice-ref="txAdvice" pointcut-ref="pc"/>
</aop:config>
2、导入properties配置文件的三种方式
2.1 使用util:properties标签引入
2.1.1 这种引入只能同时引入一个或一批命名有规律并在同一个目录下的properties配置文件
2.1.2 具体代码配置如下:
2.2 使用context:property-placeholder标签引入
2.2.1 这种引入只能同时引入一个或一批命名有规律并在同一个目录下的properties配置文件
2.2.2 具体代码配置如下:
<context:property-placeholder location="classpath:/property/*.properties"/>
2.3 使用PropertyPlaceholderConfigurer类引入
2.3.1 这种引入可以同时引入一个或一批properties配置文件,其中配置文件不需命名有规律,路径也可以有不同。
2.3.2 具体代码配置如下:
<bean id="jdbc" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="Locations">
<list>
<value>classpath:/property/jdbc.properties</value>
</list>
</property>
</bean>
五、整体搭建
1、核心配置文件中引入其他的配置文件
1.1 核心配置文件中引入其他的配置文件,在服务器启动后由前端控制器一起加载
1.2 具体代码配置如下:
<!-- 引入其他的配置文件 -->
<import resource="classpath:/spring/spring-mybatis.xml"/>
<import resource="classpath:/spring/spring-mvc.xml"/>
<import resource="classpath:/spring/spring.xml"/>
2、包路径的创建
2.1 包括service、dao、controller等包。
3、配置Tomcat服务器插件,并配置tomcat启动。
3.1 在pom配置文件中添加Tomcat服务器插件配置
3.1.1 具体代码配置如下:
<build>
<plugins>
<!-- 配置tomcat7服务器插件 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>80</port> <!-- 服务器端口号 -->
<path>/</path> <!-- 工程访问路径,默认为项目名称 -->
</configuration>
</plugin>
</plugins>
</build>
3.2 配置Tomcat启动
3.2.1 具体操作如下: