首页 > 代码库 > SpringMVC -- 梗概--源码--贰--mvc:annotation-driven

SpringMVC -- 梗概--源码--贰--mvc:annotation-driven

1>在springMVC的处理流程中,有两个重要组件:HandlerMapping和HandlerAdapter
  分别负责解析Handler和执行Handler
2>如果配置了<mvc:annotation-driven/>,则在项目中自动注册:
  RequestMappingHandlerMapping
  RequestMappingHanderAdapter
  且如上两个组件是对注解开发最新的最全面的支持
3>如果没有配置:<mvc:annotation-driven/>
  则默认使用:
  DefaultAnnotationHandlerMapping
  AnnotationMethodHandlerAdapter两个组件
  而如上两组间已经弃用,且其对注解的支持并不全面,
  比如@ResponseBody是不能被解析的。

XML :
<?xml version="1.0" encoding="utf-8"?>
<!-- xmlns:xml name space 是每一个schema唯一标识 -->
<beans xmlns="http://www.springframework.org/schema/beans" 
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc" 
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                              http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
                              http://www.springframework.org/schema/context
                              http://www.springframework.org/schema/context/spring-context-3.2.xsd
                              http://www.springframework.org/schema/mvc
                              http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">

    <!-- 扫描所有控制器中的注解 -->
    <context:component-scan base-package="com.c61.controller"></context:component-scan>
    <!-- 
        MVC中基于注解开发,导入注解驱动
        <mvc:annotation-driven/>
     -->
    <mvc:annotation-driven>
        <mvc:message-converters>
            <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
                <property name="supportedMediaTypes">
                    <list>
                        <!-- 支持的格式:application/json -->
                        <value>application/json</value>
                    </list>
                </property>
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>
    <!-- 视图解析器:解析视图
         控制器方法的返回值,会被视图解析器捕获。"abc"
         根据捕获的内容,解析出一个视图地址:/abc.jsp
     -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>
    <!-- 
        静态资源:html,js,css,jpg
        访问404 解决
     -->
     <mvc:default-servlet-handler/>
     
     <!-- 声明异常处理器 -->
     <bean class="com.c61.ex.resolver.MyExceptionResolver"></bean>
     
     <!-- 拦截器配置 -->
     <!-- 
         /a/b
         inter1
         inter2
         拦截顺序:先配置先拦截
         具体顺序:pre1==pre2==contorller==post2==post1==after2==after1
      -->
     <mvc:interceptors>
         <mvc:interceptor>
             <!-- 定义要拦截的路径 
                  /inter/*  匹配   /inter/a   /inter/b    inter/cssdafasfsafs
                                                  不能匹配/inter/a/b
                 /inter/** 匹配 /inter/a  /inter/xxsjaflsajf   /inter/a/b/c/e/d/xxxcvx
                 *注意:exclude-mapping不能单独使用。要配合mapping使用
                             :在mapping匹配的范围中排除一些个。
             -->
             <mvc:mapping path="/inter/**"/>
             <mvc:mapping path="/a/b"/>
             <mvc:mapping path="/c/**"/>
             <mvc:exclude-mapping path="/inter/test/*"/>
             <mvc:exclude-mapping path="/c/b/**"/>
             <!-- 声明拦截器 -->
             <bean class="com.c61.interceptor.MyInterceptor"/>
         </mvc:interceptor>
         <mvc:interceptor>
             <!-- 定义要拦截的路径 -->
             <mvc:mapping path="/inter/test"/>
             <!-- 声明拦截器 -->
             <bean class="com.c61.interceptor.MyInterceptor2"/>
         </mvc:interceptor>
     </mvc:interceptors>
     <!-- 声明文件上传解析器 
           注意:此解析器,id必须为:multipartResolver
     -->
     <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
         <!-- 最大允许的上传大小    byte -->
         <property name="MaxUploadSize" value="2097152"></property>
     </bean>
     <!-- 
         注册,验证码生成器
      -->
      <bean id="captcha" class="com.google.code.kaptcha.servlet.KaptchaExtend">
        <constructor-arg>
            <props>  
                <!-- 是否有边框 边框颜色 边框粗细 -->
                <prop key="kaptcha.border">no</prop>  
                <prop key="kaptcha.border.color">105,179,90</prop>  
                <prop key="kaptcha.border.thickness">20</prop>
                <prop key="kaptcha.textproducer.font.color">black</prop>  
                <prop key="kaptcha.image.width">200</prop>  
                <prop key="kaptcha.image.height">50</prop>  
                <prop key="kaptcha.textproducer.font.size">40</prop>  
                <prop key="kaptcha.session.key">code61</prop>  
                <prop key="kaptcha.textproducer.char.length">4</prop>  
                <prop key="kaptcha.textproducer.font.names">Arial,Courier</prop> 
              <!--   <prop key="kaptcha.background.clear.from">black</prop> 
                <prop key="kaptcha.background.clear.to">255,0,0</prop>  -->
            </props>  
        </constructor-arg>
    </bean>
</beans>

啦啦啦

SpringMVC -- 梗概--源码--贰--mvc:annotation-driven