文章目录
- 一、springweb
- 1.概述
- 2.springWeb层搭建
- 3.请求中的地址如何定义
- 4.如何接收请求中的数据
- 5.直接使用对象接收
- 6.post请求中文乱码处理
- 7.Ajax 返回 JSON
- 8.跨域问题
- 9.拦截器
- 10.总结
一、springweb
1.概述
SpringWeb就是spring框架中的一个模块,对web层进行封装,使用起来更加方便。
参数接收框架进行封装(方便)
MVC架构:也是后端的架构,是jsp时代的称呼。mvc的概念在前后端分离的时代不存在了
(Cotroller 控制层 servlet 接收 处理 响应)
(Model 数据模型 dao model)
(View 视图 jsp 用于将数据添加到html中 然后进行响应 --现在不学这个模块)
现在的ssm(spring springweb mybatis)
SprngMVC运行流程:
1.用户发起请求
2.DispatcherServlet 负责分发控制的servlet
service–>doget–>dopost
(1)DispatcherServlet 是一个总调度,负责控制接收所有的请求,然后调用映射处理器,适配器 ====(ip+port/项目名/处理器地址–》(2))((1–》(4)))
(2)Handler Mapping 映射处理器 解析请求中的处理器地址 看项目中有没有对应的处理器(如果有拦截器,会执行对应的拦截器)(–》(1))
(3)Handler spring中自己封装的处理器 自定义的处理器,可以配置映射地址,以便于spring框架找到自己 ====(最终执行的部分 数据响应 这部分是自己写的,其他的框架帮我们完成)
(4)HandlerAdapter 适配器 封装请求中的参数((4)–》(3))
2.springWeb层搭建
1.导入jar
<!--springweb--><dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.2.2.RELEASE</version></dependency>
2.web.xml中配置 DispatcherServlet
<!-- 配置DispatcherServlet(请求分发servservlet) 负责接收前端所有的请求 --> <servlet> <servlet-name>application</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 配置读取spring配置文件--> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring.xml</param-value> </init-param> <!-- 控制servlet创建 初始化的时间 -1第一次访问时创建 >=0是服务器启动时创建--> <load-on-startup>0</load-on-startup> </servlet><!-- 请求映射--> <servlet-mapping> <servlet-name>application</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
3.添加spring配置文件开启 SpringMVC 注解
<!--配置开启使用springweb中的注解-->
<mvc:annotation-driven></mvc:annotation-driven>
4.创建定义自己的处理器
总结:1.用户发起请求 ip:端口/项目名/类地址/方法地址
所有请求都可以到达DispatcherServlet
2.DispatcherServlet请求分发 核心的SpringWeb底层用的就是一个servlet 接收用户所有的请求,并分发给对应的映射处理器,适配器
3.HandlerMapping 映射处理器,用来解析请求中的地址,有没有对应的处理器类 如果本次请求有对应的拦截器,会执行相应的拦截器
4.HandlerAdapter 处理适配器 封装请求中的参数
5.到达自己创建的处理器,接收参数 处理响应
springweb层的控制器类中如何使用
web 层六字方针: 接收 处理 响应
3.请求中的地址如何定义
@RestController 修饰控制器类
@RequestMapping(path = “/loginCtl”) 可以在类和方法上使用
在类上面使用,整个项目中必须是唯一的 ,不能重复
在方法上定义时,同一个类中地址必须是唯一的
可以使用path/value定义地址
- @RequestMapping(path = “/test”,method = RequestMethod.POST)
method定义那种请求可以访问此方法 - @RequestMapping(path = “/test”) 没有定义请求方式get/post请求都可以访问
- @GetMapping(path = “/test”) get请求
- PostMapping(path = “/test”) post请求
4.如何接收请求中的数据
1.使用request对象接收 req.getparameter()
2.直接在参数列表中定义形参接收,还可以帮我们进行类型转换
3.请求中的键名称与形参名一致 直接接收;否则,通过注解标签进行绑定
5.直接使用对象接收
400 请求的数据类型有问题
lombok 自动生成set get方法
6.post请求中文乱码处理
SpringMVC 中已经为我们提供了这个过滤器,只需要在 web.xml 中配置好即可
<!--配置spring框架中提供的编码过滤器-->
<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>
7.Ajax 返回 JSON
控制中返回结果,由于使用@RestController,里面包含@ResponseBody的注解标签,所以方法返回结果默认是json格式,并将json字符串写入到响应体中。返回一个对象时,必须加入一个转json的第三方组件
<!--
https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind
-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.3</version>
</dependency>
8.跨域问题
加入依赖 配置过滤器
9.拦截器
过滤器是JavaServlet规范中定义的,是当请求进入servlrt之前,可以对请求进行拦截,可以加入到一些逻辑中。
拦截器是和过滤器有区别的,拦截是spring框架中自己定义的功能,和过滤器位置不同
拦截器只拦截进入到自己控制器中的请求,其余的不拦截
拦截器(HandlerInterceptor)
10.总结
springweb
以前请求都是直接找到servlrt --> service -->doget()/gopost()
1.访问后端:定义了一个servlet映射地址,处理很多事情 通过mark传参,通过参数进行区分
2.在servlet中需要接收前端请求的数据,非常麻烦
springweb对后端三层架构中的web层进行封装.
spring是总管家,集成mybatis数据持久层框架,本身对事物进行管理提供web层的封装
提供了一个DispatcherServlet(请求分发控制器)
接收前端发送的所有请求
然后取调用HandlerMapping(映射处理器),解析请求中的地址(@RequestMapping(path=“/loginCtl”))
接着找到后可以经过对应的拦截器
再去通过HandlerApter(适配器,数据封装)找到自己定义的控制器。
在自己的控制器中处理,响应 直接可以响应json格式的数据