天天看点

SpringMVC中各种解析器

1.视图解析器(主要是MVC配置文件中配置)将controller返回的String类型信息到视图解析器组成一个完整的地址,进行请求转发

本质就是将InternalResourceViewResolver进行IOC布置到核心容器中,自己对该类的属性进行注入
 <!--视图解析器-->
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix" value="/WEB-INF/"></property>//前缀
            <property name="suffix" value=".jsp"></property>//后缀
        </bean>
           

2.类型转换解析器 SpringMVC中一般自带了一些类型转换,但有时候我们可以进行配置转换方法

注意 :要使用自定义转换器,那么开启mvc注解驱动时,需要定义conversion-service属性

  1. 首先需要自己定义一个实现类,实现Converter接口,重写转换方法,定义规则
  2. 然后在mvc配置文件中配置类型转换解析器
进行了ConversionServiceFactoryBean类的IOC,对converters数组类型属性进行赋值,自定义转换器是可以多个的
开启注解驱动:
 <mvc:annotation-driven conversion-service="conversionServiceFactoryBean" ></mvc:annotation-driven>
 类型转换器:
 <bean class="org.springframework.context.support.ConversionServiceFactoryBean" id="conversionServiceFactoryBean">
        <property name="converters">
            <array>
                <!--配置自定义转器-->
                <bean class="com.ls.Converter.StringToDateConverter"></bean>
            </array>
        </property>
    </bean>
           

3.文件上传解析器 当文件上传时需要(这个除了属性可以改变,id是写死的multipartResolver,使用其他的运行时会出错)

将CommonsMultipartResolver类IOC,并注入相应属性例如最大大小 最小大小这些
<!--文件上传解析器-->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!--最大上传文件大小 bt 1024*1024 5M-->
        <property name="maxUploadSize" value="5242880"></property>
    </bean>
           

4.异常解析器

最为方便,自己定义异常类,只要实现HandlerExceptionResolver接口,重写resolveException方法定义异常规则,然后将此实现类部署到IOC就可以

SpringMVC中各种解析器

5.mvc拦截器

1. 实现handlerInterceptor接口,重写方法(不自动提示,快捷键alt+insert选择)

2. 配置拦截器解析器 mvc:interceptors标签

* 实现handlerInterceptor接口 重写方法 不自动提示 是alt+insert选择重写 (一定要注意多个拦截器之间的拦截顺序)
		 * preHandle方法 在执行controller之前执行
		 * postHandle方法 在执行完成controller之后执行
		 * afterCompletion方法 在试图完成之后执行
		 * 返回值false带代表拦截 true就是放行 只有放行才能继续下一步
多个拦截器执行时:preHandler方法先后执行 
			   postHandler方法,从后往前执行
			   afterCompletion方法,从后往前执行
配置文件:
<!--拦截器 多个自定义拦截器依次执行 但执行方法时顺序不一致-->
    <mvc:interceptors>
        <mvc:interceptor>
        /* 	
        -拦截路径
             /*代表匹配一级 eg:/user
             /**代表匹配多级 eg:/user/find
            <mvc:mapping path="/**"/>
            */
            <!--自定义拦截器配置ioc-->
            <bean id="interceptor" class="com.ls.interceptor.MyInterceptor"></bean>
        </mvc:interceptor>
     <mvc:interceptors>
           

执行顺序效果图:

SpringMVC中各种解析器