Spring mvc 学习的笔记

    最近一直在学习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进行调度的,这是网上的一张图,参考一下:

 

posted @ 2016-03-24 09:54  汤小刀  阅读(254)  评论(0编辑  收藏  举报