Java框架第四课(对Spring的补充Spring web)

2024-09-03 06:36

本文主要是介绍Java框架第四课(对Spring的补充Spring web),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

一.Spring web的认识

(1)Spring Web概念

(2)Spring web的特点

(3)Springweb运行的流程

 (4)Springweb运行的流程图

二.搭建Spring web

三.自定义处理器类搭建

 (1)处理器类配置

 (2)处理器类接受请求

 (3)获得请求数据

 四.拦截器

(1)关于拦截器:

(2)拦截器的实现


一.Spring web的认识

(1)Spring Web概念

SpringWeb 是 spring 框架中的一个模块,基于 Servlet API 构建的 web 框架. springWeb 是 Spring 为 web 层开发提供的一整套完备的解决方案。 在 web 层框架历经 Strust1,WebWork,Strust2 等诸多产品的历代更选之后, 目前业界普遍选择了 springWeb 作为 Java EE 项目 web 层开发的首选方案。(与原生的servlet相比,不需要我们在创建多个servlet程序,Spring web只有一个Servlet)

(2)Spring web的特点

(1)SpringWEB 是 spring 家族原生产品,与 IOC 容器等基础设施无缝对接.
(2) 基于原生的 Servlet,提供了一个前端控制器 DispatcherServlet ,开发者
(3)无须额外开发控制器对象.
(4)可以自动绑定用户输入,并正确地转换数据类型.
(5)代码清新简洁,大幅度提升开发效率.
(6)内部组件化程度高,可插拔式组件即插即用.
(7)性能卓著,尤其适合现代大型、超大型互联网项目要求.

(3)Springweb运行的流程

(1)用户发送出请求到前端控制器 DispatcherServlet。
(2)DispatcherServlet 收到请求调用 HandlerMapping(处理器映射器)。
(3)HandlerMapping 找到具体的处理器(可查找 xml 配置或注解配置),生成处理器对象及处理器拦截器(如果有),再一起返回给 DispatcherServlet。
(4) DispatcherServlet 调用 HandlerAdapter(处理器适配器)。
(5)HandlerAdapter 经过适配调用具体的处理器(Handler/Controller)。
(6)Controller 执行完成向前端响应结果。

 (4)Springweb运行的流程图

 注意Springweb只有一个servlet,每次启动服务器时都会自动创建一个servlet对象,并且我们需要写的只有一个自定义处理器和拦截器,其他的都由Spring 框架帮我们实现。

二.搭建Spring web

第一步:导包,在pom.xml中导入Spring web相关的包。

第二步:在web.xml文件中配置DispatcherServlet。

第三步:开启 springweb 注解。

Spring web相关的jar包

< dependency >
< groupId >org.springframework</ groupId >
< artifactId >spring-webmvc</ artifactId >
< version >5.2.2.RELEASE</ version >
</ dependency >

 在 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:spring.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 >
开启 springweb 注解
< mvc :annotation-driven ></ mvc :annotation-driven >

三.自定义处理器类搭建

 (1)处理器类配置

@RestController 用于标记在一个类上,使用它标记的类就是一个 SpringWEB 控制器类(也就是我们原先在原始的servlet中写的servlet类).

  Spring 配置中指定了自动扫描的 basepackage 后,Spring 会扫描这些包以及子包中的使用了@RestController 标识的类,然后将类加入到 Spring IOC 容器 中,注入依赖。 @RequestMapping 注解是一个用来处理请求地址映射的注解,可用于类或方法上。(用于为该类定义类的地址和该类方法的地址,通过这两个地址就能直接找到方法,不用再用原生的servlet使用mark进行判断)

如图:

 (2)处理器类接受请求

@RequestMapping
@RequestMapping 是一个用来为处理器地址映射的注解,可用于类或方法上. 作用在类上, 在整个项目中不能重复,作用在方法上,整个类中不能重复.
常用属性 path,value,method.
path 和 value 用来定义地址
method 用来定义请求方式
@RequestMapping(value = "/hello",method = RequestMethod.GET)
@RequestMapping(path= "/hello",method = RequestMethod.POST)

 (3)获得请求数据

Spring WEB 支持对多种类型的请求参数进行封装。
1.使用原生的servlet进行请求
//前端和后端交互第一种方式:原生的Httpservlet方式@PostMapping(path = "/login")public String  login(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse){System.out.println(httpServletRequest.getParameter("account"));System.out.println(httpServletRequest.getParameter("password"));System.out.println(httpServletRequest.getRemoteAddr());System.out.println("登录");return "success";}

2.使用参数进行请求

//前端和后端交互第二种方式:通过参数发送//@RequestParam("account")是用来给方法的参数进行起名,防止方法中的参数与客户端的参数名不一致@PostMapping(path = "/login")public String  login(@RequestParam("account") String account1,@RequestParam("password") String password1){System.out.println("登录");return "success";}
Spring 会自定进行数据封装,这里要注意的是,处理器接收参数的形参名称必须 和表单的 name 属性保持一致,否则会接收失败!
当请求参数名与形参名不一致时,可以使用@RequestParam("")进行参数绑 定.
表单的 name 和控制器的形参并不一致,但是@RequestParam 注解的 value 值必须和表单的 name 保持一致

3.使用对象接受请求

    @PostMapping(path = "/login")
//*
//@RequestBody说明前端传过来的对象是Jsong格式的对象public Result login(@RequestBody Admin admin){Admin admin1=  loginservice.login(admin);Result result=new Result(200,"登陆成功",admin1);System.out.println("登录");return result;}

4.需要添加 json 转换组件

当请求过来的数据是json格式的数据时需要进行数据的转换,原生的servlet需要自己进行数据格式的转化,但是Spring web不需要。

原生的servlet数据格式转换:

response.getWriter().write(new ObjectMapper().writeValueAsString(result));
<!--jackson-->
< dependency >
< groupId >com.fasterxml.jackson.core</ groupId >
< artifactId >jackson-databind</ artifactId >
< version >2.13.3</ version >
</ dependency >
5.日期类型转换
属性类型为 Date 类型需要指定转换格式
例如:
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date birthday;

 6.返回 JSON

只需要方法中返回对象即可,框架可以自动将对象转为 json 响应
@RequestMapping(path = "/login",method = RequestMethod.POST)
public Result login(@RequestBody Admin admin){
Result result = new Result(200,"登录成功",admin1);
return result;
}

 四.拦截器
(1)关于拦截器:
Spring WEB 中的拦截器(Interceptor)类似于 Servlet 中的过滤器(Filter),
它主要用于拦截用户请求并作相应的处理。
Spring 中的拦截器与过滤器有着本质的区别,过滤器是 servlet 规范中定义并实 现的,在进入到 servlet 之前截获请求.而拦截器是 spring 中定义的一种拦截机制, 是对进入到处理器的请求进行拦截。(servlet过滤器的范围比Springweb的范围大得多)
SpringWEB 定义了拦截器接口 HandlerInterceptor
调用这个三个方法的时候,其参数的值也是从框架内部传递进来的。
boolean preHandle
预处理方法,实现处理器方法的预处理,就是在处理器方法执行之前这个方法会 被执行,相当于拦截了处理器方法,框架会传递请求和响应对象给该方法,第三 个参数为被拦截的处理器。如果 preHandle 方法返回 true 表示继续流程(如调 用下一个拦截器或处理器方法),返回 false 表示流程中断,不会继续调用其他 的拦截器或处理器方法,此时我们需要通过 response 来产生响应;

拦截器实例如下:

package com.ffyc.ssm.interceptor;import com.fasterxml.jackson.databind.ObjectMapper;
import com.ffyc.ssm.model.Result;
import org.springframework.web.servlet.HandlerInterceptor;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//拦截器处理方法:
/*
请求到达处理器之前进入到拦截器
返回true离开拦截器到达处理器
* */
public class AdminTokeninterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {String adminToken=request.getHeader("adminToken");//获得请求头中的adminToken身份令牌System.out.println(adminToken);if(adminToken.equals("123456"))//判断客户端传来的adminToken身份令牌有没有问题,正确就放行,通过拦截器到达自定义处理器{return true;}else {Result result = new Result(400, "Token验证失败", null);response.getWriter().write(new ObjectMapper().writeValueAsString(result));}return false;}
}
(2)拦截器的实现

(1)添加 servlet api 依赖

(2)编写一个类,继承 HandlerInterceptorAdapter

(3)在xml文件中注册拦截器

<!--servlet依赖-->
< dependency >
< groupId >javax.servlet</ groupId >
< artifactId >javax.servlet-api</ artifactId >
< version >4.0.1</ version >
< scope >provided</ scope >
</ dependency >
编写一个类,继承 HandlerInterceptorAdapter
public class DemoInterceptor implements HandlerInterceptor{
/* 当请求到达控制器之前被执行
true--继续向下执行,到达下一个拦截器,或控制器
false--不会继续向下执行
*/
public boolean preHandle(HttpServletRequest request, HttpServletResponse
response, Object handler)throws Exception {
System.out.println("之前执行");
return false;
}

 

这篇关于Java框架第四课(对Spring的补充Spring web)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


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

相关文章

SpringBoot 中 CommandLineRunner的作用示例详解

《SpringBoot中CommandLineRunner的作用示例详解》SpringBoot提供的一种简单的实现方案就是添加一个model并实现CommandLineRunner接口,实现功能的... 目录1、CommandLineRunnerSpringBoot中CommandLineRunner的作用

Java死锁问题解决方案及示例详解

《Java死锁问题解决方案及示例详解》死锁是指两个或多个线程因争夺资源而相互等待,导致所有线程都无法继续执行的一种状态,本文给大家详细介绍了Java死锁问题解决方案详解及实践样例,需要的朋友可以参考下... 目录1、简述死锁的四个必要条件:2、死锁示例代码3、如何检测死锁?3.1 使用 jstack3.2

Java日期类详解(最新推荐)

《Java日期类详解(最新推荐)》早期版本主要使用java.util.Date、java.util.Calendar等类,Java8及以后引入了新的日期和时间API(JSR310),包含在ja... 目录旧的日期时间API新的日期时间 API(Java 8+)获取时间戳时间计算与其他日期时间类型的转换Dur

java对接海康摄像头的完整步骤记录

《java对接海康摄像头的完整步骤记录》在Java中调用海康威视摄像头通常需要使用海康威视提供的SDK,下面这篇文章主要给大家介绍了关于java对接海康摄像头的完整步骤,文中通过代码介绍的非常详细,需... 目录一、开发环境准备二、实现Java调用设备接口(一)加载动态链接库(二)结构体、接口重定义1.类型

SpringBoot读取ZooKeeper(ZK)属性的方法实现

《SpringBoot读取ZooKeeper(ZK)属性的方法实现》本文主要介绍了SpringBoot读取ZooKeeper(ZK)属性的方法实现,强调使用@ConfigurationProperti... 目录1. 在配置文件中定义 ZK 属性application.propertiesapplicati

Java Multimap实现类与操作的具体示例

《JavaMultimap实现类与操作的具体示例》Multimap出现在Google的Guava库中,它为Java提供了更加灵活的集合操作,:本文主要介绍JavaMultimap实现类与操作的... 目录一、Multimap 概述Multimap 主要特点:二、Multimap 实现类1. ListMult

Java中常见队列举例详解(非线程安全)

《Java中常见队列举例详解(非线程安全)》队列用于模拟队列这种数据结构,队列通常是指先进先出的容器,:本文主要介绍Java中常见队列(非线程安全)的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录一.队列定义 二.常见接口 三.常见实现类3.1 ArrayDeque3.1.1 实现原理3.1.2

SpringBoot整合Apache Flink的详细指南

《SpringBoot整合ApacheFlink的详细指南》这篇文章主要为大家详细介绍了SpringBoot整合ApacheFlink的详细过程,涵盖环境准备,依赖配置,代码实现及运行步骤,感兴趣的... 目录1. 背景与目标2. 环境准备2.1 开发工具2.2 技术版本3. 创建 Spring Boot

springboot加载不到nacos配置中心的配置问题处理

《springboot加载不到nacos配置中心的配置问题处理》:本文主要介绍springboot加载不到nacos配置中心的配置问题处理,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录springboot加载不到nacos配置中心的配置两种可能Spring Boot 版本Nacos

Java反射实现多属性去重与分组功能

《Java反射实现多属性去重与分组功能》在Java开发中,​​List是一种非常常用的数据结构,通常我们会遇到这样的问题:如何处理​​List​​​中的相同字段?无论是去重还是分组,合理的操作可以提高... 目录一、开发环境与基础组件准备1.环境配置:2. 代码结构说明:二、基础反射工具:BeanUtils