与SpringSecurity的配置类似,spring同样为我们提供了一个实现类WebMvcConfigurationSupport和一个注解@EnableWebMvc以帮助我们减少bean的声明。

applicationContext-MvcConfig.xml

  1. <!-- 启用注解,并定义组件查找规则 ,mvc层只负责扫描@Controller -->
  2. <context:component-scan base-package="web.function"
  3. use-default-filters="false">
  4. <context:include-filter type="annotation"
  5. expression="org.springframework.stereotype.Controller" />
  6. </context:component-scan>
  7. <!-- 视图处理器 -->
  8. <bean id="viewResolver"
  9. class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  10. <property name="prefix" value="/WEB-INF/views/jsp/function/" />
  11. <property name="suffix" value=".jsp" />
  12. </bean>
  13. <!-- 定义国际化资源文件查找规则 ,各种messages.properties -->
  14. <bean id="messageSource"
  15. class="org.springframework.context.support.ResourceBundleMessageSource"
  16. p:basename="config.messages.messages">
  17. </bean>
  18. <!-- servlet适配器,这里必须明确声明,因为spring默认没有初始化该适配器 -->
  19. <bean id="servletHandlerAdapter"
  20. class="org.springframework.web.servlet.handler.SimpleServletHandlerAdapter" />
  21. <!-- 定义文件上传处理器 -->
  22. <bean id="multipartResolver"
  23. class="org.springframework.web.multipart.commons.CommonsMultipartResolver"
  24. p:defaultEncoding="UTF-8" />
  25. <!-- 异常处理器 -->
  26. <bean id="exceptionResolver" class="web.core.CP_SimpleMappingExceptionResolver">
  27. <property name="defaultErrorView" value="common_error" />
  28. <property name="exceptionAttribute" value="exception" />
  29. <property name="exceptionMappings">
  30. <props>
  31. <prop key="java.lang.RuntimeException">common_error</prop>
  32. </props>
  33. </property>
  34. </bean>
  35. <!-- 定义公共参数初始化拦截器 -->
  36. <bean id="initInterceptor" class="web.core.CP_InitializingInterceptor" />
  37. <!-- 本地化资源处理器 -->
  38. <bean id="localeResolver"
  39. class="org.springframework.web.servlet.i18n.CookieLocaleResolver" />
  40. <!-- 定义本地化变更拦截器 -->
  41. <bean id="localeChangeInterceptor"
  42. class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" />
  43. <!-- 请求拦截器,每一个用户请求都会被拦截 -->
  44. <mvc:interceptors>
  45. <ref bean="localeChangeInterceptor" />
  46. <ref bean="initInterceptor" />
  47. </mvc:interceptors>
  48. <!-- 定义注解驱动Controller方法处理适配器 ,注:该适配器必须声明在<mvc:annotation-driven />之前,否则不能正常处理参数类型的转换 -->
  49. <bean
  50. class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
  51. <property name="webBindingInitializer">
  52. <bean class="web.core.CP_PropertyEditorRegistrar">
  53. <property name="format" value="yyyy-MM-dd"></property>
  54. </bean>
  55. </property>
  56. <property name="messageConverters">
  57. <list>
  58. <bean
  59. class="org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter" />
  60. <bean
  61. class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" />
  62. </list>
  63. </property>
  64. </bean>
  65. <!-- 会自动注册RequestMappingHandlerMapping与RequestMappingHandlerAdapter
  66. 两个bean,是spring MVC为@Controllers分发请求所必须的。 并提供了:数据绑定支持,@NumberFormatannotation支持,@DateTimeFormat支持,@Valid支持,读写XML的支持(JAXB),读写JSON的支持(Jackson) -->
  67. <mvc:annotation-driven />
  68. <!-- 资源访问处理器 -->
  69. <mvc:resources mapping="/static/**" location="/WEB-INF/static/" />

 MvcConfig.java

  1. @Configuration
  2. @EnableWebMvc
  3. @ComponentScan(basePackages = "web.function", useDefaultFilters = false, includeFilters = {
  4. @ComponentScan.Filter(type = FilterType.ANNOTATION, value = {Controller.class})
  5. })
  6. public class MvcConfig extends WebMvcConfigurationSupport {
  7. private static final Logger logger = Logger
  8. .getLogger(MvcConfig.class);
  9. /**
  10. * 描述 : <注册试图处理器>. <br>
  11. *<p>
  12. <使用方法说明>
  13. </p>
  14. * @return
  15. */
  16. @Bean
  17. public ViewResolver viewResolver() {
  18. logger.info("ViewResolver");
  19. InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
  20. viewResolver.setPrefix("/WEB-INF/views/jsp/function/");
  21. viewResolver.setSuffix(".jsp");
  22. return viewResolver;
  23. }
  24. /**
  25. * 描述 : <注册消息资源处理器>. <br>
  26. *<p>
  27. <使用方法说明>
  28. </p>
  29. * @return
  30. */
  31. @Bean
  32. public MessageSource messageSource() {
  33. logger.info("MessageSource");
  34. ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
  35. messageSource.setBasename("config.messages.messages");
  36. return messageSource;
  37. }
  38. /**
  39. * 描述 : <注册servlet适配器>. <br>
  40. *<p>
  41. <只需要在自定义的servlet上用@Controller("映射路径")标注即可>
  42. </p>
  43. * @return
  44. */
  45. @Bean
  46. public HandlerAdapter servletHandlerAdapter(){
  47. logger.info("HandlerAdapter");
  48. return new SimpleServletHandlerAdapter();
  49. }
  50. /**
  51. * 描述 : <本地化拦截器>. <br>
  52. *<p>
  53. <使用方法说明>
  54. </p>
  55. * @return
  56. */
  57. @Bean
  58. public LocaleChangeInterceptor localeChangeInterceptor(){
  59. logger.info("LocaleChangeInterceptor");
  60. return new LocaleChangeInterceptor();
  61. }
  62. /**
  63. * 描述 : <基于cookie的本地化资源处理器>. <br>
  64. *<p>
  65. <使用方法说明>
  66. </p>
  67. * @return
  68. */
  69. @Bean(name="localeResolver")
  70. public CookieLocaleResolver cookieLocaleResolver(){
  71. logger.info("CookieLocaleResolver");
  72. return new CookieLocaleResolver();
  73. }
  74. /**
  75. * 描述 : <注册自定义拦截器>. <br>
  76. *<p>
  77. <使用方法说明>
  78. </p>
  79. * @return
  80. */
  81. @Bean
  82. public CP_InitializingInterceptor initializingInterceptor(){
  83. logger.info("CP_InitializingInterceptor");
  84. return new CP_InitializingInterceptor();
  85. }
  86. /**
  87. * 描述 : <RequestMappingHandlerMapping需要显示声明,否则不能注册自定义的拦截器>. <br>
  88. *<p>
  89. <这个比较奇怪,理论上应该是不需要的>
  90. </p>
  91. * @return
  92. */
  93. @Bean
  94. public RequestMappingHandlerMapping requestMappingHandlerMapping() {
  95. logger.info("RequestMappingHandlerMapping");
  96. return super.requestMappingHandlerMapping();
  97. }
  98. /**
  99. * 描述 : <添加拦截器>. <br>
  100. *<p>
  101. <使用方法说明>
  102. </p>
  103. * @param registry
  104. */
  105. @Override
  106. protected void addInterceptors(InterceptorRegistry registry) {
  107. // TODO Auto-generated method stub
  108. logger.info("addInterceptors start");
  109. registry.addInterceptor(localeChangeInterceptor());
  110. registry.addInterceptor(initializingInterceptor());
  111. logger.info("addInterceptors end");
  112. }
  113. /**
  114. * 描述 : <HandlerMapping需要显示声明,否则不能注册资源访问处理器>. <br>
  115. *<p>
  116. <这个比较奇怪,理论上应该是不需要的>
  117. </p>
  118. * @return
  119. */
  120. @Bean
  121. public HandlerMapping resourceHandlerMapping() {
  122. logger.info("HandlerMapping");
  123. return super.resourceHandlerMapping();
  124. }
  125. /**
  126. * 描述 : <资源访问处理器>. <br>
  127. *<p>
  128. <可以在jsp中使用/static/**的方式访问/WEB-INF/static/下的内容>
  129. </p>
  130. * @param registry
  131. */
  132. @Override
  133. protected void addResourceHandlers(ResourceHandlerRegistry registry) {
  134. logger.info("addResourceHandlers");
  135. registry.addResourceHandler("/static/**").addResourceLocations("/WEB-INF/static/");
  136. }
  137. /**
  138. * 描述 : <文件上传处理器>. <br>
  139. *<p>
  140. <使用方法说明>
  141. </p>
  142. * @return
  143. */
  144. @Bean(name="multipartResolver")
  145. public CommonsMultipartResolver commonsMultipartResolver(){
  146. logger.info("CommonsMultipartResolver");
  147. return new CommonsMultipartResolver();
  148. }
  149. /**
  150. * 描述 : <异常处理器>. <br>
  151. *<p>
  152. <系统运行时遇到指定的异常将会跳转到指定的页面>
  153. </p>
  154. * @return
  155. */
  156. @Bean(name="exceptionResolver")
  157. public CP_SimpleMappingExceptionResolver simpleMappingExceptionResolver(){
  158. logger.info("CP_SimpleMappingExceptionResolver");
  159. CP_SimpleMappingExceptionResolver simpleMappingExceptionResolver= new CP_SimpleMappingExceptionResolver();
  160. simpleMappingExceptionResolver.setDefaultErrorView("common_error");
  161. simpleMappingExceptionResolver.setExceptionAttribute("exception");
  162. Properties properties = new Properties();
  163. properties.setProperty("java.lang.RuntimeException", "common_error");
  164. simpleMappingExceptionResolver.setExceptionMappings(properties);
  165. return simpleMappingExceptionResolver;
  166. }
  167. /**
  168. * 描述 : <RequestMappingHandlerAdapter需要显示声明,否则不能注册通用属性编辑器>. <br>
  169. *<p>
  170. <这个比较奇怪,理论上应该是不需要的>
  171. </p>
  172. * @return
  173. */
  174. @Bean
  175. public RequestMappingHandlerAdapter requestMappingHandlerAdapter() {
  176. logger.info("RequestMappingHandlerAdapter");
  177. return super.requestMappingHandlerAdapter();
  178. }
  179. /**
  180. * 描述 : <注册通用属性编辑器>. <br>
  181. *<p>
  182. <这里只增加了字符串转日期和字符串两边去空格的处理>
  183. </p>
  184. * @return
  185. */
  186. @Override
  187. protected ConfigurableWebBindingInitializer getConfigurableWebBindingInitializer() {
  188. logger.info("ConfigurableWebBindingInitializer");
  189. ConfigurableWebBindingInitializer initializer = super.getConfigurableWebBindingInitializer();
  190. CP_PropertyEditorRegistrar register = new CP_PropertyEditorRegistrar();
  191. register.setFormat("yyyy-MM-dd");
  192. initializer.setPropertyEditorRegistrar(register);
  193. return initializer;
  194. }
  195. }

SpringMVC4零配置 :代码下载

SpringMVC4零配置--web.xml

SpringMVC4零配置--应用上下文配置【AppConfig】

SpringMVC4零配置--SpringSecurity相关配置【SpringSecurityConfig】

SpringMVC4零配置--Web上下文配置【MvcConfig】

SpringMVC4零配置--Web上下文配置【MvcConfig】的更多相关文章

  1. Web上下文配置【MvcConfig】

    基于Servlet3.0规范和SpringMVC4注解式配置方式,实现零xml配置,弄了个小demo,供交流讨论. 项目说明如下: 1.db.sql是项目中用到的表,数据库使用的是oracle11g ...

  2. SpringMVC4零配置--web.xml

    servlet3.0+规范后,允许servlet,filter,listener不必声明在web.xml中,而是以硬编码的方式存在,实现容器的零配置. ServletContainerInitiali ...

  3. java web.xml配置详解

    1.启动一个WEB项目的时候,WEB容器会去读取它的配置文件web.xml,读取<listener>和<context-param>两个结点. 2.紧急着,容创建一个Servl ...

  4. web.xml 配置介绍

    这个不是原创,有点早了,具体从哪里来的已经记不得了.但是东西是实实在在的. 1.启动一个WEB项目的时候,WEB容器会去读取它的配置文件web.xml,读取<listener>和<c ...

  5. 160329(二)、web.xml配置详解

    1.启动一个WEB项目的时候,WEB容器会去读取它的配置文件web.xml,读取<listener>和<context-param>两个结点. 2.紧急着,容创建一个Servl ...

  6. Java Web学习总结(19)——web.xml配置详解

    1.启动一个WEB项目的时候,WEB容器会去读取它的配置文件web.xml,读取<listener>和<context-param>两个结点. 2.紧急着,容创建一个Servl ...

  7. Maven系列--web.xml 配置详解

    一 .web.xml介绍 启动一个WEB项目的时候,WEB容器会去读取它的配置文件web.xml,读取<listener>和<context-param>两个结点. 紧接着,容 ...

  8. Asp.net Web.Config - 配置元素 caching

    Asp.net Web.Config - 配置元素 caching 记得之前在写缓存DEMO的时候,好像配置过这个元素,好像这个元素还有点常用. 一.caching元素列表   元素 说明 cache ...

  9. Spring MVC的web.xml配置详解(转)

    出处http://blog.csdn.net/u010796790 1.spring 框架解决字符串编码问题:过滤器 CharacterEncodingFilter(filter-name) 2.在w ...

随机推荐

  1. Hibernate中的一对多与多对一映射

    1.需求 一个部门有多个员工;         [一对多] 多个员工,属于一个部门    [多对一] 2.实体Bean设计 Dept: public class Dept { private int ...

  2. zoj 2112 动态区间求第k大

    题目大意: 动态单点更新,然后多次询问求区间内第k大 这里单个的主席树不能实现,这里采取的是树状数组套主席树 首先可以想的是将静态主席树先构建好,不去动它,这里空间复杂度就是O(nlogn),这个只要 ...

  3. 常错-UIScrollView中得图片不能被拖动

    经常在开发中,发现自己UIScrollView里面的图片不能被拖动 在这里做个备忘,第一种可能是contentSize没有设置,第二种可能是contentSize设置的太小了. 测试后发现,与user ...

  4. SharePoint表单和工作流 - Nintex篇(一)

    博客地址 http://blog.csdn.net/foxdave 本篇开始我将带大家去认识一个第三方的表单工作流工具--Nintex. 本篇将对该工具做一些简单的介绍. Nintex公司成立于200 ...

  5. 【PyQt5】学习笔记(1)

    # -*- coding: utf-8 -*- from PyQt5 import QtWidgets,QtCore #从pyqt库导入QtWindget通用窗口类 from formnew impo ...

  6. 《java笔记 day07》

    //匿名对象_1 class Car { //描述属性: String color; int number; //描述行为: void run() { System.out.println(color ...

  7. hdu 1069

    //Accepted 264 KB 0 ms //每种block只有三种方法,且每种放法至多放一次 //规定三条边的顺序后 //把所有的block按x递增排序,x相同则按y递增排序 //然后dp // ...

  8. mysql 与 oracle 比较(一)group by 容易产生的误解

    注:本文并不是列举出两者之间的所有不同,而是在实际应用中发现的不同的功能点或者处理模式,之所以记录下来,就是为了提醒自己,勿忘 group by : (1)oracle 中,总所周知,select ( ...

  9. (转) function与感叹号

    原文:http://blog.sina.com.cn/s/blog_775f158f01016j12.html function与感叹号(转)(2012-08-29 12:29:12) 最近有空可以让 ...

  10. hdu 2036

    Ps:  - -感觉这道题完全就是数学题...就是求知道每个顶点的坐标,然后求这个多边形的面积... 代码:#include "stdio.h"#include "std ...