SSM项目整合配置项
1 MVC字符编码转换过滤Filter
web.xml 设置
<!--使用SpringMVC自带编码过滤器-->
<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>
<!--配置前端控制器-->
<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-mvc.xml,classpath:application.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<!--设置错误代码页面-->
<error-page>
<error-code>404</error-code>
<location>/WEB-INF/jsp/err/404.jsp</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/WEB-INF/jsp/err/505.jsp</location>
</error-page>
2 MVC自定义拦截器
1.自定义拦截器:实现HandlerInterceptor
public class MyInterceptor1 implements HandlerInterceptor {
@Override //在控制器方法之前执行
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("之前...");
return true;
}
@Override //在控制器方法之后执行
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("之后...");
}
@Override //整个响应结束最终执行 条件:preHandle的返回值true
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("响应结束..");
}
}
2.配置拦截器(spring-mvc.xml)
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="cn.itcast.interceptor.MyInterceptor1"></bean>
</mvc:interceptor>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<mvc:exclude-mapping path="/login.do"/><!--排除项-->
<bean class="cn.itcast.interceptor.MyInterceptor2"></bean>
</mvc:interceptor>
</mvc:interceptors>
3 MVC自定义类型转化器:StringToDataConverter
springmvc自定义的日期类型转换器不通用 只能转换2018/11/10类型日期 不能转换2018-11-10
需求:自定义一个通用的类型转换器 覆盖掉springmvc的日期类型转换器
1 自定义转化器 实现Converter接口
2 Spring-mvc.xml <!--指定使用自己的类型转换器-->
3 <!--将自定义的类型转化器交给springmvc的转换器集合-->
自定义类型转化器:StringToDataConverter
public class StringToDataConverter implements Converter<String,Date> {
@Override //s代表的就是页面传递的参数
public Date convert(String s) {
SimpleDateFormat simpleDateFormat =null;
Date date =null;
try {
if (s.contains("/")){
simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd");
}else{
simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
}
date = simpleDateFormat.parse(s);
}catch (Exception e){
e.printStackTrace();
}
return date;
}
}
springMVC XML
<!--指定使用自己的类型转换器-->
<mvc:annotation-driven conversion-service="myCon"></mvc:annotation-driven>
<!--将自定义的类型转化器交给springmvc的转换器集合-->
<bean id="myCon" class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<set>
<bean id="stringToData" class="cn.itcast.converter.StringToDataConverter"/>
</set>
</property>
</bean>
4 springmvc的统一异常处理器
1 创建错误页面
2 创建类实现接口HandlerExceptionResolver
public class MyException implements HandlerExceptionResolver {
@Override //为所有异常方法做统一处理
public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("msg","不好意思,小哥哥,你要找的页面丢失了,请骚后再来...");
modelAndView.setViewName("error");
return modelAndView;
}
}
3 配置异常处理器(交给spring容器管理)
(spring-mvc.xml)
<!--注册统一异常处理器-->
<bean class="cn.itcast.exception.MyException"></bean>
5 Spring自带事务
application.xml设置
<!--通知类 DataSourceTransactionManger-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="druid"></property>
</bean>
<!--方法用的事务特性-->
<tx:advice id="myAdvice" transaction-manager="transactionManager">
<tx:attributes>
<!--按顺序匹配-->
<tx:method name="find*" read-only="true" propagation="SUPPORTS"/>
<tx:method name="*" read-only="false" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="pt" expression="execution(* cn.itcast.serviceimpl.*.*(..))"/>
<aop:advisor advice-ref="myAdvice" pointcut-ref="pt"></aop:advisor>
</aop:config>
6 与Mybatis整合重点
application.xml设置
<!--包扫描-->
<context:component-scan base-package="cn.liming"></context:component-scan>
<!----------------------------重要的代替Mybatis配置文件--------------------------------->
<!--
1 产生sqlsessionFactory
整合包mybatis-spring提供好了:sqlSessionFactoryBean
2 加载配置信息(SqlMapConfig.xml)
-->
<bean id="sqlsessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean" >
<!--别名映射-->
<property name="typeAliasesPackage" value="cn.liming.domain"></property>
<!--数据库的配置信息-->
<property name="dataSource" ref="druid"></property>
</bean>
<!--加载接口和配置文件的映射产生代理对象
MapperScannerConfigurer:加载接口和配置文件 自动产生基于接口的动态代理对象
-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer" id="mapperScannerConfigurer">
<property name="basePackage" value="cn/liming/dao"></property>
</bean>
<!----------------------------------------------------------------------------------->
<!--druid连接池-->
<context:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder>
<bean id="druid" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="${jdbc.driver}"></property>
<property name="url" value="${jdbc.url}"></property>
<property name="username" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
</bean>
7 springMVC上传
1)导入坐标
<!--文件上传坐标-->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.3</version>
</dependency>
- 上传页面
<form action="/upload" method="post" enctype="multipart/form-data">
<input type="file" name="uploadfile" />
<input type="submit" value="上传">
</form>
3)Controller
@RequestMapping(value = "/upload") //要求MultipartFile的属性名要和页面参数名一致
public String upload(MultipartFile uploadfile, HttpServletRequest request) throws IOException {
String filename = uploadfile.getOriginalFilename();
filename= UUID.randomUUID().toString().replace("-","")+filename;
//获取绝对路径
String path = request.getSession().getServletContext().getRealPath("/");
String date = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
System.out.println(date);
path=path+"upload\\"+date;
System.out.println(path);
File file = new File(path);
if(!file.exists()){
file.mkdirs();
}
// 读写数据
File file1 = new File(file,filename);
uploadfile.transferTo(file1);
return "redirect:/jsp/success.jsp";
}
Spring-MVC.xml
<!--配置MulipartFile对象的文件资源大小-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 设置上传文件的最大尺寸为 5MB -->
<property name="maxUploadSize">
<value>5242880</value>
</property>
</bean>
8 注意细节点:
- mybatis配置Mapper文件在resources 文件下时路径dao一直,创建时使用cn/liming/dao,不能使用cn.liming.dao创建
2)逻辑视图
spring-mvc.xml配置
<!--逻辑视图补全-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
<property name="prefix" value="/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>