注解方式配置SpringMVC

news2024/9/21 13:31:11

注解配置SpringMVC

  • 1. 初始化类,代替web.xml
  • 2. 创建SpringConfig配置类,代替spring的配置文件
  • 3. 创建SpringMVCConfig配置类,代替SpringMVC.xml配置文件
  • 4. 项目结构

1. 初始化类,代替web.xml

Spring3.2引入了一个便利的WebApplicationInitializer基础实现,名为AbstractAnnotationConfigDispatcherServletInitializer,当我们的类扩展了AbstractAnnotationConfigDispatcherServletInitializer并将其部署到Servlet3.0容器的时候,容器会自动发现它,并用它来配置Servlet上下文。

web.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <!--配置前端控制器DispatcherServlet-->
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

    <!--乱码过滤器-->
    <filter>
        <filter-name>CharacterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>CharacterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <!--put,post请求方式-->
    <filter>
        <filter-name>HiddenHttpMethodFilter</filter-name>
        <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>HiddenHttpMethodFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

</web-app>

初始化类代替web.xml

/**
 * 创建初始化类,代替web.xml
 */
public class WebInit extends AbstractAnnotationConfigDispatcherServletInitializer {
    @Override
    // 指定Spring的配置类
    protected Class<?>[] getRootConfigClasses() {
        return new Class[]{SpringConfig.class};
    }

    @Override
    // 加载SpringMVC的配置类
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{SpringMVCConfig.class};
    }

    @Override
    // 指定DispatcherServlet的映射规则,即url-pattern
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }

    @Override
    // 添加过滤器--> web.xml中一般存在两个编码顾虑去和put,post请求过滤器
    protected Filter[] getServletFilters() {
        CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
        characterEncodingFilter.setEncoding("UTF-8");
        characterEncodingFilter.setForceEncoding(true);
        HiddenHttpMethodFilter hiddenHttpMethodFilter = new HiddenHttpMethodFilter();
        return new Filter[]{characterEncodingFilter, hiddenHttpMethodFilter};
    }
}

2. 创建SpringConfig配置类,代替spring的配置文件

@Configuration表示该类为配置文件类

@Configuration
public class SpringConfig {
//ssm整合之后,spring的配置信息写在此类中
}

3. 创建SpringMVCConfig配置类,代替SpringMVC.xml配置文件

springmvc.xml配置文件内容

  1. 扫描组件
  2. 文件上传解析器
  3. 视图解析器themeleaf
  4. 默认的servlet
  5. mvc的注解启动
  6. 视图控制器
  7. 拦截器(无)
  8. 异常解析器(无)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop" xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans  http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">

       <context:component-scan base-package="com.lsm.controller"></context:component-scan>

       <!--上传文件, id名必须为multipartResolver-->
       <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
       </bean>

        <!-- 配置Thymeleaf视图解析器 -->
        <bean id="viewResolver" class="org.thymeleaf.spring5.view.ThymeleafViewResolver">
            <property name="order" value="1"/>
            <property name="characterEncoding" value="UTF-8"/>
            <property name="templateEngine">
                <bean class="org.thymeleaf.spring5.SpringTemplateEngine">
                    <property name="templateResolver">
                        <bean class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver">
                            <!--/WEB-INF/templates/xxx.html-->
                            <!-- 视图前缀 -->
                            <property name="prefix" value="/WEB-INF/templates/"/>
                            <!-- 视图后缀 -->
                            <property name="suffix" value=".html"/>
                            <property name="templateMode" value="HTML5"/>
                            <property name="characterEncoding" value="UTF-8" />
                        </bean>
                    </property>
                </bean>
            </property>
        </bean>

       <!--配置默认首页, 开启mvc的注解驱动-->
       <mvc:annotation-driven />
       <!--
             配置默认的servlet处理静态资源,浏览器发送的请求会被DispatcherServlet处理,无法处理再交给DefaultServlet处理
       -->
       <mvc:default-servlet-handler/>
       <mvc:view-controller path="/" view-name="index" />

</beans>

创建SpringMVCConfig配置类,代替SpringMVC.xml配置文件,需要实现WebMvcConfigurer 接口

/**
 * SpringMVC配置文件中可以配置的内容:
 * 1. 扫描组件---
 * 2. 文件上传解析器---
 * 3. 视图解析器themeleaf---
 * 4. 默认的servlet----
 * 5. mvc的注解启动---
 * 6. 视图控制器---
 * 7. 拦截器---
 * 8. 异常解析器
 */

@Configuration
@ComponentScan("qc.lsm.controller")  // 对应1: 扫描组件
@EnableWebMvc  // 对应5: mvc的注解驱动
public class SpringMVCConfig implements WebMvcConfigurer {


    @Override
    // 对应6: 视图控制器
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/").setViewName("index");
    }

    @Override
    // 对应4: 默认视图servlet
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }

    @Bean
    // 对应2: 文件解析器
    public CommonsMultipartResolver getMultipartResolver(){
        return new CommonsMultipartResolver();
    }

    @Override
    // 对应7: 拦截器
    public void addInterceptors(InterceptorRegistry registry) {
        FirstInterceptor firstInterceptor = new FirstInterceptor();
        registry.addInterceptor(firstInterceptor);
    }


    // 对应3: 视图解析器
    // 配置生成模板解析器
    @Bean
    public ITemplateResolver templateResolver() {
        WebApplicationContext webApplicationContext = ContextLoader.getCurrentWebApplicationContext();
        ServletContextTemplateResolver templateResolver = new
                ServletContextTemplateResolver(
                webApplicationContext.getServletContext());
        templateResolver.setPrefix("/WEB-INF/templates/");
        templateResolver.setSuffix(".html");
        templateResolver.setCharacterEncoding("UTF-8");
        templateResolver.setTemplateMode(TemplateMode.HTML);
        return templateResolver;
    }
    //生成模板引擎并为模板引擎注入模板解析器
    @Bean
    public SpringTemplateEngine templateEngine(ITemplateResolver
                                                       templateResolver) {
        SpringTemplateEngine templateEngine = new SpringTemplateEngine();
        templateEngine.setTemplateResolver(templateResolver);
        return templateEngine;
    }
    //生成视图解析器并未解析器注入模板引擎
    @Bean
    public ViewResolver viewResolver(SpringTemplateEngine templateEngine) {
        ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
        viewResolver.setCharacterEncoding("UTF-8");
        viewResolver.setTemplateEngine(templateEngine);
        return viewResolver;
    }

}

4. 项目结构

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/988267.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

解放程序员生产力的AI代码助手重磅来袭

您好&#xff0c;我是码农飞哥&#xff08;wei158556&#xff09;&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f4aa;&#x1f3fb; 1. Python基础专栏&#xff0c;基础知识一网打尽&#xff0c;9.9元买不了吃亏&#xff0c;买不了上当。 Python从入门到精…

生信教程:多序列比对

摘要 所有系统发育推断方法都需要同源数据集作为输入。因此&#xff0c;当核苷酸序列用于系统发育分析时&#xff0c;第一步通常是推断不同类群序列中的哪些核苷酸彼此同源&#xff0c;以便这些核苷酸之间的差异仅源于序列进化中发生的变化。不同序列的核苷酸之间的同源性推断最…

Windows11 上使用 QEMU 创建 Ubuntu aarch64(ARM64)虚拟机

文章目录 背景步骤要点一、下载QEMU二、下载 QEMU UEFI 固件文件三、Ubuntu 光盘镜像文件四、安装设置 QEMU五、创建虚拟网卡1、安装 tap-windows2、重命名新网卡3、共享物理网卡的网络 六、创建硬盘镜像七、从iso镜像安装虚拟机八、启动镜像九、连接 ssh过程中 powershell 执行…

【已更新建模代码】2023数学建模国赛B题matlab代码--多波束测线问题

一、 问题重述 1.1问题背景 海洋测深是测定水体深度与海底地形的重要任务&#xff0c;有两种主要技术&#xff1a;单波束测 深与多波束测深。单波束适用于简单任务&#xff0c;但多波束可提供更精确的地形数据。多 波束系统的关键在于覆盖宽度与重叠率的设计&#xff0c;以确保…

【Python 自动化】小说推文一键生成思路概述

最近看了一下小说推文成品软件的思路&#xff0c;发现可以完全迁移到我的 BookerAutoVideo 上面来。这篇短文里面&#xff0c;我试着分析一下整个推文视频生成的流程&#xff0c;以及简要阐述一下有什么工具。 整体流程是这样&#xff1a; 分句 原文是按照段落组织的&#xf…

下载安装包,安装 PySide2 到 windows 系统

20201206 修订&#xff1a;修改 PyCharm 中工具的配置描述 一、下载两个.whl 文件到本地&#xff0c; 可以在此下载 https://mirrors.tuna.tsinghua.edu.cn/ 我选用的是以下两个版本&#xff1a; shiboken2-5.15.2-5.15.2-cp35.cp36.cp37.cp38.cp39-none-win_amd64.whl …

Netty源码剖析之HashedWheelTimer时间轮

版本信息&#xff1a; JDK1.8 Netty-all:4.1.38.Final 时间轮的介绍 我们知道钟表分为很多块&#xff0c;每时钟滴答一次就往前走一个块&#xff0c;而时间轮就是使用这个思想。如下图 上图总共分为8块&#xff0c;每过100ms就往前走一块&#xff0c;然后周而复始。此时&#…

关于faust勒索病毒,这些您该了解,勒索病毒解密,数据恢复

faust勒索病毒是一种近年来流行的恶意软件&#xff0c;它通过对计算机系统进行加密并要求支付赎金来达到释放系统的目的。faust勒索病毒的流行程度和危害性不断上升&#xff0c;给企业和个人带来了严重的安全威胁。接下来云天数据恢复中心将从faust勒索病毒的背景、特点、危害、…

paddlespeech on centos7

概述 paddlespeech是百度飞桨平台的开源工具包&#xff0c;主要用于语音和音频的分析处理&#xff0c;其中包含多个可选模型&#xff0c;提供语音识别、语音合成、说话人验证、关键词识别、音频分类和语音翻译等功能。 paddlespeech整体是比较简单易用的&#xff0c;但是安装…

开学季!ChatGPT遭多国高校“封杀”!

美国OpenAI公司研发的聊天机器人ChatGPT&#xff0c;在过去的几个月席卷全球。 OpenAI的创始人之一马斯克&#xff08;Elon Musk&#xff09;曾在社交媒体平台上称赞ChatGPT&#xff1a;“这是全新的世界。和家庭作业说再见吧&#xff01;”&#xff08;Its a new world. Good…

轮播图横向和纵向同时滚动

轮播图横向和纵向同时滚动: <view><swiper v-if"noticeList.length > 0" style"margin-left: 20rpx;position: fixed;margin-top: 10rpx;z-index: 9999;width: 710rpx;border-radius: 20rpx !important;overflow: hidden;transform: translateY(0)…

js-13-Js中的事件模型

事件模型分为&#xff1a;事件与事件流、原始事件模型、标准事件模型和IE事件模型 1、事件与事件流 js中的事件&#xff0c;可以理解为是在HTML中文档或者浏览器中发生的一种交互操作&#xff0c;使得网页具备互动性&#xff0c;常见的有加载事件、鼠标事件、自定义事件等。 由…

CocosCreator3.8研究笔记(十)CocosCreator 图像资源的理解

一、图像资源导入 Cocos Creator 可使用图像文件格式&#xff0c;支持 JPG、PNG、BMP、TGA、HDR、WEBBP、PSD、TIFF 等。 将图像资源直接拖拽到 资源管理器 即可将其导入 二、图像资源的类型 在 属性检查器 面板中便可根据需要设置图像资源的使用类型&#xff1a;raw 、 textu…

window和linux下载ffmpeg

window 进入官方 进入 download 页面并选择 window 版本 下载 zip 压缩包 解压压缩包 解压压缩包之后&#xff0c;在 bin 目录下有三个文件&#xff0c;我们要下载的 window 版 ffmpeg.exe 就在其中&#xff0c;后续你可以添加系统环境变量或者在每次执行 ffmpeg.exe 都带上路…

leetcode386. 字典序排数(java)

字典序排数 题目描述递归法迭代 题目描述 难度 - 中等 leetcode386. 字典序排数 给你一个整数 n &#xff0c;按字典序返回范围 [1, n] 内所有整数。 你必须设计一个时间复杂度为 O(n) 且使用 O(1) 额外空间的算法。 示例 1&#xff1a; 输入&#xff1a;n 13 输出&#xff1a…

学习Jetpack Compose的反思,总结及新的开始(无干货,纯叙事)

前言及个人简介 我是一名90后安卓开发者&#xff0c;我是从去年五月四日开始学习 Jetpack Compose的&#xff0c;出于对前沿安卓知识的渴望&#xff0c;我点开了Jetpack Compose官网的网页&#xff0c;开始了我的学习之旅&#xff0c;那时候国内的相关文档还没有现在多&#x…

小程序中使用分包

前言 小程序在未使用的分包的情况下仅支持大小为2M,如果图片等资源过多的情况下可以使用分包功能&#xff0c;使用分包的情况下单个分包大小不能超过2M,总大小不能超过20M&#xff0c;分包有两种情况&#xff1a;普通分包和独立分包&#xff0c;下面介绍的是普通分包。官方文档…

Linux常用命令——cp命令

在线Linux命令查询工具 cp 将源文件或目录复制到目标文件或目录中 补充说明 cp命令用来将一个或多个源文件或者目录复制到指定的目的文件或目录。它可以将单个源文件复制成一个指定文件名的具体的文件或一个已经存在的目录下。cp命令还支持同时复制多个文件&#xff0c;当一…

大佬带飞,代码分享不会用?玩转Git,跟上大佬节奏!

一、安装 Git 客户端 这里为大家提供了windows版的Git客户端以及安装图文详解文档。百度网盘&#xff1a; https://pan.baidu.com/s/1CDu0Ke199pt3Ysv-QtWObA 提取码&#xff1a;8888 如果过期了请留言联系我。 二、注册码云账号 打开码云网站&#xff1a;https://gitee.co…

分布式 - 服务器Nginx:基础系列之Nginx静态资源配置优化sendfile | tcp_nopush | tcp_nodelay

文章目录 1. sendfile 指令2. tcp_nopush 指令3. tcp_nodelay 指令 1. sendfile 指令 请求静态资源的过程&#xff1a;客户端通过网络接口向服务端发送请求&#xff0c;操作系统将这些客户端的请求传递给服务器端应用程序&#xff0c;服务器端应用程序会处理这些请求&#xff…