Spring mvc框架配置案例详解,值得收藏。

开发者可以根据自己的业务需要能力来选择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 配置详细案例

html 复制代码
<?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语言的模板技术,可以用来创建复杂的页面布局。
相关推荐
清梚不喝粥3 分钟前
Java运算符
java·蓝桥杯
小沈同学呀4 分钟前
SpringBoot中使用 ThreadLocal 进行多线程上下文管理及其注意事项
java·spring boot·后端·线程·thread·threadlocal
敲代码的小王!2 小时前
MD5加密算法和BCrypt密码加密算法
java·算法·安全
魔尔助理顾问3 小时前
一个简洁高效的Flask用户管理示例
后端·python·flask
李长渊哦6 小时前
使用Druid连接池优化Spring Boot应用中的数据库连接
数据库·spring boot·后端
web135085886357 小时前
【Spring Boot】Spring AOP动态代理,以及静态代理
spring boot·后端·spring
罗政7 小时前
冒险岛079 V8 整合版源码搭建教程+IDEA启动
java·ide·intellij-idea
nbsaas-boot8 小时前
Go 自动升级依赖版本
开发语言·后端·golang
架构默片8 小时前
【JAVA工程师从0开始学AI】,第五步:Python类的“七十二变“——当Java的铠甲遇见Python的液态金属
java·开发语言·python
zzyh1234568 小时前
springcloud的组件及作用
后端·spring·spring cloud