开发者可以根据自己的业务需要能力来选择Spring mvc开启哪些功能,在对应启动的组件中,可以根据参数来设置他对应的工作方式,同时可以扩展组件之外的业务数据处理策略,来完成框架默认未支持的能力。
肖哥弹架构 跟大家“弹弹” SpringBoot源码,需要代码关注
欢迎 点赞,点赞,点赞。
关注公号Solomon肖哥弹架构获取更多精彩内容
](https://mermaid.live/edit#pako:eNp9lW1T2lgUx79KJq-pSyBV4EWnBS0-wLYjs52dDbzIyq0yqyQbgrOucQZacNQFy1bR-jTU1q6sa6Nup_WhUr8M95J8i73kRgOEJS-YJOd_fufck_vnztMTQhzQPnpS4sUpKjQeTVL4esRFRCmRnKTCzwJ6vtioqXClor2sxah79x5QCvpU1Q7f63-fwZUqfgtXdhTKz8F8VlMv6rWbxnrVSifamMkl-dp5FV2VtM85_AvzZ_Wrf6jAk_GIQgU4Ug0LYKWinZyjsxdQXYb5auPjRqP8oR2jf32jqQcRIM1OAxke5BqlRYUa5KC6Xb9cRrtHsHCJcYTS2M4RBdq4hNevOkB7WyiTJf2gN2_haU6hhsxWWmM_jIdQdR-nw9eFeq0Z7VjX4SLc-YZWD-HSF7hVVajHZjMNNQOLZX3_s773Tjv_pNWO2xPRH3-hpSOcQmoqVNCcJlo-1PYL5iCWi7C0SqR65qv27c8OSHUf7d3A6zJaW73lDJurqF_g3EKrAl38iyprpOOOVeS20e4x0d5yRji0foIKWRLTTj5q1QwhkEV1dFI-RUVVP8KNZxVqlNN3FtFSyQ_4JPWMn07EeTkhJKlHT0fa0-BOTd_Kw8IGHi-uAndP8b1CjZm14cG2WfjLEsqekE_SUZhEaseo-E6hQub0zfG9LsC1IrxaJ90REU4ngFT6Z2IB-94mgublN6r4Ge7hOPg1DVJymBdFvM9jNomLexgE_x923xH8QnzOHmeb8ZQoJFOgRQCScVu7Td-Qj2RBAgYkwNw6knx7bDj1Rt9UYzahy9wkXZzWrWSb4SzYoAEbZLhWx7SV7AazW88iDhnEIYa78x3pM2aTuDhCIKZsU3Ur2mE3Cxc0cEGGQ5sf4M2mpp7CWjlmi7s4tPdS3yqh9xlU6TUquyUt1rDBGma4xxIAYV76BUgxW9TFBSVBmJ2jmoK02KOU3bUWbMSAjTDcKD_LRyakhCgT8_ZqvcXDFmnUII0ynOmpVy-wjoh6sLoa24KOGdAxvF_vHG4Yvld3LUa3QCEDFMLrjDz5_rsfwyH09hrvmjurmzTaQc8AaYZPxPHBN998HaXlKTADorQP38bBcz49LUfpaHIBS_m0LETmkhO0T5bSwEFLQnpyivY956dT-Ckt4n8zMJjgcV8ztxKRT_4kCK2PtG-e_o32sayzj3X2uz0e1u1lB7xe1kHP0T6G8fSxLg_b73Hd97jvs15mwUH_bhCYvn7G6fV6nMyA0-N1DTBuBw3iCVmQwuTgNs7vhf8ALz-GDg)
配置能力范围包括
-
注解驱动能力:
- 允许使用Spring MVC注解,如
@RequestMapping
、@GetMapping
等,来简化请求映射的处理。 - 支持使用
@RequestBody
和@ResponseBody
等注解进行数据的自动转换。
- 允许使用Spring MVC注解,如
-
跨源资源共享(CORS) :
- 配置跨域请求的安全策略,允许不同源的Web应用访问你的服务器资源。
-
默认Servlet处理 :
- 定义当Spring MVC没有找到匹配的Controller时,如何处理请求,通常用于静态资源的访问。
-
静态资源映射 :
- 配置静态资源的URL模式和位置,使得可以轻松地访问图片、CSS、JavaScript等资源。
-
视图控制器:
- 用于定义简单的页面跳转,直接返回视图名称而不需要Controller逻辑处理。
-
拦截器配置 :
- 允许在请求处理前后执行拦截逻辑,用于实现日志记录、权限检查等功能。
-
模板引擎配置:
- 配置不同的模板引擎,用于渲染视图。
- FreeMarker、Groovy Markup等模板引擎允许使用模板文件生成HTML页面。
-
脚本模板配置:
- 支持使用脚本语言(如JavaScript)来渲染页面,提供了一种动态的页面生成方式。
-
数据验证:
- 集成JSR-303/JSR-349 Bean Validation API,用于对Web请求参数进行验证。
-
国际化和本地化:
- 支持多语言消息资源文件,用于实现应用程序的国际化。
-
消息转换:
- 定义了如何将请求和响应数据转换为不同的数据格式,如JSON、XML等。
Spring mvc 配置详细案例
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.springframework.org/schema/xsi"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 启用Spring MVC的注解驱动 -->
<mvc:annotation-driven validator="validator">
<!-- 配置消息解析器,用于解析@RequestBody和@ResponseBody -->
<mvc:message-converters>
<bean class="org.springframework.http.converter.StringHttpMessageConverter"/>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
</mvc:message-converters>
</mvc:annotation-driven>
<!-- 启用CORS支持 -->
<mvc:cors>
<mvc:mapping path="/**" allowed-origins="*" allowed-methods="GET, POST, PUT, DELETE, OPTIONS"/>
</mvc:cors>
<!-- 默认Servlet处理器 -->
<mvc:default-servlet-handler/>
<!-- 静态资源处理器 -->
<mvc:resources mapping="/resources/**" location="/resources/"/>
<!-- 视图控制器 -->
<mvc:view-controller path="/" view-name="index"/>
<!-- 拦截器配置 -->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="com.example.MyInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
<!-- 组件扫描,自动检测@Controller等注解 -->
<context:component-scan base-package="com.example"/>
<!-- 配置FreeMarker模板引擎 -->
<bean id="freeMarkerConfigurer" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="templateLoaderPath" value="/WEB-INF/freemarker/"/>
<property name="defaultEncoding" value="UTF-8"/>
</bean>
<mvc:view-resolvers>
<bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<property name="suffix" value=".ftl"/>
</bean>
</mvc:view-resolvers>
<!-- 配置Groovy Markup模板引擎 -->
<bean id="groovyMarkupConfigurer" class="org.springframework.web.servlet.view.groovy.GroovyMarkupConfigurer">
<property name="prefix" value="/WEB-INF/groovyMarkup/"/>
<property name="suffix" value=".tpl"/>
<property name="cacheLimit" value="10"/>
</bean>
<!-- 配置Thymeleaf模板引擎 -->
<bean id="templateResolver" class="org.thymeleaf.templateresolver.ServletContextTemplateResolver">
<property name="prefix" value="/WEB-INF/thymeleaf/"/>
<property name="suffix" value=".html"/>
<property name="templateMode" value="HTML5"/>
<property name="cacheable" value="false"/>
</bean>
<bean id="templateEngine" class="org.thymeleaf.spring4.SpringTemplateEngine">
<property name="templateResolver" ref="templateResolver"/>
</bean>
<mvc:view-resolvers>
<bean class="org.thymeleaf.spring4.view.ThymeleafViewResolver">
<property name="templateEngine" ref="templateEngine"/>
<property name="characterEncoding" value="UTF-8"/>
</bean>
</mvc:view-resolvers>
<!-- JSR-303 Validator -->
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
<property name="providerClass" value="org.hibernate.validator.HibernateValidator"/>
<property name="validationMessageSource" ref="messageSource"/>
</bean>
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basename" value="classpath:messages"/>
<property name="defaultEncoding" value="UTF-8"/>
</bean>
<!-- 其他自定义Bean定义 -->
<!-- <bean id="..." class="..."/> -->
</beans>
节点解析对象说明
- AnnotationDrivenBeanDefinitionParser: 这个解析器是用于处理
<mvc:annotation-driven>
元素的。它通常用于启用Spring MVC的注解驱动能力,允许你使用@RequestMapping
等注解来处理HTTP请求。 - CorsBeanDefinitionParser: 解析
<mvc:cors>
元素,用于配置跨源资源共享(CORS)策略。这允许你指定哪些域名可以访问你的资源,以及允许的HTTP方法等。 - DefaultServletHandlerBeanDefinitionParser: 解析
<mvc:default-servlet-handler>
元素,用于定义对静态资源的默认处理方式。如果Spring MVC找不到对应的Controller处理请求,它会将请求转发到默认的Servlet。 - ResourcesBeanDefinitionParser: 解析
<mvc:resources>
元素,用于定义静态资源的映射和位置。这允许你指定一个URL模式映射到类路径或文件系统上的某个位置。 - ViewControllerBeanDefinitionParser: 解析
<mvc:view-controller>
元素,用于定义简单的视图控制器。这些控制器可以返回一个视图名称,通常用于页面跳转。 - InterceptorsBeanDefinitionParser: 解析
<mvc:interceptors>
元素,用于配置拦截器。拦截器可以在请求处理前后执行一些操作,例如日志记录、安全性检查等。 - FreeMarkerConfigurerBeanDefinitionParser: 解析
<bean>
元素,用于配置FreeMarker模板引擎。FreeMarker是一个基于文本的模板引擎,可以用来生成HTML页面。 - ScriptTemplateConfigurerBeanDefinitionParser: 解析
<bean>
元素,用于配置Script模板引擎。Script模板是一种用于渲染页面的技术,Spring支持多种Script模板引擎,如Nashorn(JavaScript)。 - GroovyMarkupConfigurerBeanDefinitionParser: 解析
<bean>
元素,用于配置Groovy Markup模板引擎。Groovy Markup是一种使用Groovy语言的模板技术,可以用来创建复杂的页面布局。