Spring Web
目录
概述
SpringMVC的组件
DispatcherServlet
HandlerMapping
HandlerAdapter
SpringWeb的运行流程
Controller类的编写
@RestController注解
@RequestMapping注解
SpringWeb搭建
获取请求参数
解决POST请求中文乱码问题
Ajax返回JSON数据
跨域问题的解决
拦截器
拦截器搭建
配置拦截器
概述
Spring Web 是Spring框架中提供Web控制层功能,能够替代传统的Servlet功能,进行接收请求,处理数据,响应参数的处理
SpringWeb与spring无需通过中间层进行整合,能够进行配置直接使用
SpringWeb是基于SpringMVC架构的Web功能,但是在现在的前后端分离的架构中,SpringMVC中的部分功能已经不再使用了,比如View视图层的功能已经被前端架构取代,但是其他的功能是继续应用的
SpringMVC的组件
DispatcherServlet
Spring 中提供了org.springframework.web.servlet.DispatcherServlet 类,它从HttpServlet 继承而来,它就是 Spring MVC 中的前端控制器。
DispatcherServlet自己并不处理请求而是,将请求与处理器分发给映射处理器与处理器适配器,由处理器处理数据并返回数据给DispatcherServlet
HandlerMapping
HandlerMapping负责解析请求地址,经过了 HandlerMapping 处理之后,DispatcherServlet 就知道要将请求交给哪个页面控制器来处理了,会找到对应的处理器。
HandlerAdapter
经过了 HandlerMapping 处理之后,DispatcherServlet就获取到了处理器,但是处理器有多种,为了方便调用,DispatcherServlet将这些处理器包装成处理器适配器 HandlerAdapter,HandlerAdapter 调用真正的处理器的功能处理方法,完成功能处理
SpringWeb的运行流程
1.DispatcherServlet接收所有的前端请求,并且负责将资源分发地址给映射处理器,与适配器
2.映射处理器解析请求地址,查询对应的Handler处理器返回给DispatcherServlet
3.如果本次请求有对应的拦截器则会经过拦截器
4.处理器适配器是会找到对应的处理器并且封装请求中的参数
5.处理器会将根据请求参数处理数据然后返回给DispatcherServlet
Controller类的编写
Controller类是SpringMVC中留下来的称呼,实际上就是请求的对应的处理器类,负责处理请求的数据开发者实际上编写的主要处理数据的程序就是Controller类
Controller类需要被两个注解进行修饰,包含@RestController与@RequestMapping
@RestController注解
@RestController用于修饰一个Controller类对象,类似于的@Service注解,将该类的对象注入进spring容器
在之前的SpringMVC中使用@Controller注解进行修饰,而@RestController中集成了@Controller与@ResponseBody注解,在现在的SpringWeb中都是使用该注解进行修饰
注意@ResponseBody注解会默认返回json格式的数据
@RestController注解内部结构
@RequestMapping注解
该注解用于解析请求映射的地址,可以用于类与方法上,只有匹配的地址才会进去该类与方法
属性值:
value :请求的路径,这个路径相对于应用的上下文,它是 path 的别名。类型是一个 String[] ,也就是说它可以匹配多个请求路径
method: 请求的方法。RequestMethod.GET代表Http协议中的get请求,RequestMethod.POST代表Http协议中的post请求,如果不指名该属性值,则get请求与post请求都会的匹配
也可以直接用@GetMapping, @PostMapping注解分别代表的get请求与post请求的类型
SpringWeb搭建
1.导入依赖jar
<dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.2.2.RELEASE</version>
</dependency>
2.在web.xml文件中配置DispatcherServlet
<servlet><servlet-name>application</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:application.xml</param-value></init-param><load-on-startup>0</load-on-startup>
</servlet>
<!-- 请求映射 -->
<servlet-mapping><servlet-name>application</servlet-name><url-pattern>/</url-pattern>
</servlet-mapping>
3.在配置文件中开启SpringMVC的注解(再创建一个xml文件进行配置,导入进主配置文件中)
<mvc:annotation-driven></mvc:annotation-driven>
获取请求参数
1.注入HttpServletRequest类对象与HttpServletResponse类对象
将两个类的对象引用作为形参传入方法中,在方法中使用HttpServletRequest类的对象即可获取请求参数,类似于Servlet中的做法
@GetMapping(path = "/test2")public String test2(HttpServletRequest request, HttpServletResponse response){//注意此时的HttpServletRequest类与HttpServletResponse类是自动注入进来的request.getParameter("account");//获取参数
return "springWeb";}
2.使用形参进行接收,在方法中的形参列表中直接使用对应类型的参数即可接收请求中的数据
@GetMapping(path = "/test")public String test(Integer num,@RequestParam("user-name") String account,String password){//接收参数可以直接定义形参进行接收,参数名需要与形参名一致,如果参数名不合法则使用@RequestParam修饰//@RequestHeader("Host")接收请求头中的数据System.out.println("hello springWeb");System.out.println(num);Admin admin = new Admin();admin.setAccount(account);admin.setPassword(password);loginService.login(admin);
return "springWeb";}
注意请求参数名在java中不合法的情况,例如人为的设置或者是请求头中的数据
此时使用@RequestParam("请求参数名")来绑定形参即可接收
@RequestHeader("Host")可以获取请求头中的数据
3.使用对象类型接收
使用前提是model类中的属性名与参数名一致,spring框架会自动将参数进行组装
@GetMapping(path = "/test1")public String test1(Admin admin ,@RequestHeader("Host")String host ){System.out.println("hello springWeb");System.out.println(host);loginService.login(admin);
return "springWeb";}
解决POST请求中文乱码问题
在servlet中学习过POST请求参数中的中文字符传入后端时会出现中文乱码的问题,当时解决的方式是通过过滤器进行解决的。
SpringWeb中已经提供了该过滤器解决该问题,该类已经被SpringWeb封装过了,我们只需要直接进行配置即可
配置编码的servlet
<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>
</filter>
<filter-mapping><filter-name>characterEncodingFilter</filter-name><url-pattern>/*</url-pattern>
</filter-mapping>
Ajax返回JSON数据
程序员在SpringWeb中返回的响应数据,只需要在controller类中使用return关键子进行返回即可
JSON数据格式一般是通过将引用类型的数据转换为JSON字符串进行返回,JSON格式现在已经是前后端交互传输数据格式的标准了所以在返回引用类型的数据时SpringWeb会默认返回JSON格式的数据,如果没有引入JSON转换的jar包的话会报出JSON格式转换的异常
@responseBody注解的作用就是将 controller 的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到 response 对象的 body 区,@responseBody已经集成进入@RestController类中了
引入JSON转换的jar依赖
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind --><!--JSON--><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.13.3</version></dependency>
跨域问题的解决
1.添加jar依赖
<dependency><groupId>com.thetransactioncompany</groupId><artifactId>cors-filter</artifactId><version>2.5</version>
</dependency>
2.配置过滤器
通过过滤器实现的跨域问题的解决
<filter><filter-name>CORS</filter-name><filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class>
</filter>
<filter-mapping><filter-name>CORS</filter-name><url-pattern>/*</url-pattern>
</filter-mapping>
拦截器
拦截器是对已经进入了SpringMVC中的请求进行拦截,可以对这些请求的Handler类进行拦截
拦截器是SpringWeb中定义的功能,不同于过滤器是对servlet中定义的功能
拦截器搭建
SpringMVC 定义了拦截器接口 HandlerInterceptor,该接口中定义了三个方法,其中后两个方法是针对与视图进行处理的,在现在的软件架构中已经不应用了,只需要重写boolean preHandle( )方法
preHandle:
该方法是在预处理方法,就是在处理器方法执行之前这个方法会被执行,相当于拦截了处理器方法,框架会传递请求和响应对象给该方法,第三个参数为被拦截的处理器方法。如果preHandle方法返回true表示继续流程(如调用下一个拦截器或处理器方法),返回 false 表示流程中断,不会继续调用其他的拦截器或处理器方法,此时我们需要通过 response 来产生响应;
@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println("preHandle");return false;}
配置拦截器
在springMVC的配置文件中进行该配置
<mvc:interceptors><mvc:interceptor><mvc:mapping path="/**"/><mvc:exclude-mapping path="/statics/**"/><mvc:exclude-mapping path="/loginCtl/checklogin"/><bean id="demo" class="com.ff.springMVC.util.DemoInterceptor"></bean></mvc:interceptor>
</mvc:interceptors>
Spring Web相关推荐
- Spring Web MVC(一)
概述 Spring Web MVC框架的特点 五大核心组件 编程步骤 五大核心组件 DispatcherServlet前端控制器 WebApplicationContext中特殊的bean 处理过程 ...
- 用Spring Web Flow和Terracotta搭建Web应用
什么是Spring Web Flow? Spring Web Flow是Spring Framework中的web应用组件,它提供了一种编写有状态和基于会话的web应用的简便手段.Spring Web ...
- 【Spring Web MVC】Spring Web MVC 注解开发环境搭建
为什么80%的码农都做不了架构师?>>> 1.创建maven项目 创建一个名为:springwebmvc-first的maven项目 2.添加依赖包 要使用springWebM ...
- MESSL(maven + extjs + spring portlet mvc + spring web flow + liferay )整合架构 5
流控制文件很简单,就是根元素是<view>,然后用<view-state>来代表一个一个的页面,用<transition>来代表从一个状态到另外一个状态的跳转,如果 ...
- spring_了解Spring Web应用程序体系结构:经典方法
spring 每个开发人员必须了解两件事: 架构设计是必要的. 精美的架构图并未描述应用程序的真实架构. 真正的体系结构是从开发人员编写的代码中找到的,如果不设计应用程序的体系结构,最终将得到一个具有 ...
- spring初始化web_了解Spring Web初始化
spring初始化web 几年前,我们大多数人习惯到处编写XML配置文件,甚至可以设置简单的Java EE应用程序. 如今,使用Java或Groovy来配置项目已成为首选方式–您只需要看一下Sprin ...
- 强烈推荐Spring Web Flow权威指南
关于Spring Web Flow权威指南 评论 读后感:这是Spring Web Flow创始人写的书.内容是基于1.0的.此书原版出版时其实2.0已经推出了,为什么老大并没有追新呢?我猜想,书中写 ...
- Understanding Spring Web Application Architecture: The Classic Way--转载
原文地址:http://www.petrikainulainen.net/software-development/design/understanding-spring-web-applicatio ...
- Spring Web 应用的最大败笔
来源:http://t.cn/EM8ROEb 开发人员在使用Spring应用时非常擅长谈论依赖注入的好处.不幸的是,他们没有真正的利用到它的好处,如单一职责原则,分离关注原则.如果我们一起来看看大部分 ...
- Spring Web Flow实例教程
目录: 参考文献 购物车用例 什么情况下可以使用 Spring Web Flow? 配置 Spring Web MVC 配置 Spring Web Flow 2.0 的基础 在购物车示例应用中配置 S ...
最新文章
- php json转数组后并在前端展示,0516-如何从服务器端获取JSON格式字符串并解决到前端页面中显示...
- SAP UI5 ConnectionManager - drives initialization of odata model
- 查看静态库(.lib)和动态库(.dll)的导出函数的信息
- SimpleDateFormat的一些简单用法:时间类型转字符串,字符串转时间
- python socket模块作用_python之socket模块详解--小白博客
- 扩展JS格式化(Format)功能及评论树
- 喂,搞那么难的算法面试题有必要么?
- android 添加个人标签,android – 如何在标签标签上添加填充?
- 前端调用接口报错看不到报错响应时 console.dir
- xp激活30天到期_我的XP系统还剩30天激活怎么办
- wangeditor富文本编辑器的复制word到浏览器发生乱码
- 从源码角度上探索AdapterViewFlipper怎么实现广告栏的垂直自动滚动
- SE、ECA、CA、SA、CBAM、ShuffleAttention、SimAM、CrissCrossAttention、SK、NAM、GAM、SOCA注意力模块、程序
- localhost: mv: 无法获取“/opt/module/hadoop-3.1.3/logs/hadoop-atguigu-datanode-hadoop102.out.3“ 的文件状态(sta
- 知识精华—修改文件夹的只读属性
- linux全角和半角的切换,全角和半角
- 周鸿祎:“作恶”的创新?
- 计算机主机进行清洁的步骤,电脑清理灰尘工具用什么 超详细台式电脑清灰教程...
- NFT 地板价计算方法
- 活体检测——专利调研
热门文章
- 灵光一闪 ~ Diamond
- Caffe +window7可视化方法
- 前端收集(前端学习资源)
- Java语言-概念-Swing概述
- android6虎牙新版来不了,虎牙精简版永不升级
- 如何搭建自己的网站_如何让别人看到自己编写的网页_IIS创建网站
- JS将图片转化为base64编码,并实现点击下载,js实现图片下载的实操博客
- stm32简单小实例_抓住蝶粉的心,STM32有“利器”
- 轻松管理多个织梦网站 织梦CMS多后台快捷登陆软件
- 介绍家乡的html源代码_APICloud Studio3.0最新功能及使用流程介绍