SpringMVC再学习

news2024/11/26 6:03:26

基于原生的Servlet,通过了功能强大的前端控制器DispatcherServlet,对请求和相应进行统一处理

如今我们不再去web.xml中去主持servlet
而是直接创建一个配置类ServletContainersInitConfig去基础AbstractDispatcherServletInitializer

createServletApplicationContext()方法是为了创建Servlet容器,加载SpringMVC对应的bean并放入WebApplicationContext对象范围中

createRootApplicationContext()方法是为了创建servlet容器时需要加载非SpringMVC对应的bean

getServletMappings()设定SpringMVC对应的请求映射路径,设置为/表示拦截所有请求
//不管是springmvc.class 还是 spring.class 一般都需要加上注释@ComponentScan(“com/…”),包扫描
主配置类ServletContainersInitConfig
相关配置类SpringMvcConfig、SpringConfig

public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer{
   protected WebApplicationContext createServletApplicationContext(){
   //配置springmvc的容器
      AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
      ctx.register(SpringMvcConfig.class);
      return ctx;
   }

   protected String[] getServletMappings(){
      return new String[]{"/"};
   }

    protected WebApplicationContext createRootApplicationContext(){
    //配置spring的容器
           AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
      ctx.register(SpringConfig.class);
      return ctx;

  //添加过滤器
  protected Filter[] getServletFilters(){
     CharacterEncodingFilter filter = new CharacterEncodingFilter();
     filter.setEncoding("utf-8");
     return new Filter[]{filter};
     //有多个的情况 return new Filter[]{filter,filter1,filter2};要么用它自带的过滤器,要么自己创建
  }
  
}

传参时

前端后端名字相对好即可,名称对应不上就用@RequstParam
json 参数加上注解 @RequestBody(配件springmvc的配置类上加@EnableWebMvc)

拦截器

拦截器与过滤器的区别

归属不同: Filter属于Servlet技术,Interceptor属于SpringMvc技术
拦截内容不同: Filter对所有访问进行增强,Interceptor仅针对SpringMvc的访问进行增强

编写拦截器(实现该三个方法)

@Componet
public class ProjectIntercaptor implements HandlerInterceptor{
  @Override
  public boolean preHandle(HttpServletRequest request,HttpServeletResponse response,Object handler) throws Exception{
      System.out.println("");
      return true;
  }
  @Override
  public boolean postHandle(HttpServletRequest request,HttpServeletResponse response,ModelAndView modelAndView) throws Exception{
      System.out.println("");
  }
  @Override
  public void afterCompletion(HttpServletRequest request,HttpServeletResponse response,Object handler,Exception ex) throws Exception{
      System.out.println("");
  }
}

注册拦截器

也可以直接SpringMvcConfig类直接实现WebMvcConfiguer,然后直接在该类创建下面的方法,不用再去写个support类了

public class SpringMvcSupport extends WebMvcConfigurationSupport{
  //继承WebMvcConfigurationSupport,就可以覆写很多添加方法,当然添加拦截器也是其中的一种
  @Autowired //把我们自己写的拦截器配置到注入到容器中
  private ProjectInterceptor projectInterceptor;

  @Override
  protected void addInterceptors(InterceptorRegistry registry){
     registry.addInterceptor(projectInterceptor).addPathPatterns("/books");
  }
}

拦截器参数

request 可以拿到请求的信息
reponse 可以设置返回的信息
handler 通过抢占可以拿到原始的方法

各个组件

请添加图片描述

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

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

相关文章

高性能 WPF 图表控件LightningChart.NET:支持从 Web 服务器获取数据 | 附最新版试用下载

LightningChart.NET 是一款高性能 WPF 和 Winforms 图表,可以实时可视化多达1万亿个数据点。可有效利用CPU和内存资源,实时监控数据流。同时,LightningChart使用突破性创新技术,以实时优化为前提,大大提升了实时渲染的效率和效果&…

Python的面向对象,详细讲解Python之用处等基本常识

目录 Python 面向对象 面向对象技术简介 创建类 实例 实例 self代表类的实例,而非类 实例 创建实例对象 访问属性 实例 Python内置类属性 实例 python对象销毁(垃圾回收) 实例 实例 类的继承 实例 方法重写 实例 基础重载方法 运算符重载 实例…

机器学习: 可视化反卷积操作

转置卷积操作的详细分解 1. 简介 转置卷积是用于生成图像的,尽管它们已经存在了一段时间,并且得到了很好的解释——我仍然很难理解它们究竟是如何完成工作的。我分享的文章[1]描述了一个简单的实验来说明这个过程。我还介绍了一些有助于提高网络性能的技…

yolov5的基本配置

yolov5的基本配置train.pydata.yaml数据集标签文件格式:总结train.py def parse_opt(knownFalse):parser argparse.ArgumentParser()parser.add_argument(--weights, typestr, defaultROOT / yolov5s.pt, helpinitial weights path)parser.add_argument(--cfg, typestr, defau…

【Java面试篇】Spring中@Transactional注解事务失效的常见场景

文章目录Transactional注解的失效场景☁️前言🍀前置知识🍁场景一:Transactional应用在非 public 修饰的方法上🍁场景二: propagation 属性设置错误🍁场景三:rollbackFor属性设置错误&#x1f3…

Apache druid未授权命令执行漏洞复现

简介 Apache Druid是一个实时分析型数据库,旨在对大型数据集进行快速的查询分析("OLAP"查询)。Druid最常被当做数据库来用以支持实时摄取、高性能查询和高稳定运行的应用场景,同时,Druid也通常被用来助力分析型应用的图…

【蓝桥杯嵌入式】拓展板之数码管显示

文章目录硬件电路连接方式函数实现文章福利硬件电路 通过上述原理图,可知拓展板上的数码管是一个共阴数码管,也就是说某段数码管接上高电平时,就会点亮。   上述原理图还给出一个提示,即:三个数码管分别与三个74HC59…

十八、Django-restframework之请求和响应(三)

1. 请求对象 REST框架引入了一个扩展了常规HttpRequest的请求对象, 并提供更灵活的请求解析。请求对象的核心功能是属性request.data,这与request.POST类似,但对于WebAPIs更有用。 request.POST # Only handles form data. Only works fo…

Barra模型因子的构建及应用系列五之NonLinear Size因子

一、摘要 在前期的Barra模型系列文章中,我们构建了Size因子、Beta因子、Momentum因子和Residual Volatility因子,并分别创建了对应的单因子策略,本节文章在该系列下进一步构建NonLinear Size因子。从回测结果看,自2022年以来&…

ConcurrentHashMap-Java八股面试(五)

系列文章目录 第一章 ArrayList-Java八股面试(一) 第二章 HashMap-Java八股面试(二) 第三章 单例模式-Java八股面试(三) 第四章 线程池和Volatile关键字-Java八股面试(四) 提示:动态每日更新算法题,想要学习的可以关注一下 文章目录系列文章目录一、…

基于卷积神经网络CNN的三相故障识别

目录 背影 卷积神经网络CNN的原理 卷积神经网络CNN的定义 卷积神经网络CNN的神经元 卷积神经网络CNN的激活函数 卷积神经网络CNN的传递函数 卷积神经网络CNN手写体识别 基本结构 主要参数 MATALB代码 结果图 展望 背影 现在生活,为节能减排,减少电能损…

Ajax学习 基础概念 发送请求 常见方法

AJAX 简介 AJAX 全称为Asynchronous Javascript And XML ,就是异步的JS和XML。 通过AJAX可以再浏览器中向服务器发送异步请求,最大的优势:无刷新获取数据。 AJAX 不是新的编程语言,而是一种将现有的标准组合在一起使用的新方式。…

从FPGA说起的深度学习(四)

这是新的系列教程,在本教程中,我们将介绍使用 FPGA 实现深度学习的技术,深度学习是近年来人工智能领域的热门话题。在本教程中,旨在加深对深度学习和 FPGA 的理解。用 C/C 编写深度学习推理代码高级综合 (HLS) 将 C/C 代码转换为硬…

锚点定位使内容在指定区域显示

1、问题描述 在使用锚点定位时,使用 scrollIntoView 方法,导致整个页面随着锚点跳转 2、问题分析 因为最开始做需求的时候,只在最外层设置了一个滚动条,所以导致整体锚点的跳转是随着最外层滚动条距离顶部的高度跳转的&#xf…

从NLP视角看电视剧《狂飙》,会有什么发现?

文章目录1、背景2、数据获取3、文本分析与可视化3.1 短评数据预处理3.2 词云图可视化3.3 top关键词共现矩阵网络3.4 《狂飙》演职员图谱构建4、短评相关数据分析与可视化5、总结原文请关注:实用自然语言处理 作者:风兮 建议查看原文: https…

Linux下软件部署安装管理----rpmbuild打包rpm包部署安装

来源:微信公众号「编程学习基地」 文章目录1.安装rpmbuild2.rpm包制作打包rpm包3.rpm包安装4.rpm包卸载1.安装rpmbuild yum install rpmbuild yum install rpmdevtools创建rpm包管理路径,生成rpm相关目录 RPM打包的时候需要编译源码,还需要…

基于Cortex-M7内核STM32F767NIH6,STM32F767VGT6,STM32F767VIT6嵌入式技术资料

STM32F7 32 位 MCUFPU 基于高性能的 ARMCortex-M7 32 位 RISC 内核,工作频率高达 216MHz。Cortex-M7 内核具有单浮点单元(SFPU)精度,支持所有 ARM 单精度数据处理指令与数据类型。同时执行全套 DSP 指令和存储保护单元(MPU)&#…

【完美解决】应用程序无法正常启动(0xc000007b)请单击“确定”关闭应用程序

年期安装CorelDRAW X8 (64-Bit),安装完成之后运行一点毛病都没有,可是过了两三个月,再打开就出现“应用程序无法正常启动(0xc000007b)请单击“确定”关闭应用程序”这个提示框,如下图示 出现这个问题我就上网查找,无非…

Java学习笔记 --- JavaScript

一、JavaScript介绍 JavaScript语言诞生主要是完成页面的数据验证。因此它运行在客户端,需要运行浏览器来解析执行JavaScript代码。JS是Netcape网景公司的产品,最早取名为LiveScript;为了吸引更多java程序员。更名为 JavaScript JS是弱类型&…

File 文件操作

File 文件操作: 一、常用方法: 方法类型描述public File(String pathname)构造给定一个要操作文件的完整路径public File(File parent, String child)构造给定要操作文件的父路径和子文件名称public boolean createNewFile() throws IOExce…