最近一直在学习Spring mvc 的东西,因为从事java的时间并不长,搞了6年多的c++,突然来做java,很多东西还没有转变过来,觉得很多东西都要靠设计来解,却不知java的aop已经是很完美的把这些问题解决了。
Spring mvc 常用的一些配置 ,编辑器不是很会用,用表格保持格式
web.xml
<display-name>城际快线</display-name> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:dubbo/consumer.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <servlet> <servlet-name>spring</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring/spring-servlet.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>spring</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
<!-- 以代理bean方式使用过滤器 -->
这里用来解决filter不能注入bean的问题,这个代理filter会指向 verifyFilter定义的bean,
也就是上面的dubbo/consumer.xml需要定义一个id为verifyFilter的bean,并实现了Filter接口
<filter> <filter-name>verifyFilter</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> <init-param> <param-name>targetFilterLifecycle</param-name> <param-value>true</param-value> </init-param> </filter>
<filter-mapping> <filter-name>verifyFilter</filter-name> <url-pattern>/service/*</url-pattern> </filter-mapping>
|
|
|
|
spring-servlet.xml
这里只挑几个关键的,不写整个文件 了
<mvc:annotation-driven> <mvc:argument-resolvers>
<!-- 定义一个参数解析器,实现在Controller 中参数填充 -->
<!-- 示例 JSONResponse getWorkareaByUid(JSONRequest driverJson) 解析将http所有参数填充到driverJson中 --> <bean class="com.etong.web.resolver.JSONRequestMethodResolver"> </bean> </mvc:argument-resolvers> <mvc:message-converters>
<!-- 定义JSON转换器,用户JSONResponse返回对象处理 --> <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter"> </bean> </mvc:message-converters></mvc:annotation-driven>
<!-- 拦截器,用于处理接口权限 -->
<mvc:interceptors> <!-- session超时 --> <mvc:interceptor> <mvc:mapping path="/**" /> <mvc:exclude-mapping path="/" /> <mvc:exclude-mapping path="/login" /> <mvc:exclude-mapping path="/service/**" /> <mvc:exclude-mapping path="/css/**" /> <mvc:exclude-mapping path="/images/**" /> <mvc:exclude-mapping path="/js/**" /> <mvc:exclude-mapping path="/html/**" /> <bean class="com.etong.intercity.interceptor.AdminIntercepter"> </bean> </mvc:interceptor> </mvc:interceptors>
|
|
因为用的是dubbo框架,所以远程bean都配置在dubbu/consumer.xml中。
在使用过程有个很奇怪的现像,可能是我对spring不是很了解;verifyFilter这个bean必须配置在dubbo/consumer.xml,也就是applicationContext.xml中,不能配置在spring-servlet.xml中,这里说明web.xml加载之前只保证加载了dubbo/consumer.xml文件,并不保证加载spring-servlet.xml,也就是说拦截器是在过滤后面加载的;
执行顺序是是先进入了过滤器 - 然后才能spring进行调度的,这是网上的一张图,参考一下: