SpringMVC相关知识点

这篇具有很好参考价值的文章主要介绍了SpringMVC相关知识点。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

概述

传统开发中的控制层:
接收请求参数 request.getParameter
封装实体 new 实体类调用其set方法
访问业务层
接收访问结果
指派页面 通过request和response对象进行页面跳转
将共有行为进行抽取成DispatcherServlet【SpringMVC内部集成】,通过Spring-MVC.xml配置文件去配置。
Spring:
获取请求参数:形参与请求名一致或对象的属性与请求名一致即可自动获取封装,不一致时可用@RequestParam(“请求名”)获取请求的参数
指派页面:内部可通过配置视图解析器中前后缀的方式,简化视图名,可以直接返回字符串或者ModelAndView对象
SpringMVC可以让一个简单的Java类成为处理请求的控制器,无需实现任何借口,支持RESTful编程风格

执行原理

 DispatcherServlet不执行具体操作,负责的是相应调度
1DispatcherServlet接收到请求后,调用HandlerMapping执行请求解析,返回给DS一个处理器执行链
2.拿到处理器执行链后,DS本身并不执行,找HandlerAdaptor帮助进行执行,由HandlerAdaptor调用执行Handler,返回给DS一个ModelAndView
3.解析视图时,会去调用ViewResolve进行解析,返回一个View,最后进行渲染视图 
注意:ModelAndView中的View是一个字符串类型的视图名,经过ViewResolver解析后,返回真正的View对象

SpirngMVC中容器加载存在的两个问题

存在问题1;
每个servlet中,都需要加载相应的配置文件
弊端:配置文件加载多次,容器创建多个
解决办法:将其放在filter中,将创建容器的代码放在filter中。将容器对象存放在最大的域中【ServletContext域】
直接找对象拿,不通过属性名更省心 
ServletContextLinstener中监测到web应用程序启动
Spring【SpringMVC内部集成】提供了ContextLoaderListener 导入其对应的坐标即可
存在问题2:应用配置文件名写死,解决方法:
1.使用全局初始化参数
<context-param>
  <param-mame>xxx </param>
   <param-value>classpath: xxx.xml <param-value>
</context-param>
获取app时,通过WebAppliacationContextUtils的静态方法,获取应用上下文对象

数据注入思想

方法谁调用谁负责传入实参(MVC框架调用)常用的对象都进行了封装

静态资源匹配

1.DispatcherServlet内部是缺省的,所有的web请求都会通过DispatcherServlet,会将静态资源当作,requesmapping中去匹配,找不到时,便会报错
解决办法:开启静态资源访问权限
<mvc:resources mapping = "/js/**  location = "/js/">
可以有多个

解决办法2:交由默认的处理器进行处理
<mvc: default-servlet-handler>

中文乱码问题

1.tomcat8.5 get请求乱码问题已解决(之前需要再tomcat目录下修改相关配置)
2.post乱码问题
post乱码问题的两个解决办法:
办法1:request对象设置
办法2:配置全局过滤filter,内部设置编码格式
Spring框架已提供:CharacterEncodingFilter
映射地址改为 /*

@RequestMapping

请求url和请求的方法之间建立映射关系  可以用在类和方法上
注意:可以改变请求的方法类型,和限制必须携代哪些请求参数,内部可以设置输出字符串的编码方式

@ResponseBody

告知SpringMVC框架进行的是字符串的会写,而不是进行页面的跳转

注解补充

@RequestBody主要*用来接收前端传递给后端的json字符串中的数据的(请求体中的数据)。由于GET方式没有请求体,所以使用@RequestBody接受数据的时候,前端不能用GET方式提交数据,而是用POST方式提交。

​ 2、在后端的同一个接口中,@RequestBody和@ResquestParam()可以同时使用,@RequestBody最多只能有一个,而@ResquestParam()可以有多个。

​ 3、@RequestBody 接收的是***请求体***里面的数据;而@RequestParam接收的是***key-value***里面的参数。

4.用法 @RequestBody  或@ResponseParanm("name名")
 

页面跳转

1.直接返回字符串 【和内部资源视图解析器拼接时,进行返回,拼接是字符串内部进行拼接】
2.通过ModelAndView对象返回
通过ModelAndView的方法设置属性名,里面同直接返回字符串一样,会进行拼接

数据响应

1.直接返回字符串
需要添加@ResponseBody告知框架,不要进行页面跳转,进行字符串的输出 重点!!!!!
需要指定格式
用到json转换工具
导包
jackson-core
jackson-databind
jackson-annnotations
new ObjectMapper
调用其write
默认属性
value属性是默认属性,只有这一个可以省略不写 

注解驱动

内部集成了jackson json转换工具
导入mvc命名空间后添加注解驱动如下
<mvc:annotation-driven>

监听器、过滤器、拦截器

监听器:当事件发生时,执行相关操作,比如服务器一启动,加载Spring核心容器
过滤器:访问目标资源前,做干预操作,如post请求中文乱码问题,配置在web.xml中的filter
拦截器:类似于Servlet开发中的Filter,用于对处理器进行预处理和后处理
拦截器决定是否进行放行操作,拦截器是AOP思想的体现
filter和Interceptor区别:
1.Filter是Servlet规范中的一部分,任何Java Web工程都可以使用  在url-pattern配置/* 后,对所有要访问的资源拦截
2.Inteceptor:是SpringMVC框架自己的,只有使用了SpringMVC框架的工程才可以使用,配置/** 后,可以对所有资源进行拦截

使用方法

过滤器:实现filter接口,将实现类配置在web.xml中即可

拦截器:实现HandlerInteceptor接口,将实现类配置在Spring-mvc中

拦截器中的内部方法

preHandler :返回false,后续Controller不再执行
postHandler 目标方法执行完毕之后执行,在视图对象返回前进行
afterCompletion :  视图对象返回之后,在流程执行完毕后执行,做收尾工作

异常处理

传统开发:

使用try-catch的方式,补获和处理异常

异常处理和业务之间的代码耦合度高

catch中的代码相似度高

解决方法:

抽取,将异常向上抛出,由调用者负责相关处理,最终的调用者为DispatcherServlet

相关注意事项

return返回的资源加/ 表示从根目录访问
只有在一个Sevlet请求中才可以获取ServletContext对象
所有的url请求到web端都是字符串
 

Resutful风格

架构风格、设计风格
url+请求方式
GET 获取资源
POST 新建资源
PUT 更新资源
DELETE 删除

前端请求在项目中的执行链路

url请求-》tomcat服务器-》应用程序->tomcat调用SpringMVC的service方法——》获取到业务方法后,利用反射执行方法文章来源地址https://www.toymoban.com/news/detail-602566.html

到了这里,关于SpringMVC相关知识点的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Hadoop相关知识点

    开启防火墙 sudo ufw enable 关闭防火墙 sudo ufw disable 查看防火墙状态 sudo ufw status 修改主机名 sudo vi /etc/hostname 修改映射 sudo vi /etc/hosts (考题) 建立文件夹 mkdir 文件夹名字 删除文件夹 rm -rf 递归删除文件夹向下穿透,其下所有文件、文件夹都会被删除 rm -f 强制删除文件 rm -r 递归

    2024年02月06日
    浏览(39)
  • java相关知识点

    1.String和StringBuffer如何互相转化 StringBuffer buffer = new StringBuffer(string); String string = buffer.toString();  2.如何实现两个数组内容的拷贝  3.如何去除字符串首尾空格 str.trim()  4.字符串和字符数组如何相互转换 字符串转字符数组:str.toCharArray(); 字符数组转字符串:strs.valueOf(char[] ch)  

    2023年04月23日
    浏览(45)
  • http相关知识点

    一张网页实际上可能会有多种元素组成,这也就说明了网页需要多次的http请求。 可由于http是基于TCP的,而TCP创建链接是有代价的,因此频繁的创建链接会导致效率降低 为了防止这种情况,就需要两端主机都具备支持长连接的功能,将大份的资源使用一条链接就包含,也就是

    2024年02月13日
    浏览(43)
  • DAC相关知识点

    1.回放数据64bit的数据来源有两个地方: A——ROM波形数据表(数据来源可由dds产生或者matlab产生,本实际项目选择由dds产生的数据:通过写地址出来相应频率的波形)。 B——预留的接口给客户用来回访他们的I/Q数据 (64bit数据一般是4组16bit的IQ拼接的{i0,q0,i1,q1})。 2.6

    2024年02月12日
    浏览(46)
  • Redis相关知识点

    Redis (REmote DIctionary Server) 是用 C 语言开发的一个开源的高性能键值对(key-value)数据库,它支持网络,可基于内存亦可持久化,并提供多种语言的API。Redis具有高效性、原子性、支持多种数据结构、持久化、高并发读写等特点。 特征: 1.数据间没有必然的关联关系 2.内部采用

    2024年01月23日
    浏览(75)
  • ThreadLocal相关知识点

    ThreadLocal是Java中的一个类,它提供了一种线程局部变量的机制。它的作用是,为每个线程创建一个独立的变量副本,各个线程之间互不干扰。简单来说,ThreadLocal为多线程环境下的线程提供了一种线程私有的数据存储方式。 使用ThreadLocal可以避免多线程中的数据共享和竞争条

    2024年02月11日
    浏览(47)
  • MicroBlaZe 相关知识点

    1.DDR3——存储.c的应用程序。需要两个时钟(200MHZ输入,还有一个是特权同学的166.6m) 2.QSPI FLASH——对flash进行固化(1.需要50M外部时钟输入2.在SDK里面需要修改值为5)。 3.MicroBlaZe的输入时钟(mig输出的时钟频率一般小于200MHZ)。 5.SDK里面会有个串口terminal可以显示打印信息。

    2024年02月13日
    浏览(57)
  • JVM相关知识点

    Java可以跨平台的原因是因为它使用了Java虚拟机(JVM)作为中间层。Java源代码首先被编译成字节码,然后由JVM解释执行或即时编译成本地机器代码。这样,在不同的操作系统上,只需要安装适合该操作系统的JVM,就可以运行相同的Java程序。JVM提供了一个抽象的执行环境,使得

    2024年02月08日
    浏览(48)
  • Linux相关知识点

    Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。 Linux内核 是一个Linux系统的内核,而不是一个操作系统 Linux操作系统 红帽操

    2024年02月11日
    浏览(45)
  • 网络空间安全相关知识点

    网络空间安全指的是对计算机、其他数字设备及网络设备和传输线路的网络系统中存储、传输和处理 的信息的保护。它包含信息安全和网络安全。 信息安全 是指保留信息的保密性、完整性和可用性,另外还设计其他属性,如真实性、可审计性、不可否认性和可靠性。 网络安

    2024年02月12日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包