spring-mvc.xml 6.85 KB
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:util="http://www.springframework.org/schema/util"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
    http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.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.xsd"
       default-autowire="byName">

    <!--对于请求返回字符串时,默认StringHttpMessageConverter,且其默认编码为ISO-8859-1,不会通过上面的MappingJacksonJsonView,因此客服端看到的中文会是乱码-->
    <!--对于请求返回对象时,下面配置的MappingJacksonJsonView来处理,返回sjon串-->
    <bean id="stringHttpMessageConverter" class="org.springframework.http.converter.StringHttpMessageConverter">
        <constructor-arg value="UTF-8"/>
        <property name="supportedMediaTypes">
            <list>
                <value>application/xml;charset=UTF-8</value>
                <value>text/html;charset=UTF-8</value>
                <value>text/plain;charset=UTF-8</value>
                <value>application/json;charset=UTF-8</value>
            </list>
        </property>
    </bean>

    <!-- mvc:annotation-driven 使用默认的 stringHttpMessageConverter,默认的编码为ISO-8859-1,因此需要替换它-->
    <mvc:annotation-driven>
        <mvc:message-converters>
            <ref bean="stringHttpMessageConverter"/>
        </mvc:message-converters>
    </mvc:annotation-driven>

    <context:component-scan base-package="com.b2c.dtms.web" />

    <aop:aspectj-autoproxy proxy-target-class="true"/>
    <context:annotation-config/>
    <mvc:default-servlet-handler />

    <!-- static resources -->
    <mvc:resources  location="/assets/" mapping="/static/**" cache-period="864000"/><!-- 24 * 3600 * 10 -->

    <!-- template view -->
    <bean id="velocityConfig" class="org.springframework.web.servlet.view.velocity.VelocityConfigurer">
        <property name="resourceLoaderPath" value="/WEB-INF/vm/" />
        <property name="velocityProperties">
            <props>
                <prop key="input.encoding">UTF-8</prop>
                <prop key="output.encoding">UTF-8</prop>
                <prop key="contentType">text/html;charset=UTF-8</prop>
                <prop key="velocimacro.library">common/macro.vm</prop>
                <prop key="file.resource.loader.cache">false</prop>
                <prop key="file.resource.loader.modificationCheckInterval">1</prop>
                <prop key="velocimacro.library.autoreload">true</prop>
                <prop key="eventhandler.referenceinsertion.class">org.apache.velocity.app.event.implement.EscapeHtmlReference</prop>
                <prop key="eventhandler.escape.html.match">/^(?!.*\\$screen_content).*$/</prop>
            </props>
        </property>
    </bean>

    <!-- 视图可能用到的工具类 -->
    <util:map id="viewTools">
        <entry key="webUtils" value-ref="webUtils" />
        <entry key="domain" value="${orders.contextPath}" />
        <entry key="currencyTool" value-ref="currencyTool" />
        <!-- <entry key="rpcUtils" value-ref="rpcUtils" /> -->
        <entry key="dateTool">
            <bean class="org.apache.velocity.tools.generic.DateTool" />
        </entry>
        <entry key="numberTool">
            <bean class="org.apache.velocity.tools.generic.NumberTool" />
        </entry>
        <entry key="escape">
            <bean class="org.apache.velocity.tools.generic.EscapeTool" />
        </entry>
        <entry key="math">
            <bean class="org.apache.velocity.tools.generic.MathTool" />
        </entry>
        <entry key="stringUtils">
            <bean class="org.apache.commons.lang.StringUtils" />
        </entry>
    </util:map>

    <bean id="velocityViewResolver" class="org.springframework.web.servlet.view.velocity.VelocityLayoutViewResolver">
        <property name="layoutUrl" value="layout/onlyContent.vm" />
        <property name="cache" value="false" />
        <property name="suffix" value=".vm" />
        <property name="exposeSpringMacroHelpers" value="true" />
        <!-- Merge urlBuilderMap to view context for convenience. You can put your tools which must be thread safe. -->
        <property name="contentType" value="text/html;charset=UTF-8" />
        <!--toolbox配置文件路径-->
        <property name="attributesMap" ref="viewTools"/>
    </bean>

    <bean id="contentNegotiationManager" class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">
        <property name="ignoreAcceptHeader" value="true" />
        <property name="defaultContentType" value="text/html;charset=UTF-8"/>
        <property name="mediaTypes">
            <map>
                <entry key="xml" value="application/xml" />
                <entry key="json" value="application/json" />
            </map>
        </property>
        <property name="favorParameter" value="true" />
    </bean>

    <bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
        <property name="contentNegotiationManager" ref="contentNegotiationManager" />
        <property name="viewResolvers">
            <list>
                <ref bean="velocityViewResolver"/>
            </list>
        </property>
        <property name="defaultViews">
            <list>
                <!-- for application/json MappingJacksonJsonView  默认编码为UTF-8 因此,请求返回对象时,会自动使用此view,使用UTF-8编码将对象转换为json-->
                <bean class="org.springframework.web.servlet.view.json.MappingJackson2JsonView">
                </bean>
            </list>
        </property>
    </bean>
    <!-- locale related -->
    <bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver">
        <property name="cookieName" value="_clientlocale"/>
        <property name="defaultLocale" value="zh_CN"/>
        <property name="cookieMaxAge" value="2147483647"/>
    </bean>
    <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
        <property name="exceptionMappings">
            <props>
                <prop key="java.lang.Exception">common/error</prop>
                <prop key="java.lang.Throwable">common/error</prop>
            </props>
        </property>
    </bean>

</beans>