SpringMVC中的注解配置

文章目录

    • 13、注解配置springmvc
      • 13.1、创建初始化的类,代替web.xml
      • 13.2、使用流程
        • 声明一个类来继承AbstractAnnotationConfigDispatcherServletInitializer,并且实现他的抽象方法
        • 实现配置SpringConfig的java文件
        • 实现SpringMvcConfig的java文件
      • 13.3、实例代码
        • 1.继承AbstractAnnotationConfigDispatcherServletInitializer的java文件
        • 2.SpringMvcConfig.java文件
        • 3.SpringConfig.java

13、注解配置springmvc

使用配置类和注解代替web.xml和SpringMVC配置文件的功能

13.1、创建初始化的类,代替web.xml

在Servlet3.0环境中,容器会在类路径中查找实现javax.servlet.ServletContainerInitializer接口的类,如果找到的话就用它来配置Servlet容器。 Spring提供了这个接口的实现,名为

SpringServletContainerInitializer,这个类反过来又会查找实现WebApplicationInitializer的类并将配置的任务交给它们来完成。Spring3.2引入了一个便利的WebApplicationInitializer基础实现,名为AbstractAnnotationConfigDispatcherServletInitializer,当我们的类扩展了

AbstractAnnotationConfigDispatcherServletInitializer并将其部署到Servlet3.0容器的时候,容器会自动发现它,并用它来配置Servlet上下文。

13.2、使用流程

  1. 声明一个类来继承AbstractAnnotationConfigDispatcherServletInitializer,并且实现他的抽象方法
  2. 实现配置SpringConfig的java文件
    @Override
        protected Class<?>[] getRootConfigClasses() {
            return new Class[]{SpringConfig.class};
        }
    
  3. 实现SpringMvcConfig的java文件
    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{SpringMvcConfig.class};
    }
    

13.3、实例代码

1.继承AbstractAnnotationConfigDispatcherServletInitializer的java文件
/**
 * @author ning0
 * @date 2024/6/25 22:24
 * @description WebInit
 */
public class WebInit extends AbstractAnnotationConfigDispatcherServletInitializer {

    //加载spring配置类
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[]{SpringConfig.class};
    }

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

    //设置DispatcherServlet的url-pattern
    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }

    @Override
    protected Filter[] getServletFilters() {

        // 创建编码过滤器
        CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
        // 设置编码格式
        characterEncodingFilter.setEncoding("UTF-8");
        // 设置强制编码
        characterEncodingFilter.setForceEncoding(true);

        // 创建请求方式的过滤器
        HiddenHttpMethodFilter hiddenHttpMethodFilter = new HiddenHttpMethodFilter();

        return new Filter[]{characterEncodingFilter, hiddenHttpMethodFilter};
    }
}

2.SpringMvcConfig.java文件
package com.qc.config;

import com.qc.interceptors.FirstInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.context.ContextLoader;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.*;
import org.springframework.web.servlet.handler.SimpleMappingExceptionResolver;
import org.thymeleaf.spring5.SpringTemplateEngine;
import org.thymeleaf.spring5.view.ThymeleafViewResolver;
import org.thymeleaf.templatemode.TemplateMode;
import org.thymeleaf.templateresolver.ITemplateResolver;
import org.thymeleaf.templateresolver.ServletContextTemplateResolver;

import javax.servlet.ServletContext;
import java.util.List;
import java.util.Properties;

/**
 * @author ning0
 * @date 2024/6/25 22:27
 * @description SpringMvcConfig
 */
// 配置类
@Configuration
// 扫描controller
@ComponentScan("com.qc.controller")
// 开启SpringMvc注解
@EnableWebMvc
public class SpringMvcConfig implements WebMvcConfigurer {

    // 默认servlet处理器 静态资源映射
    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }


    @Override
    // 配置视图控制器
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/").setViewName("index");
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        FirstInterceptor firstInterceptor = new FirstInterceptor();
        registry.addInterceptor(firstInterceptor).addPathPatterns("/**").excludePathPatterns("/");
    }

    // 异常解析器
    @Override
    public void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> resolvers) {
        SimpleMappingExceptionResolver simpleMappingExceptionResolver = new SimpleMappingExceptionResolver();
        Properties properties = new Properties();
        properties.setProperty("java.lang.ArithmeticException", "error");
        simpleMappingExceptionResolver.setExceptionMappings(properties);
        simpleMappingExceptionResolver.setExceptionAttribute("ex");
        resolvers.add(simpleMappingExceptionResolver);

    }


    // 配置视图解析器
    @Bean
    public ITemplateResolver templateResolver() {
        WebApplicationContext webApplicationContext = ContextLoader.getCurrentWebApplicationContext();
        ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver(webApplicationContext.getServletContext());
        templateResolver.setPrefix("/WEB-INF/pages/");
        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;
    }


}
3.SpringConfig.java
package com.qc.config;

import org.springframework.context.annotation.Configuration;

/**
 * @author ning0
 * @date 2024/6/25 22:26
 * @description SpringConfig
 */

//将该类标注为配置类
@Configuration
public class SpringConfig {

}

g.springframework.context.annotation.Configuration;

/**

  • @author ning0
  • @date 2024/6/25 22:26
  • @description SpringConfig
    */

//将该类标注为配置类
@Configuration
public class SpringConfig {

}


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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot中整合ONLYOFFICE在线编辑

SpringBoot整合OnlyOffice SpringBoot整合OnlyOffice实现在线编辑1. 搭建私有的OnlyOffice的服务2. SpringBoot进行交互2.1 环境2.2 我们的流程2.3 接口规划2.3.1 获取编辑器配置的接口2.3.2 文件下载地址2.3.3 文件下载地址 3. 总结4. 注意4.1 你的项目的地址一定一定要和only…

gcc versions later than 10 are not supported!

如何修改Linux服务器gcc和g版本 查看gcc和g版本 gcc -vg -v修改gcc和g版本 家目录创建./local/bin文件夹 mkdir -p ~/.local/bin把 ~/.local/bin 加到你的 PATH 里 打开~/.bashrc 然后 export PATH~/.local/bin:$PATH后source ~/.bashrc将gcc和g需要的版本加入 ~/.local/bin…

Elasticsearch-Rest-Client

Elasticsearch-Rest-Client&#xff1a;官方RestClient&#xff0c;封装了ES操作&#xff0c;API层次分明&#xff0c;上手简单。 1. 导入依赖 <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high…

激光粒度分析仪计量校准规范:确保测量精度的关键

激光粒度分析仪作为现代科研与工业生产中不可或缺的分析工具&#xff0c;广泛应用于陶瓷、土壤、制药、建材、环保等众多领域。 其通过激光散射原理&#xff0c;快速准确地测量颗粒材料的粒度分布&#xff0c;为材料科学研究、产品质量控制及环境保护等提供了强有力的技术支持…

罗德和神牛、西圣无线麦克风哪个好用?罗德、西圣多方位实测对比

随着短视频行业的兴起&#xff0c;越来越多人开始加入自媒体创作的行业中&#xff0c;不过对于短视频而言&#xff0c;光有好的画面是不够的&#xff0c;还需要清晰、干净的声音。而无线领夹麦适用于唱歌、直播、吃播、短视频、访谈等场景使用&#xff0c;而且能够极大的提高声…

微信小程序渲染层与逻辑层交互原理

1. 网页开发与小程序开发有何不同&#xff1f; 2. 小程序运行环境 3. 页面渲染技术选型 1. 纯客户端技术&#xff1b; 2. 纯Web技术&#xff1b; 3. 用客户端原生技术与Web技术结合的混合技术&#xff08;Hybrid&#xff09;&#xff0c;小程序就是使用的这种技术&#xff1…

dledger原理源码分析系列(一)-架构,核心组件和rpc组件

简介 dledger是openmessaging的一个组件&#xff0c; raft算法实现&#xff0c;用于分布式日志&#xff0c;本系列分析dledger如何实现raft概念&#xff0c;以及dledger在rocketmq的应用 本系列使用dledger v0.40 本文分析dledger的架构&#xff0c;核心组件&#xff1b;rpc组…

抠图后怎么跟背景自然融合?分享3款工具

抠图后怎么跟背景自然融合&#xff1f;将抠图后的图片与背景自然融合可以极大地提升图像的整体视觉效果&#xff0c;使我们能够更方便地创造出丰富多彩、独具特色的设计作品。无论是广告海报、产品展示还是社交媒体分享&#xff0c;自然融合的背景都能让抠图元素与周围环境融为…

【Kaggle】Telco Customer Churn 数据编码与模型训练

&#x1f4ac;在上一部分中&#xff0c;我们已经完成了对数据集背景解读、数据预处理与探索性分析。在数据背景解读中&#xff0c;我们介绍了数据集来源、电信用户流失分析的基本业务背景&#xff0c;并详细解释了每个字段的基本含义&#xff1b;在数据预处理过程中&#xff0c…

11集在Docker上编译tensorFlow Lite MCU例子工程-《MCU嵌入式AI开发笔记》

【11集在Docker上编译tensorFlow Lite MCU例子工程-《MCU嵌入式AI开发笔记》】 这一集咱们一步一步的在doc下面编译TensorFlow Lite的例程 https://tensorflow.google.cn/lite/tutorials?hlzh-cn 进入这个例子&#xff1a; https://codelabs.developers.google.cn/codelabs/…

Python学习笔记六

1.实现4*4随机矩阵 #生成一个随机4*4的数组 import numpy as np np.random.seed(1)#固定随机数 每次都是同一个 &#xff08;&#xff09;里面的数字不同 对应的随机数也不同 np.random.rand() anp.random.randint(0,100,16).reshape(4,4)#0~100的随机整数 包含16个元素 pri…

Java学习 (六) 面向对象--this、继承、方法重写、super

一、this 关键字 1、this 演示 vi Person.java public class Person {String name;int age;//显示声明构造器public Person(String s , int i){name s;age i;}public void setAge(int age){age age;}}vi PersonTest.java public class PersonTest {public static void m…

FuTalk设计周刊-Vol.063

#AI漫谈 热点捕手 1.设计师必看&#xff01;GPTs让你的创意飞起来&#xff01; 我们将深入探讨什么是GPTs、其强大功能和独特优势&#xff0c;以及一些值得推荐的GPT应用和获取途径。 链接https://mp.weixin.qq.com/s/EtVxF9XYvCu6ANFfotortA 2.Figma Config 2024 大会内容回…

考研生活day2--王道课后习题2.3.1、2.3.2、2.3.3

2.3.1 题目描述&#xff1a; 这题和曾经做过的LeetCode203.移除元素一模一样&#xff0c;所以我们就使用LeetCode进行书写&#xff0c;题目链接203. 移除链表元素 - 力扣&#xff08;LeetCode&#xff09; 解题思路 大家的第一反应肯定是根据书上所学的书写方法一样书写&…

为什么这几年参加PMP考试的人越来越多

参加PMP认证的人越来越多的原因我认为和社会发展、职场竞争、个人提升等等方面有着不小的关系。国际认证与国内认证的性质、发展途径会有一些区别&#xff0c;PMP引进到中国二十余年&#xff0c;报考人数持增长状态也是正常的。 具体可以从下面这几个点来展开论述。 市场竞争…

【技术追踪】SegGuidedDiff:基于分割引导扩散模型实现解剖学可控的医学图像生成(MICCAI-2024)

它来了它来了&#xff0c;它带着 mask 做生成了~ SegGuidedDiff&#xff1a;提出一种用于解剖学可控医学图像生成的扩散模型&#xff0c;在每个采样步骤都遵循多类解剖分割掩码并结合了随机掩码消融训练算法&#xff0c;可助力乳房 MRI 和 腹部/颈部到骨盆 CT 等任务涨点。 论文…

python中的包和模块

目录 一、包与模块 二、第三方包的安装 2.1 pip install 2.2使用 curl 管道 2.3其他安装方法 三、导入单元的构成 3.1pip的使用 四、模块的缓存 一、包与模块 Python 中除了函数库以外&#xff0c;还有非常多且优秀的第三方库、包、模块。 模块Module&#xff1a;以…

LangChain 开发智能Agent,你学会了吗?

Prompt Enginnering 是打开LLM宝库的一把金钥匙&#xff0c;如果prompt得法&#xff0c;并能将其技巧与某项工作深度结合&#xff0c;那必将大大增效。今天我们来聊聊如何优化Prompt设计、Prompt Template管理等技术和体力活&#xff0c;并赋能老喻干货店的营销活动。 LLM Pro…

基于机器学习的零售商品销售数据预测系统

1 项目介绍 1.1 研究目的和意义 在电子商务日益繁荣的今天&#xff0c;精准预测商品销售数据成为商家提升运营效率、优化库存管理以及制定营销策略的关键。为此&#xff0c;开发了一个基于深度学习的商品销售数据预测系统&#xff0c;该系统利用Python编程语言与Django框架&a…

Java服务器代码远程调试(IDEA版)

Java服务器代码远程调试 配置启动脚本参数配置IDEA远程调试工具操作步骤 注意&#xff1a;远程调试的代码需要与本地代码一致&#xff0c;远程调试目的是解决本地环境无法支持调试的情况下&#xff0c;解决线上&#xff08;测试&#xff09;环境调试问题。 配置启动脚本参数 n…