掘金 后端 ( ) • 2024-06-27 21:29

开发者可以根据自己的业务需要能力来选择Spring mvc开启哪些功能,在对应启动的组件中,可以根据参数来设置他对应的工作方式,同时可以扩展组件之外的业务数据处理策略,来完成框架默认未支持的能力。

配置能力范围包括

  1. 注解驱动能力:

    • 允许使用Spring MVC注解,如@RequestMapping@GetMapping等,来简化请求映射的处理。
    • 支持使用@RequestBody@ResponseBody等注解进行数据的自动转换。
  2. 跨源资源共享(CORS) :

    • 配置跨域请求的安全策略,允许不同源的Web应用访问你的服务器资源。
  3. 默认Servlet处理 :

    • 定义当Spring MVC没有找到匹配的Controller时,如何处理请求,通常用于静态资源的访问。
  4. 静态资源映射 :

    • 配置静态资源的URL模式和位置,使得可以轻松地访问图片、CSS、JavaScript等资源。
  5. 视图控制器:

    • 用于定义简单的页面跳转,直接返回视图名称而不需要Controller逻辑处理。
  6. 拦截器配置 :

    • 允许在请求处理前后执行拦截逻辑,用于实现日志记录、权限检查等功能。
  7. 模板引擎配置:

    • 配置不同的模板引擎,用于渲染视图。
    • FreeMarker、Groovy Markup等模板引擎允许使用模板文件生成HTML页面。
  8. 脚本模板配置:

    • 支持使用脚本语言(如JavaScript)来渲染页面,提供了一种动态的页面生成方式。
  9. 数据验证:

    • 集成JSR-303/JSR-349 Bean Validation API,用于对Web请求参数进行验证。
  10. 国际化和本地化:

    • 支持多语言消息资源文件,用于实现应用程序的国际化。
  11. 消息转换:

    • 定义了如何将请求和响应数据转换为不同的数据格式,如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>

节点解析对象说明

  1. AnnotationDrivenBeanDefinitionParser: 这个解析器是用于处理<mvc:annotation-driven>元素的。它通常用于启用Spring MVC的注解驱动能力,允许你使用@RequestMapping等注解来处理HTTP请求。
  2. CorsBeanDefinitionParser: 解析<mvc:cors>元素,用于配置跨源资源共享(CORS)策略。这允许你指定哪些域名可以访问你的资源,以及允许的HTTP方法等。
  3. DefaultServletHandlerBeanDefinitionParser: 解析<mvc:default-servlet-handler>元素,用于定义对静态资源的默认处理方式。如果Spring MVC找不到对应的Controller处理请求,它会将请求转发到默认的Servlet。
  4. ResourcesBeanDefinitionParser: 解析<mvc:resources>元素,用于定义静态资源的映射和位置。这允许你指定一个URL模式映射到类路径或文件系统上的某个位置。
  5. ViewControllerBeanDefinitionParser: 解析<mvc:view-controller>元素,用于定义简单的视图控制器。这些控制器可以返回一个视图名称,通常用于页面跳转。
  6. InterceptorsBeanDefinitionParser: 解析<mvc:interceptors>元素,用于配置拦截器。拦截器可以在请求处理前后执行一些操作,例如日志记录、安全性检查等。
  7. FreeMarkerConfigurerBeanDefinitionParser: 解析<bean>元素,用于配置FreeMarker模板引擎。FreeMarker是一个基于文本的模板引擎,可以用来生成HTML页面。
  8. ScriptTemplateConfigurerBeanDefinitionParser: 解析<bean>元素,用于配置Script模板引擎。Script模板是一种用于渲染页面的技术,Spring支持多种Script模板引擎,如Nashorn(JavaScript)。
  9. GroovyMarkupConfigurerBeanDefinitionParser: 解析<bean>元素,用于配置Groovy Markup模板引擎。Groovy Markup是一种使用Groovy语言的模板技术,可以用来创建复杂的页面布局。