SpringMVC 常用配置说明

springMVC配置用法的文章很多,但具体描述清楚的不多,这里主要介绍下常用的配置项的用法,以及它的解析类,springMVC处理内容有两种方式,一种是converter,另一种是ViewResolver,两种都能处理json,xml以及form内容格式。


<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<beans xmlns="http://www.springframework.org/schema/beans"
     xmlns:context="http://www.springframework.org/schema/context"
     xmlns:aop="http://www.springframework.org/schema/aop" xmlns:mvc="http://www.springframework.org/schema/mvc"
     xmlns:p="http://www.springframework.org/schema/p" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns:util="http://www.springframework.org/schema/util"
     xmlns:c="http://www.springframework.org/schema/c"
     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
         http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd
         http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd">

<!-- 如果controller里要用到配置,才需要加载配置,因为一般这个配置由DispatchServlet来加载,和spring监听类不在一个上下文里,想要知道原因请看
http://blog.csdn.net/strivezxq/article/details/43795081 这篇文章详细解析了spring初始化过程  -->

     <context:property-placeholder location="classpath:app.properties" />
<!--Scans the classpath for annotated components @Component, @Repository, @Service, and @Controller 
通过use-default-filters="false",可以设置只扫描哪些注释,一般springMVC配置只加载下面两种注释
-->
<context:component-scan base-package="your.base.package" use-default-filters="false">

<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
<context:include-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice"/>
</context:component-scan>
<!-- <context:component-scan annotation-config = "true">已经包含了context:annotation-configr的功能,所以这个配置基本没必要配置,激活在bean类中被检测到的各种注释:Spring's @Required and
     @Autowired, as well as JSR 250's @PostConstruct, @PreDestroy and @Resource (if available),
     JAX-WS's @WebServiceRef (if available), EJB3's @EJB (if available), and JPA's
     @PersistenceContext and @PersistenceUnit (if available) -->

<context:annotation-config />
<!--会在Spring MVC上下文中定义一个 org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler, 它会像一个检查员,对进入DispatcherServlet的URL进行筛查,如果发现是静态资源的请求,就将该请求转由Web应用服务器默认的 Servlet处理,如果不是静态资源的请求,才由DispatcherServlet继续处理。
一般Web应用服务器默认的Servlet名称是"default",因此DefaultServletHttpRequestHandler可以 找到它。如果你所有的Web应用服务器的默认Servlet名称不是"default",则需要通过default-servlet-name属性显示指 定:
<mvc:default-servlet-handler default-servlet-name="所使用的Web服务器默认使用的Servlet名称" />
Tomcat, Jetty, JBoss, and GlassFish默认名称为default,  eg: web.xml中

	1. <servlet-mapping>     
	2.     <servlet-name>default</servlet-name>    
	3.     <url-pattern>*.jpg</url-pattern>       
	4. </servlet-mapping>      
	5. <servlet-mapping>         
	6.     <servlet-name>default</servlet-name>      
	7.     <url-pattern>*.js</url-pattern>      
	8. </servlet-mapping>      
	9. <servlet-mapping>          
	10.     <servlet-name>default</servlet-name>         
	11.     <url-pattern>*.css</url-pattern>        
	12. </servlet-mapping>   


如果不配置springdefault-servlet-name 默认会设置,已经支持常用的web服务器
-->
<mvc:default-servlet-handler />

<!-- 允许静态资源放在任何地方 ,处理类org.springframework.web.servlet.resource.ResourceHttpRequestHandler
<bean id="resourceHttpRequestHandler" class="org.springframework.web.servlet.resource.ResourceHttpRequestHandler">
    <property name="locations" value="classpath:/META-INF/resources/"></property>  
</bean>
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <property name="mappings">
        <props>
            <prop key="/resources/**">resourceHttpRequestHandler</prop>
        </props>
    </property>
</bean>
下面标签实现
-->
<mvc:resources mapping="/resources/**" location="/resources/"></mvc:resources>
<!--  
register "global" interceptor beans to apply to all registered HandlerMappings .
Each inteceptor must implement the org.springframework.web.servlet.HandlerInterceptor or
org.springframework.web.context.request.WebRequestInterceptor interface
-->
<mvc:interceptors>
    <mvc:interceptor>
        <mvc:mapping path="/**" />
        <mvc:exclude-mapping path="/css/**" />
        <mvc:exclude-mapping path="/js/**" />
        <mvc:exclude-mapping path="/images/**" />
        <bean class="com.fpx.common.auth.mgt.framework.interceptor.ContextInterceptor" />
    </mvc:interceptor>
</mvc:interceptors>


<!-- Turns on support for mapping requests to Spring MVC @Controller methods
Also registers default Formatters and Validators for use across all @Controllers
配置解析类:org.springframework.web.servlet.config.AnnotationDrivenBeanDefinitionParser
配置content-negotiation-anager可以在url里设置内容类型参数,可以设置默认内容类型
<bean id="contentNegotiationManagerFactoryBean" class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean"
p:favorPathExtension="false" p:favorParameter="true" p:parameterName="format" p:ignoreAcceptHeader="true"
p:defaultContentType="application/json">
    <property name="mediaTypes">
    <props>
    <prop key="json">application/json</prop>
    <prop key="xml">application/xml</prop>
     </props>
   </property>
</bean>
-->
<mvc:annotation-driven content-negotiation-anager="contentNegotiationManagerFactoryBean">
    <mvc:message-converters>
        <ref bean="stringHttpMessageConverter" />
        <ref bean="jsonHttpMessageConverter" />
        <ref bean="marshallingHttpMessageConverter" />
    </mvc:message-converters>
</mvc:annotation-driven>

<!-- 内容管理工厂 -->
          <bean
                class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean"
                p:favorPathExtension="false" p:favorParameter="true"
                p:parameterName="format" p:ignoreAcceptHeader="true"
                p:defaultContentType="application/json">
                <property name="mediaTypes">
                    <props>
                        <prop key="json">application/json</prop>
                        <prop key="xml">application/xml</prop>
                    </props>
                </property>
            </bean>


<!--  内容解析器 ,可以p:parameterName="format"来配置返回参数类型 ,通过p:defaultContentType配置默认请求内容类型,
c:qualityValue="0.5" 可以设置内容类型的优先级, 如果使用了mvc:annotation-driven 和注解方式(@RequestBody), 下面配置是不生效的-->

    <bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
          <property name="contentNegotiationManager"   ref= "contentNegotiationManagerFactoryBean">
              
          </property>
          <property name="defaultViews">
               <list>
                    <bean
                         class="org.springframework.web.servlet.view.json.MappingJackson2JsonView">
                         <property name="modelKey" value="resultVo" />
                         <property name="extractValueFromSingleKeyModel" value="true" />
                    </bean>
                    <bean class="org.springframework.web.servlet.view.xml.MarshallingView">
                         <constructor-arg ref="jaxb2Marshaller" />
                         <property name="contentType" value="application/xml" />
                    </bean>
               </list>
          </property>
          <!-- <property name="ignoreAcceptHeader" value="true" /> -->
     </bean>


     <!-- XML view using a JAXB marshaller -->
     <bean id="jaxb2Marshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
          <property name="marshallerProperties">
               <map>
                    <entry key="jaxb.formatted.output">
                         <value type="boolean">true</value>
                    </entry>
                    <entry key="jaxb.encoding" value="UTF-8" />
               </map>
          </property>
          <property name="packagesToScan">
               <list>
                    <value>com.api.domain</value>
                    <value>com.api.web.controller.vo</value>
               </list>
          </property>
     </bean>

     <bean id="jstlViewResolver"
          class="org.springframework.web.servlet.view.InternalResourceViewResolver">
          <property name="order" value="2" />
          <property name="viewClass"
               value="org.springframework.web.servlet.view.JstlView" />
          <property name="prefix" value="/views/" />
          <property name="suffix" value="" />
          <property name="requestContextAttribute" value="rc" />
     </bean>

<!-- c:qualityValue="0.5" 可以设置内容类型的优先级,默认是1.0,越大优先级越高 -->
     <bean id="stringHttpMessageConverter"
          class="org.springframework.http.converter.StringHttpMessageConverter">
          <property name="supportedMediaTypes">
               <list>
                    <value>text/plain;charset=UTF-8</value>
                    <value>text/html;charset=UTF-8</value>
               </list>
          </property>
     </bean>

     <bean id="jsonHttpMessageConverter"
          class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" />
     <bean id="marshallingHttpMessageConverter"
          class="org.springframework.http.converter.xml.MarshallingHttpMessageConverter">
          <constructor-arg ref="jaxb2Marshaller" />
          <!-- <property name="supportedMediaTypes" value="application/xml"></property> -->
          <property name="supportedMediaTypes">
               <util:list>
                    <bean class="org.springframework.http.MediaType" c:type="application" c:subtype="xml" c:qualityValue="0.5"/>
               </util:list>
          </property>
     </bean>



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值