结语:
到此为止,大部分的基础知识已经学习完毕了,但并没有学习全面,连cookie操作,图片的上传优化,分页请求实现等都还没有实现。故,在后面需要进行完整的项目实现,在此将Spring+ SpringMvc + Mybatis的工程进行了总结,和配置信息清单的总述;
SpringMvc+Spring+Mybatis 总配置 :
下载地址 :http://download.youkuaiyun.com/detail/lablenet/9396439
清单如下 :
1.Jar包
Spring 3.2.0SpringMvc 3.2.0
Mybatis 3.2.7
Mybatis-Spring 1.2.2
Oracle-jdbc 5
mysql-jdbc 5.1.7
jstl 1.2
jackson-mapper 1.9.11
jackson-core 1.9.11
dbcp-cglib 2.2.2
hibernate-validation 4.3.0
2.Spring配置
2.1 applicationContext-dao.xml1)加载数据库配置信息
<context:property-placeholder location="classpath:db.properties"/>
2)加载数据源 :
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="${jdbc.driver}"></property>
<property name="url" value="${jdbc.url}"></property>
<property name="username" value="${jdbc.name}"></property>
<property name="password" value="${jdbc.pass}"></property>
<property name="maxActive" value="10"></property>
<property name="maxIdle" value="5"></property>
</bean>
3)配置sqlSessionFactory
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="configLocation" value="classpath:mybatis/sqlmapConfig.xml"></property>
<property name="dataSource" ref="dataSource"></property>
</bean>
4)采用mapper扫描方式 ,加载mapper
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="cn.labelnet.ssm.mapper"></property>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
</bean>
2.2 applicationContext-service.xml
配置service的bean , 提供给HandlerMapping使用
2.3 applicationContext-transcation.xml
1)配置事务管理器,使用Spring下的jdbc事务管理器
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager" >
<property name="dataSource" ref="dataSource"></property>
</bean>
2)通知配置
<tx:advice id="txManager" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="insert*" propagation="REQUIRED"/>
<tx:method name="update*" propagation="REQUIRED"/>
<tx:method name="delete*" propagation="REQUIRED"/>
<tx:method name="find*" propagation="SUPPORTS" read-only="true"/>
</tx:attributes>
</tx:advice>
3)aop配置
<aop:config>
<aop:pointcut expression="execution(* cn.labelnet.ssm.service.impl.*.*(..))" id="perfrom"/>
<aop:advisor advice-ref="txManager" pointcut-ref="perfrom"/>
</aop:config>
2.4 Springmvc.xml
1)配置HandlerMapping(Controller)扫描方式 ,指定包名
<context:component-scan base-package="cn.labelnet.ssm.controller"></context:component-scan>
2)RESTful静态文件加载配置,指定自己路径
<mvc:resources location="/" mapping="/**" />
3)使用注解方式配置:不建议
4)使用注解驱动方式配置 :
<mvc:annotation-driven conversion-service="conversionService" validator="validator"></mvc:annotation-driven>
5)配置视图解析器
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" />
6)可配置自定义类型转换器
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="converters">
<list>
<!-- 在这里可以定义多个转换 -->
<bean class="cn.labelnet.ssm.controller.converter.FormatDateConverter"></bean>
</list>
</property><span style="font-family: 'Comic Sans MS';font-size:18px;"> </bean></span>
7)配置校验器
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
<!-- 配置hibernate校验器 -->
<property name="providerClass" value="org.hibernate.validator.HibernateValidator"></property>
<!-- 指定校验使用的资源文件,在文件中配置校验错误信息,如过不指定默认使用classpath下的ValidationMessages.properties -->
<property name="validationMessageSource" ref="messageSource"></property>
</bean>
8)配置校验器信息配置文件
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<!-- 资源文件名:配置自己的验证信息 -->
<property name="basenames">
<list>
<value>classpath:CustomValidationMessage</value>
</list>
</property>
<!-- 资源文件编码格式 -->
<property name="fileEncodings" value="utf-8"></property>
<!-- 对资源文件内容缓存时间,单位秒 -->
<property name="cacheSeconds" value="120"></property>
</bean>
9)配置全局异常类
实现 HandlerExceptionResolver接口 :
<bean class="cn.labelnet.ssm.controller.exception.CustomExceptionResover"></bean>
10)配置文件上传解析器
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 最大的上传尺寸 -->
<property name="maxUploadSize" value="5242880"></property>
</bean>
11)配置拦截器
<mvc:interceptors>
<!-- 多个拦截器,顺序执行 -->
<mvc:interceptor>
<!-- /** 表示所有的url,包括子url路径 -->
<mvc:mapping path="/**"/>
<bean class="cn.labelnet.ssm.filter.HanderInterceptor1"></bean>
</mvc:interceptor>
<!-- 配置登陆拦截器 -->
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="cn.labelnet.ssm.filter.LoginHandlerIntercepter"></bean>
</mvc:interceptor>
<!--
.....
-->
</mvc:interceptors>
2.4 Spring和SpringMVC
配置信息在这里实现,尤其是SpringMvc的配置尤其重要,涉及到很多,比如 校验器,拦截器,全局异常信息类,文件上传解析器等,
而其实都是Spring的配置文件,Spring配置文件加载,在web.xml中进行,采用通配符的方式加载Spring的配置文件,所以Spring的
配置文件在命名的时候,也很重要!
<!-- 加载spring容器:采用通配符的方式实现 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/classes/spring/applicationContext-*.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
而SpringMVc的配置文件加载,在SpringMVc的前端控制器中进行加载 ,比如 :
<!-- 配置Springmvc 处理器 -->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/springmvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
3.Mybatis配置
3.1 db.properties数据库信息
3.2 log4j.properties
固定的配置信息,一般在开发的时候,将其设置为 DEBUG模式 ,开发完成时,设置为 INFO 模式 ;
# Global logging configuration
# 在这里修改logger模式
log4j.rootLogger=DEBUG, stdout
# MyBatis logging configuration...
log4j.logger.org.mybatis.example.BlogMapper=TRACE
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
3.3 sqlMapConfig.xml
对Mybatis的配置信息的配置,如 setiing, 别名 等 ,而 mapper的加载 就不需要在这里实现了,
在SpringMvc.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>
</configuration>
3.4 Mapper.xml
在这里我们需要注意几点,首先mapper.xml和mapper.java在同一个包下,且名字一样;其次是,mapper.xml
中的命名空间是mapper.java的全限定名,操作的id是mapper.java的方法名;
<?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="全限定名">
</mapper>
4.web配置-web.xml
4.1 过滤器实现
固定不变,可直接复制
<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>
4.2 加载Spring容器
需要配置<param-value>的spring配置文件的位置,可以在部署在tomcat上后在配置位置;
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/classes/spring/applicationContext-*.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
4.3 配置SpringMvc前端控制器
需要配置springmvc.xml 的位置,和 url-pattern 的配置,url的后缀;
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/springmvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
4.4 可以配置RESTful的URL支持
url-pattern的值为 / ;,可以同时配置,并不冲突;
<servlet>
<servlet-name>springmvc_rest</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/springmvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc_rest</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
5.工程目录固定化
5.1 srccn.labelnet.ssm.controller
--HandlerMapping.java : controller实现
cn.labelnet.ssm.controller.converter
--自定义参数类型,实现Converter接口
cn.labelnet.ssm.controller.exception
--自定义异常类,继承Exception
--全局异常处理器,实现HandlerExceptionResolver接口
cn.labelnet.ssm.controller.validated
--校验分组接口,定义即可,不需要方法
cn.labelnet.ssm.filter
--拦截器实现,实现HandlerInterceptor接口
--实现preHandler,postHandler,afterHandler三个方法
cn.labelent.ssm.mapper
-- mapper.java 和 mapper.xml
cn.labelnet.ssm.po
-- pojo类
cn.labelnet.ssm.po.custom
-- pojo拓展类
cn.labelent.ssm.po.vo
--包装类
cn.labelnet.ssm.service
-- 业务接口
cn.labelnet.ssm.service.impl
-- 业务接口实现类
5.2 config
--db.properties
--log4j.properties
--CustomValidationMessage.properties
mybatis
--sqlmapconfig.xml
spring
--applicationContext-dao.xml
--applicationContext-service.xml
--applicationContext-transcation.xml
--springmvc.xml
5.3 test
cn.labelnet.ssm.test
--各种测试类
5.5 webRoot
个人需求
总配置下载地址 :http://download.youkuaiyun.com/detail/lablenet/9396439