ToB企服应用市场:ToB评测及商务社交产业平台

标题: Spring(三)-SpringWeb-概述、特点、搭建、运行流程、组件、接受哀求、获 [打印本页]

作者: 玛卡巴卡的卡巴卡玛    时间: 2024-12-22 17:35
标题: Spring(三)-SpringWeb-概述、特点、搭建、运行流程、组件、接受哀求、获
文章目次
一、SpringWeb概述
二、SpringWeb特点
三、搭建SpringWeb(在web项目中)
1、导包
2、在web.xml文件中设置统一拦截分发器 DispatcherServlet
3、开启 SpringWEB 注解
4、处置惩罚器搭建
四、SpringWeb运行流程
五、SpringWeb组件
1、前端控制器:
2、处置惩罚器映射器:
3、处置惩罚器适配器:
4、处置惩罚器:
六、吸取哀求
1、@RequestMapping注解
2、使用method定义哀求方式
七、获取哀求数据
1、使用 request 对象吸取
2、使用Spring中的自动封装
3、使用@RequestParam("")绑定参数,用于吸取哀求中的数据
4、使用@RequestHeader("")绑定参数,用于吸取哀求头中的数据
5、使用@RequestBody吸取前端提交的json 格式数据并将其封装到实体类对象中
6、使用@DateTimeFormat(pattern = "yyyy-MM-dd")为Date范例属性指定转换格式
八、SpringWeb的优点
九、中文乱码处置惩罚、返回Json处置惩罚、跨域访问处置惩罚
 1、中文乱码处置惩罚
2、 返回Json处置惩罚(将响应对象转为json数据格式)
3、跨域访问处置惩罚
十、SpringWeb中的拦截器
1、定义
2、作用
3、拦截器与过滤器的区别
4、定义拦截器
5、设置拦截器


一、SpringWeb概述

1、SpringWeb是Spring框架中的一个模块,是基于ServletAPI构建的web框架,是Spring为web层开发提供的一套完备的办理方案。
2、在web层框架经历了Strust1,、WebWork、Struct2等诸多产物的历代更迭之后,业界广泛选择SpringWeb作为JavaEE项目web层开发的首选方案。
二、SpringWeb特点

1、SpringWeb是Spring家属的原生产物,与IOC容器等底子办法可以实现无缝对接。
2、基于原生的Servlet,StringWeb提供了一个前端控制器DispatcherServlet,开发职员不再需要额外开发控制器对象。
3、SpringWeb可以自动绑定用户输入,并精确地转换数据范例。
4、StringWeb的使用代码清新简洁
5、StringWeb内部组件化程度高,可插拔式组件即插即用。
6、StringWeb性能卓著,特别符合现代大型、超大型互联网项目标要求。
三、搭建SpringWeb(在web项目中)

1、导包

  1. <!--springweb层-->
  2.         <dependency>
  3.             <groupId>org.springframework</groupId>
  4.             <artifactId>spring-webmvc</artifactId>
  5.             <version>5.2.2.RELEASE</version>
  6.         </dependency>
复制代码
2、在web.xml文件中设置统一拦截分发器 DispatcherServlet

  1. <!--配置统一拦截分发器DispatcherServlet-->
  2.     <servlet>
  3.         <servlet-name>application</servlet-name>
  4.         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  5.         <init-param>
  6.             <param-name>contextConfigLocation</param-name>
  7.             <param-value>classpath:spring.xml</param-value>
  8.         </init-param>
  9.         <load-on-startup>0</load-on-startup>
  10.     </servlet>
  11.     <!-- 请求映射 -->
  12.     <servlet-mapping>
  13.         <servlet-name>application</servlet-name>
  14.         <url-pattern>/</url-pattern><!--可以让所有的请求都被DispatcherServlet拦截,然后对这些请求统一进行分发处理-->
  15.     </servlet-mapping>
复制代码
3、开启 SpringWEB 注解

  1. <!-- 开启spring的web层注解-->
  2.     <mvc:annotation-driven></mvc:annotation-driven>
复制代码
4、处置惩罚器搭建

(1)@RestController注解: 标记在一个类上,标记的类就是一个 SpringWeb控制类。 Spring 设置中指定了自动扫描的 basepackage 后,Spring 会扫描这些包以及子包中的使用了@RestController 标识的类,然后将类加入到 Spring IOC 容器 中,注入依赖。
(2)@RequestMapping注解:是一个用来处置惩罚哀求地址映射的注解,可用于类或方法上。
  1. @RestController
  2. @RequestMapping(path = "/loginCtl")// 使用web层注解,为类定义地址
  3. public class LoginController {
  4.     @RequestMapping(path = "/login")// 使用web层注解,为方法定义地址
  5.     public String login(){
  6.         System.out.println("hello springweb");
  7.         return "success";
  8.     }
  9. }
复制代码
四、SpringWeb运行流程


用户发送一次哀求到后端,先辈入DispatcherServlet统一拦截,再调用HanderMapping解析哀求中的处置惩罚器地址和方法地址,判定地址是否存在,不存在返回404,如果存在,判定该地址是否有对应的拦截器,如果有,进入到拦截器。之后回到DispatcherServlet,再调用HanderAdapter,最终由处置惩罚器适配器调用我们自己的处置惩罚器,如:LoginController。
五、SpringWeb组件

1、前端控制器:

(1)定义:DispatcherServlet,由框架提供,在 web.xml 中设置。
(2)作用:统一处置惩罚哀求和响应,是整个流程控制的中心,由它调用别的组件处置惩罚 用户的哀求。
2、处置惩罚器映射器:

(1)定义:HandlerMapping,由框架提供。
(2)作用:根据哀求的 url 查找 Handler(处置惩罚器/Controller)。
3、处置惩罚器适配器:

(1)定义:HandlerAdapter,由框架提供。
(2)作用:按照特定规则(HandlerAdapter 要求的规则)去执行 Handler。
4、处置惩罚器:

(1)定义:Handler(也称之为 Controller,需要工程师开发)。
(2)注意:编写 Handler 时必须按照HandlerAdapter 的要求去做,这样处置惩罚器适配器才可以去精确执行Handler。
(3)作用:接受用户哀求信息,调用业务方法处置惩罚哀求,也称之为后端控制器。
六、吸取哀求

1、@RequestMapping注解

(1)作用:为处置惩罚器进行地址映射,添加在类大概方法的上方。且如果添加在类的上方,其path属性在整个项目中都不能重复。如果添加在方法的上方,其path属性在整个类中不能重复。
(2)常用属性:

2、使用method定义哀求方式

  1. @RequestMapping(path = "/login",method = RequestMethod.POST)
复制代码
  1. @RequestMapping(value = "/login",method = RequestMethod.GET)
复制代码
七、获取哀求数据

1、使用 request 对象吸取

  1. // method = RequestMethod.POST - 指定允许哪些请求方式可以访问此方法
  2.     @RequestMapping(path = "/login",method = RequestMethod.POST)// 使用web层注解,为方法定义地址
  3.     public String login(HttpServletRequest request){
  4.         System.out.println(request.getParameter("name"));
  5.         System.out.println(request.getParameter("age"));
  6.         System.out.println("hello springweb");
  7.         return "success";
  8.     }
复制代码
2、使用Spring中的自动封装

  1. // method = RequestMethod.POST - 指定允许哪些请求方式可以访问此方法
  2.     @RequestMapping(path = "/login",method = RequestMethod.POST)// 使用web层注解,为方法定义地址
  3.     public String login(String name,Integer age){
  4.         System.out.println(name);
  5.         System.out.println(age);
  6.         System.out.println("hello springweb");
  7.         return "success";
  8.     }
复制代码
  1. // method = RequestMethod.POST - 指定允许哪些请求方式可以访问此方法
  2.     @RequestMapping(value = "/login",method = RequestMethod.GET)// 使用web层注解,为方法定义地址
  3.     public String login(Admin admin){
  4.         Admin admin1 = loginService.login(admin);
  5.         System.out.println(admin1);
  6.         System.out.println("hello springweb");
  7.         return "success";
  8.     }
复制代码
Spring 在对数据进行封装时,必须保证处置惩罚器吸取参数的形参名称和表单的name 属性保持一致,否则会吸取失败! 
3、使用@RequestParam("")绑定参数,用于吸取哀求中的数据

当哀求参数名与形参名不一致时,必须使用@RequestParam注解进行参数绑定,即让@RequestParam 注解的 value 值和表单的 name 保持一致
  1. /*@RequestParam("password") String pwd,@RequestParam(value = "account") String ac 绑定请求中的参数与方法中的形参*/
  2.     @RequestMapping(value = "/login",method = RequestMethod.POST)
  3.     public String login(@RequestParam("password") String pwd,@RequestParam(value = "account") String ac){
  4.         System.out.println(pwd);
  5.         System.out.println(ac);
  6.         return "success";
  7.     }
复制代码
4、使用@RequestHeader("")绑定参数,用于吸取哀求头中的数据

  1. /*@RequestHeader("User-Agent") String userAgent 绑定请求头中的参数与方法中的形参*/
  2.     @RequestMapping(value = "/login",method = RequestMethod.POST)
  3.     public String login(@RequestHeader("User-Agent") String userAgent){
  4.         System.out.println(userAgent);
  5.         return "success";
  6.     }
复制代码
5、使用@RequestBody吸取前端提交的json 格式数据并将其封装到实体类对象中

  1. /*@RequestBody Admin admin 接收前端提交的json格式的数据并将其封装到admin对象中*/
  2. @RequestMapping(value = "/login",method = RequestMethod.POST)
  3. public String login(@RequestBody Admin admin){
  4.     System.out.println(admin);
  5.     return "success";
  6. }
复制代码
 注意:必须导入jar包让后端项目支持json格式数据
  1. <!--jackson-->
  2. <dependency>
  3.         <groupId>com.fasterxml.jackson.core</groupId>
  4.         <artifactId>jackson-databind</artifactId>
  5.         <version>2.14.2</version>
  6. </dependency>
复制代码
6、使用@DateTimeFormat(pattern = "yyyy-MM-dd")为Date范例属性指定转换格式

  1. // 指定从前端接收来的日期格式的json数据的转换
  2.     @DateTimeFormat(pattern = "yyyy-MM-dd")
  3.     private Date birthday;
复制代码
  1. @RequestMapping(value = "/login", method = RequestMethod.POST)
  2.     public String login(@RequestBody Admin admin) {
  3.         Admin admin1 = loginService.login(admin);
  4.         System.out.println(admin1);
  5.         return "success";
  6.     }
复制代码
八、SpringWeb的优点

对web层进行了封装,让我们可以快速搭建自己的后端处置惩罚步伐
比如:LoginController
  1. @RestController // 将此类交给spring管理
  2. @RequestMapping(path = "/loginCtl")// 使用web层注解,为类定义映射地址
  3. public class LoginController {
  4.     @Autowired
  5.     LoginService loginService;// 注入其他对象
  6.     // 为方法定义映射地址,设置该方法允许哪些请求进行访问
  7.     @RequestMapping(value = "/login", method = RequestMethod.POST)
  8.     public String login(@RequestBody Admin admin) {// 可以方便的接收请求中的参数
  9.         Admin admin1 = loginService.login(admin);
  10.         System.out.println(admin1);
  11.         return "success";// 可以直接将返回的对象转换为json字符串
  12.     }
  13. }
复制代码
九、中文乱码处置惩罚、返回Json处置惩罚、跨域访问处置惩罚

 1、中文乱码处置惩罚

目标:前端数据传到后端时不会出现乱码
在web.xml中添加设置,启用SpringWeb提供的过滤器
  1. <!--中文乱码处理-->
  2.     <filter>
  3.         <filter-name>characterEncodingFilter</filter-name>
  4.         <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  5.         <init-param>
  6.             <param-name>encoding</param-name>
  7.             <param-value>UTF-8</param-value>
  8.         </init-param>
  9.     </filter>
  10.     <filter-mapping><filter-name>characterEncodingFilter</filter-name>
  11.         <url-pattern>/*</url-pattern>
  12.     </filter-mapping>
复制代码
2、返回Json处置惩罚(将响应对象转为json数据格式)

目标:将响应对象转为json数据格式
(1)在Springweb中如果想要向前端返回的数据格式为json时,只需要在方法上添加 @ResponseBody 注解即可,而@RestController注解中包含了 @ResponseBody 注解
(2)在项目中必须导入转json组件
  1. <!--jackson-->
  2. <dependency>
  3. <groupId>com.fasterxml.jackson.core</groupId>
  4. <artifactId>jackson-databind</artifactId>
  5. <version>2.13.3</version>
  6. </dependency>
复制代码
3、跨域访问处置惩罚

目标:允许异步访问(一个服务器向另一个服务器发送哀求和吸取响应)
(1)添加依赖
  1. <!--spring中提供的解决跨域问题的过滤器-->
  2.         <dependency>
  3.             <groupId>com.thetransactioncompany</groupId>
  4.             <artifactId>cors-filter</artifactId>
  5.             <version>2.5</version>
  6.         </dependency>
复制代码
(2)在web.xml文件中添加设置
  1. <!--跨域访问处理-->
  2.     <filter>
  3.         <filter-name>CORS</filter-name>
  4.         <filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class>
  5.     </filter>
  6.     <filter-mapping>
  7.         <filter-name>CORS</filter-name>
  8.         <url-pattern>/*</url-pattern>
  9.     </filter-mapping>
复制代码
十、SpringWeb中的拦截器

1、定义

SpringWeb中的拦截器(Interceptor)类似于 Servlet 中的过滤器(Filter)
2、作用

拦截用户哀求并作出相应的处置惩罚
3、拦截器与过滤器的区别

过滤器时servlet规范中定义并实现的,是在进入到servlet之前截获哀求,而拦截器是spring中定义的拦截机制,是在进入到处置惩罚器之前拦截哀求。
4、定义拦截器

  1. // 定义拦截器
  2. public class AdminTokenInterceptor implements HandlerInterceptor {
  3.     @Override
  4.     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
  5.         System.out.println("进入拦截器了");
  6.         // 从请求头中获取token
  7.         String token = request.getHeader("token");
  8.         if (token.equals("123456")) {
  9.             return true;// 请求出了拦截器继续向后执行,进入处理器
  10.         } else {
  11.             response.setContentType("test/html;charset=utf-8");// 防止响应字符串乱码
  12.             // 向前端做出响应
  13.             PrintWriter writer = response.getWriter();
  14.             writer.print("token验证失败");
  15.             return false;// 请求出了拦截器不再向后执行
  16.         }
  17.     }
  18. }
复制代码
5、设置拦截器

  1. <!--配置拦截器-->
  2.     <mvc:interceptors>
  3.         <mvc:interceptor>
  4.             <mvc:mapping path="/**"/><!--允许进入拦截器的请求地址-->
  5.             <mvc:exclude-mapping path="/loginCtl/login"/><!--不允许进入拦截器的请求地址-->
  6.             <bean id="admintoken" class="com.ffyc.ssm.interceptor.AdminTokenInterceptor"></bean><!--拦截器实现类地址-->
  7.         </mvc:interceptor>
  8.     </mvc:interceptors>
复制代码

          



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4