与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. 2014北邮新生归来赛解题报告a-c

    <span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255) ...

  2. C#保存登录用户名供其他页面调用

    一.保存登录用户名供其他页面调用 步骤: (1)项目自带的Program.cs,类方法里定义登录的用户名为全局变量loginid,这样整个项目都可以调用它 static class Program { ...

  3. C++-什么时候需要在类的构造函数中使用初始化列表

    1,如果基类没有default构造函数,则意味着其不能自己初始化.如果其被派生,派生类的构造函数要负责调用基类的构造函数,并传递给它需要的参数.下例中Base 2,如果类成员没有默认构造函数.下例中E ...

  4. Gartner报告:多数CIO还未对数字化做好准备

    数字化经济时代已经来临.对于消费者而言,这意味着他们能够随时随地以更加丰富多彩的方式与虚拟世界和现实世界进行互动.对于企业而言,这意味着它们的运营将发生巨大变化,同时也有机会更加深入地了解客户并将这些 ...

  5. vi编辑器选项

    Vi编辑器有一些选项设置可以帮助人们更好的使用. 在vi中选项分为两种: 1.  开关选项,如果要打开这类选项就使用ex命令——:set 选项:如果要关闭这类选项就是用ex命令——:set  no选项 ...

  6. Chrome 应用推荐 - 下载管理扩展: Chrono

    地址:http://goo.gl/JVdxvg Chrono下载管理器让你轻松高效地管理Chrome浏览器中的下载任务.Chrono与Chrome浏览器紧密地整合在一起,如菜单.工具栏支持等等.Chr ...

  7. What am I missing out in life if I don't have a girlfriend?

    http://www.quora.com/What-am-I-missing-out-in-life-if-I-dont-have-a-girlfriend/answer/Kelly-Erickson ...

  8. iOS NSDictionary、NSData、JSON数据类型相互转换

    iOS经常需要用到数据类型的转换,下面列举一下常用类型的转换. 1.NSDictionary类型转换为NSData类型: //NSDictionary -> NSData: NSDictiona ...

  9. 详解模块定义(.def)文件

    一个完整的Windows应用程序(C++程序)通常由五种类型的文件组成:源程序文件,头文件,资源描述文件,项目文件,模块定义文件.本文主要讲解模块定义文件. 模块定义 (.def)文件为链接器提供有关 ...

  10. 利用pl/sql developer进行远程连接oracle server出现的问题及解决办法

    由于本人刚刚给自己的笔记本做了系统,由原来的32位系统编程现在的64位系统,所以,很多软件由于兼容性,不得不重新安装...当我安完了pl/sql developer工具后,就满心欢喜的去连接远程ora ...