SSM配置文件总结

小白一个,最近在整理SSM框架这方面的笔记,发出来一起来交流学习,主要是基础的一些配置,涉及的内容不是很深,比较适合框架这方面的初学者。

一、mybatis配置

1、全局setting配置(可选)

常用设置:

mapUnderscoreToCamelCase 是否开启自动驼峰命名规则(camel case)映射
defaultStatementTimeout 设置超时时间

更多设置

2、别名配置(可选)

单个别名配置


    
    

批量别名配置


    
    

3、配置mapper(被spring替代)

由于使用spring和mybatis整合包进行mapper扫描,这里就不需要配置了。但是必须遵循:mapper.xml和mapper,java文件同名且在同一目录下。

三、Dao层配置

1、加载配置文件


配置文件 db.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3366/wsttqs_bookstore?useSSL=false&characterEncoding=utf-8
jdbc.username=root
jdbc.password=123

2、加载数据源


    
    
    
    

3、装载sqlSessionFactory


    
    

4、mapper批量扫描

这里就是上面在sqlMapConfig中被替代的Mapper扫描。


    
    
    

需要注意的有以下两点:

  • 使用扫描器后不需要在SqlMapperConfig.xml中批量加载mapper了。但是还需要遵循mapper.java和mapper.xml同名且在同一目录下。自动扫描出来的mapper的bean的id为mapper类名(首字母小写) 。
  • 这里使用 sqlSessionFactoryBeanName 对应 value="sqlSessionFactory",而不是sqlSessionFactory 对应 ref="sqlSessionFactory",是因为后者会使上面的加载db.properties文件失效,进而导致配置数据源错误。

四、service层配置

这里只需要装载各个service的实现类即可。





五、事务处理&aop

这里主要是配置aop的事务操作

1、配置事务管理器


    
    

2、通知配置



    
        
        
        
        
        
        
        
        
        
        

3、配置aop


    

六、springmvc.xml

1、springmvc前端控制器



    springmvc
    org.springframework.web.servlet.DispatcherServlet
    
    
        contextConfigLocation
        classpath:springmvc.xml
    



    springmvc
    *.action

关于前端控制器mapping的配置,有以下两种:

  • .action或.do,访问以.action结尾由DispatcherServlet进行解析

    注:.action或.do只是一个后缀而已,从 struts 延续而来的。

  • /,所有访问的地址都由DispatcherServlet进行解析,对于静态文件的解析需要配置不让DispatcherServlet进行解析

  • 错误方式:/*,使用这种配置,最终要转发到一个jsp页面时,仍然会由DispatcherServlet解析jsp地址,不能根据jsp页面找到handler,会报错。

附:使用RESTful格式的url时,需要将 url-pattern 配置为 "/" ,但是这种配置与之前的.action方式是可以并存的,即使用/或.action都由DispatcherServlet进行解析。

唯一需要注意的就是解析静态文件,在springmvc配置文件中加入解析静态资源的方法即可:




2、处理器映射器&处理器适配器(非注解型)

配置处理器映射器可分为注解型配置和非注解型配置两类:

处理器映射器:

org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping
org.springframework.web.servlet.handler.SimpleUrlHandlerMapping

BeanNameUrlHandlerMapping 处理器映射器,会根据请求的url与spring容器中定义的处理器bean的name属性值进行匹配,从而在spring容器中找到处理bean的实例,如下所示:





SimpleUrlHandlerMapping是Spring MVC中适用性最强的Handler Mapping类,允许明确指定URL模式和Handler的映射关系。


    
        
            
            itemsController1
            itemsController1
        
    




注: 多个映射器可以并存,前端控制器判断url能让哪些映射器映射,就让正确的映射器处理。

处理器适配器 :

org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter

要求编写的Handler实现 Controller接口 。

org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter

要求编写的Handler实现 HttpRequestHandler接口。

两种适配器的区别可以看作是Controller和HttpRequestHandler接口的区别:

  • Controller接口的handleRequest方法返回ModelAndView
  • HttpRequestHandler接口没有返回值

相较而言,用HttpRequestHandler接口编写handler更加原始一点,好处是使用此方法可以通过修改response,设置响应的数据格式,比如响应json数据等。

response.setCharacterEncoding("utf-8");
response.setContentType("application/json;charset=utf-8");
response.getWriter().write("json串");

3、处理器映射器&处理器适配器(注解型)

注解映射器
  • spring3.1之前org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping
  • spring3.1之后org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping
注解适配器
  • spring3.1之前使用org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter
  • spring3.1之后使用org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter

注:注解的映射器和注解的适配器必须配对使用

固定语句:mvc:annotation-driven(实际开发中使用)

可以代替上面两个注解映射器和注解适配器的配置,默认加载了很多的参数绑定方法,比如json转换解析器就默认加载了,实际开发时使用mvc:annotation-driven 。

在springmvc.xml中加入下面语句即可:

特别注意:

使用注解的方式来配置,因为Handler中使用了@Controller注解之后,要在springmvc.xml的文件中加载Handler,要关注的是,因为采用注解方式的适配器和映射器,Handler是没有实现任何接口和继承任何类的,所以注解后还需要在配置文件中加载Handler。

加载方式也分为两种,一种是一个个Handler加载进去,另一个是直接用包扫描的方式,Spring会自动把包中所有的Handler进行扫描。以下是两种加载的方式:

  • 手动加载Handler,有多少个Handler就要加载多少行



  • 扫描的方式自动加载Handler,指定保存Handler的包,SpringMVC会自动加载包中所有的Handler。(推荐使用)

4、视图解析器

Spring自带了13个视图解析器,能够将逻辑视图名转换为物理实现,
常用的是InternalResourceViewResolver,这个视图解析器一般会用来 解析JSP视图。


需要注意的是该视图解析器默认使用jstl标签,classpath下得有jstl的包。
还有一个常用功能就是可以在该视图解析器中配置jsp文件的缺省前缀和后缀,方便开发。

springmvc.xml


    
    
    
    

Controller

modelAndView.setViewName("/WEB-INF/jsp/user.jsp");

//如果在视图解析器中配置jsp路径的前缀和jsp路径的后缀,修改为
modelAndView.setViewName("user");

5、处理POST乱码

在SpringMVC框架下,解决中文提交乱码的问题,首先要保证页面设定的form的字符编码是UTF-8格式。

<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
 

对Get方式的乱码问题,由于参数是通过URL传递的,因此这一设定非常有效。

但是Spring MVC的Post请求参数中文时仍然会产生乱码。

Servlet 3.0规范中有关请求数据编码的解释如下:

当前很多浏览器并不发送带Content-Type头部的字符编码标识符,它会把字符编码的决定留在读取HTTP请求的时候。如果客户端没有指明编码,容器用来创建请求读和解析POST数据的默认编码必须是"ISO-8859-1"。然而,为了提示开发者客户端没有成功发送一个字符编码,容器中getCharacterEncoding方法会返回null。 如果客户端没有设置字符编码,并且请求数据使用了不同编码而不是上述的默认编码,程序将会出现中断。为了纠正这种状态,一个新的方法setCharacterEncoding(String enc) 被添加到ServletRequest接口。开发者调用这个方法能重写容器提供的字符编码。这个方法必须在解析request中任何post数据或者读任何输入之前调用。一旦数据已经被读取,调用这个方法不会影响它的编码。

为解决这个问题,当request中的post数据被读取了的情况下,比如controller层,可以采用下面这种方式进行强制解码。
new String(request.getParameter("XXXX").getBytes("iso-8859-1"), "utf-8")

或者在request读取post数据之前,手动设置数据读取的编码格式:request.setCharacterEncoding("utf-8");

当然Spring已经提供了现成的编码过滤器。在Web.xml中增加如下配置(要注意的是它的位置一定要是第一个执行的过滤器,否则可能不会生效)即可:


    CharacterEncodingFilter
    org.springframework.web.filter.CharacterEncodingFilter
    
        encoding
        utf-8
    


    CharacterEncodingFilter
    /*

六、加载spring容器

主要是用来加载spring的ioc容器

web.xml中配置如下:


    contextConfigLocation
    classpath:spring/applicationContext-*.xml


    org.springframework.web.context.ContextLoaderListener

需要注意的是,web.xml 的加载顺序:context-param -> listener -> filter -> servlet,该配置要写在web.xml最上面。

你可能感兴趣的:(SSM配置文件总结)