与SpringSecurity的配置类似,spring同样为我们提供了一个实现类WebMvcConfigurationSupport和一个注解@EnableWebMvc以帮助我们减少bean的声明。
applicationContext-MvcConfig.xml
<!-- 启用注解,并定义组件查找规则 ,mvc层只负责扫描@Controller --> <context:component-scan base-package="web.function" use-default-filters="false"> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" /> </context:component-scan> <!-- 视图处理器 --> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/jsp/function/" /> <property name="suffix" value=".jsp" /> </bean> <!-- 定义国际化资源文件查找规则 ,各种messages.properties --> <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource" p:basename="config.messages.messages"> </bean> <!-- servlet适配器,这里必须明确声明,因为spring默认没有初始化该适配器 --> <bean id="servletHandlerAdapter" class="org.springframework.web.servlet.handler.SimpleServletHandlerAdapter" /> <!-- 定义文件上传处理器 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" p:defaultEncoding="UTF-8" /> <!-- 异常处理器 --> <bean id="exceptionResolver" class="web.core.CP_SimpleMappingExceptionResolver"> <property name="defaultErrorView" value="common_error" /> <property name="exceptionAttribute" value="exception" /> <property name="exceptionMappings"> <props> <prop key="java.lang.RuntimeException">common_error</prop> </props> </property> </bean> <!-- 定义公共参数初始化拦截器 --> <bean id="initInterceptor" class="web.core.CP_InitializingInterceptor" /> <!-- 本地化资源处理器 --> <bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver" /> <!-- 定义本地化变更拦截器 --> <bean id="localeChangeInterceptor" class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" /> <!-- 请求拦截器,每一个用户请求都会被拦截 --> <mvc:interceptors> <ref bean="localeChangeInterceptor" /> <ref bean="initInterceptor" /> </mvc:interceptors> <!-- 定义注解驱动Controller方法处理适配器 ,注:该适配器必须声明在<mvc:annotation-driven />之前,否则不能正常处理参数类型的转换 --> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> <property name="webBindingInitializer"> <bean class="web.core.CP_PropertyEditorRegistrar"> <property name="format" value="yyyy-MM-dd"></property> </bean> </property> <property name="messageConverters"> <list> <bean class="org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter" /> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" /> </list> </property> </bean> <!-- 会自动注册RequestMappingHandlerMapping与RequestMappingHandlerAdapter 两个bean,是spring MVC为@Controllers分发请求所必须的。 并提供了:数据绑定支持,@NumberFormatannotation支持,@DateTimeFormat支持,@Valid支持,读写XML的支持(JAXB),读写JSON的支持(Jackson) --> <mvc:annotation-driven /> <!-- 资源访问处理器 --> <mvc:resources mapping="/static/**" location="/WEB-INF/static/" />
MvcConfig.java
@Configuration @EnableWebMvc @ComponentScan(basePackages = "web.function", useDefaultFilters = false, includeFilters = { @ComponentScan.Filter(type = FilterType.ANNOTATION, value = {Controller.class}) }) public class MvcConfig extends WebMvcConfigurationSupport { private static final Logger logger = Logger .getLogger(MvcConfig.class); /** * 描述 : <注册试图处理器>. <br> *<p> <使用方法说明> </p> * @return */ @Bean public ViewResolver viewResolver() { logger.info("ViewResolver"); InternalResourceViewResolver viewResolver = new InternalResourceViewResolver(); viewResolver.setPrefix("/WEB-INF/views/jsp/function/"); viewResolver.setSuffix(".jsp"); return viewResolver; } /** * 描述 : <注册消息资源处理器>. <br> *<p> <使用方法说明> </p> * @return */ @Bean public MessageSource messageSource() { logger.info("MessageSource"); ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource(); messageSource.setBasename("config.messages.messages"); return messageSource; } /** * 描述 : <注册servlet适配器>. <br> *<p> <只需要在自定义的servlet上用@Controller("映射路径")标注即可> </p> * @return */ @Bean public HandlerAdapter servletHandlerAdapter(){ logger.info("HandlerAdapter"); return new SimpleServletHandlerAdapter(); } /** * 描述 : <本地化拦截器>. <br> *<p> <使用方法说明> </p> * @return */ @Bean public LocaleChangeInterceptor localeChangeInterceptor(){ logger.info("LocaleChangeInterceptor"); return new LocaleChangeInterceptor(); } /** * 描述 : <基于cookie的本地化资源处理器>. <br> *<p> <使用方法说明> </p> * @return */ @Bean(name="localeResolver") public CookieLocaleResolver cookieLocaleResolver(){ logger.info("CookieLocaleResolver"); return new CookieLocaleResolver(); } /** * 描述 : <注册自定义拦截器>. <br> *<p> <使用方法说明> </p> * @return */ @Bean public CP_InitializingInterceptor initializingInterceptor(){ logger.info("CP_InitializingInterceptor"); return new CP_InitializingInterceptor(); } /** * 描述 : <RequestMappingHandlerMapping需要显示声明,否则不能注册自定义的拦截器>. <br> *<p> <这个比较奇怪,理论上应该是不需要的> </p> * @return */ @Bean public RequestMappingHandlerMapping requestMappingHandlerMapping() { logger.info("RequestMappingHandlerMapping"); return super.requestMappingHandlerMapping(); } /** * 描述 : <添加拦截器>. <br> *<p> <使用方法说明> </p> * @param registry */ @Override protected void addInterceptors(InterceptorRegistry registry) { // TODO Auto-generated method stub logger.info("addInterceptors start"); registry.addInterceptor(localeChangeInterceptor()); registry.addInterceptor(initializingInterceptor()); logger.info("addInterceptors end"); } /** * 描述 : <HandlerMapping需要显示声明,否则不能注册资源访问处理器>. <br> *<p> <这个比较奇怪,理论上应该是不需要的> </p> * @return */ @Bean public HandlerMapping resourceHandlerMapping() { logger.info("HandlerMapping"); return super.resourceHandlerMapping(); } /** * 描述 : <资源访问处理器>. <br> *<p> <可以在jsp中使用/static/**的方式访问/WEB-INF/static/下的内容> </p> * @param registry */ @Override protected void addResourceHandlers(ResourceHandlerRegistry registry) { logger.info("addResourceHandlers"); registry.addResourceHandler("/static/**").addResourceLocations("/WEB-INF/static/"); } /** * 描述 : <文件上传处理器>. <br> *<p> <使用方法说明> </p> * @return */ @Bean(name="multipartResolver") public CommonsMultipartResolver commonsMultipartResolver(){ logger.info("CommonsMultipartResolver"); return new CommonsMultipartResolver(); } /** * 描述 : <异常处理器>. <br> *<p> <系统运行时遇到指定的异常将会跳转到指定的页面> </p> * @return */ @Bean(name="exceptionResolver") public CP_SimpleMappingExceptionResolver simpleMappingExceptionResolver(){ logger.info("CP_SimpleMappingExceptionResolver"); CP_SimpleMappingExceptionResolver simpleMappingExceptionResolver= new CP_SimpleMappingExceptionResolver(); simpleMappingExceptionResolver.setDefaultErrorView("common_error"); simpleMappingExceptionResolver.setExceptionAttribute("exception"); Properties properties = new Properties(); properties.setProperty("java.lang.RuntimeException", "common_error"); simpleMappingExceptionResolver.setExceptionMappings(properties); return simpleMappingExceptionResolver; } /** * 描述 : <RequestMappingHandlerAdapter需要显示声明,否则不能注册通用属性编辑器>. <br> *<p> <这个比较奇怪,理论上应该是不需要的> </p> * @return */ @Bean public RequestMappingHandlerAdapter requestMappingHandlerAdapter() { logger.info("RequestMappingHandlerAdapter"); return super.requestMappingHandlerAdapter(); } /** * 描述 : <注册通用属性编辑器>. <br> *<p> <这里只增加了字符串转日期和字符串两边去空格的处理> </p> * @return */ @Override protected ConfigurableWebBindingInitializer getConfigurableWebBindingInitializer() { logger.info("ConfigurableWebBindingInitializer"); ConfigurableWebBindingInitializer initializer = super.getConfigurableWebBindingInitializer(); CP_PropertyEditorRegistrar register = new CP_PropertyEditorRegistrar(); register.setFormat("yyyy-MM-dd"); initializer.setPropertyEditorRegistrar(register); return initializer; } }
相关推荐
总结,SpringMVC4的零配置特性使得开发更加简洁高效,通过Java配置、自动配置和各种注解,我们可以快速搭建起一个功能完善的Web应用。理解并熟练掌握这些知识点,能够极大地提升开发效率,让开发者更专注于业务逻辑...
《SpringMVC-Mybatis-Shiro-Redis:构建安全高效的Web应用》 在现代Web开发中,构建一个高效且安全的后端系统是至关重要的。本文将深入探讨一个基于SpringMVC、Mybatis、Shiro和Redis的Web应用架构,这四个组件共同...
总结,SpringMVC-Activiti5.16-Shiro-EasyUI项目的整合是一个典型的Java Web应用实例,它结合了后端处理、工作流管理、权限控制和前端展示等多个方面,对于想要深入学习Java企业级开发的开发者来说,这是一个极好的...
4. **RedisConfig**:在Spring Boot应用中,我们需要配置一个`RedisConnectionFactory`来建立到Redis服务器的连接,并配置`StringRedisTemplate`或`RedisTemplate`。这通常通过`@Configuration`注解的类来完成,其中...
【标题】"SpringMVC-Mybatis-Shiro-redis-master" 涉及的是一个集成框架项目,这个项目集成了四个关键的技术组件:SpringMVC、MyBatis、Shiro和Redis。这些技术在现代Java Web开发中扮演着重要角色。 **SpringMVC**...
Mybatis的mapper接口和XML配置文件通常位于dao层,SpringMVC的控制器和视图定义在web层。 6. **开发实践**:如何创建SpringMVC配置文件,设置DispatcherServlet,以及如何配置Mybatis的数据源、SQL映射文件和Mapper...
"SpringMVC精品资源-- Web server and web framework of Android pl.zip" 这个压缩包文件很可能包含了与在 Android 上使用 SpringMVC 相关的教程、代码示例或者工具集。 1. **SpringMVC 概述**: SpringMVC 是 ...
SpringMVC精品资源--微信公众号的web管理工具 本项目采用springmvc+layui实现。
SpringMVC是一款强大的Java web开发框架,它是Spring框架的一部分,专为构建Web应用程序而设计。在JEEWEB项目中,SpringMVC与Spring和Hibernate一起使用,构建了一个完整的后端解决方案,提供了高效的模型-视图-控制...
传统的SpringMVC配置往往依赖于XML文件,如web.xml和spring-servlet.xml等,但随着Spring框架的发展,出现了基于代码的配置方式,实现了零XML配置,提高了开发效率。本文将详细介绍如何在不使用web.xml的情况下,...
SpringMVC和JAX-RS是两种在Java世界中广泛使用的Web开发框架,它们都用于构建RESTful服务,但有着不同的设计哲学和技术实现。这个压缩包"SpringMVC精品资源--JAX-RS & SpringMVC supported maven build.zip"显然是一...
综上所述,SpringMVC精品资源--vans项目是一个基于SpringBoot的高效后端开发框架,它融合了SpringMVC的强大功能,为开发者提供了一个便捷的开发平台。通过对"ahao5"文件的深入学习,可以掌握项目结构,理解SpringMVC...
core 服务提供者模块lidong-dubbo-web 服务消费者模块mybatis-generator mybatis生成mapper的模块#该项目使用到的技术dubbo2.5spring4mybastis3.2springmvc4spring-data-mongodbspring-data-redisspring-session...
SpringMVC和Mybatis是Java开发中非常流行的两个框架,它们在企业级Web应用开发中起着关键作用。SpringMVC作为Spring框架的一部分,主要负责处理HTTP请求和响应,而Mybatis则是一个轻量级的持久层框架,专注于数据库...
学习这些资源,开发者可以深入理解SpringMVC的工作原理,掌握如何配置和使用SpringMVC,以及如何利用其特性构建高性能、可扩展的Web应用。同时,了解RESTful API设计原则,有助于提升开发现代Web服务的能力。
SpringMVC是Spring框架的一部分,专门用于处理Web应用程序的请求-响应模型。作为一个成熟的MVC(Model-View-Controller)框架,SpringMVC为开发者提供了强大的功能,包括控制器的定义、视图的管理以及模型数据的处理...
这涉及到两个关键的技术栈:SpringMVC,一个用于构建Web应用程序的Java框架,以及JAX-RS,Java API for RESTful Web Services的缩写,是Java标准的RESTful服务开发接口。 SpringMVC是Spring框架的一部分,主要用于...
4. webapp/WEB-INF:Web应用目录,其中web.xml是Web应用的部署描述符,可能包含DispatcherServlet的配置。 5. webapp/WEB-INF/views:视图文件夹,存放JSP或其他模板引擎的页面。 通过这个资源包,学习者可以深入...
2. **配置与启动**:SpringMVC的配置通常涉及web.xml中的DispatcherServlet配置,以及Spring的配置文件(如applicationContext.xml或servlet-context.xml),用于定义bean、拦截器、视图解析器等。启动时,...
6. **配置文件**:Spring的配置文件,如 applicationContext.xml 和 servlet-context.xml,用于设置bean的依赖注入、数据源配置、视图解析器以及其他SpringMVC的相关配置。 7. **实体类(Entities)**:表示数据库...