当前位置: 首页 > news >正文

SpringWeb

SpringWeb

SpringWeb 概述

SpringWeb 是 spring 框架中的一个模块,基于 Servlet API 构建的 web 框架.
springWeb 是 Spring 为 web 层开发提供的一整套完备的解决方案。
在 web 层框架历经 Strust1,WebWork,Strust2 等诸多产品的历代更选之后,
目前业界普遍选择了 springWeb 作为 Java EE 项目 web 层开发的首选方案

SpringWeb特点

1.SpringWeb是spring家族原生产品,与IOC容器等基础设施无缝对接

2.基于原生的Servlet,提供了一个前端控制器DispatcherServlet,开发者无须额外开发控制器对象

3.可以自动绑定用户输入,并正确地转换数据类型

4.代码清新简洁,大幅度提升开发效率

5.内部组件化程度高,可插拔式组件即插即用

6.性能卓著,尤其适合现代大型、超大型互联网项目要求

SpringWeb运行流程

1.用户发送请求到前段控制器DispatcherServlet

2.DispatcherServlet收到请求调用HandlerMapping(处理器映射器)

3.HandlerMapping找到具体的处理器(可查找xml配置或注解配置),生成处理器对象及处理器拦截器(如果有的话),再一起返回给DispatcherServlet

4.DispatcherServlet调用HandlerAdapter(处理器适配器)

5.HandlerAdapter经过适配调用具体的处理器(Handler/Controller)

6.Controller执行完成向前端响应结果

SpringWeb组件

前端控制器:DispatcherServlet(不需要程序员开发),由框架提供,在web.xml中配置

作用:统一处理请求和响应,整个流程控制的中心,由它调用其它组件处理用户的请求

处理器映射器:HandlerMapping(不需要程序员开发),由框架提供

作用:根据请求的url查找Handler(处理器/Controller)

处理器适配器:HandlerAdapter(不需要程序员开发),由框架提供

作用:按照特定规则(HandlerAdapter要求的规则)去执行Handler

处理器:Handler(也称之为Controller,需要工程师开发)

注意编写Handler时按照HandlerAdapter的要求去做,这样适配器才可以正确执行Handler

作用:接受用户请求信息,调用业务方法处理请求,也称为后端控制器

搭建SpringWeb

导包

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

配置DispatcherServlet

在web.xml文件中配置DispatcherServlet

配置spring核心请求分发器

<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>

处理器搭建

@RestController 用于标记在一个类上,使用它标记的类就是一个 SpringWEB控制器类.
Spring 配置中指定了自动扫描的 basepackage 后,Spring 会扫描这些包以及 子包中的使用了@RestController 标识的类,然后将类加入到 Spring IOC 容器中,注入依赖。
@RequestMapping 注解是一个用来处理请求地址映射的注解,可用于类或方
法上。

接收请求

@RequestMapping

@RequestMapping是一个用来为处理器地址映射的注解,可用于类和方法上

作用在类上,在整个项目中不能重复,作用在方法上,整个类中不能重复

常用属性 path,value,method

path和value用来定义地址

method用来定义请求方式

@RequestMapping(vlaue="/world",method=RequestMethod.GET)

@RequestMapping(path="/world",method=RequestMethod.PUT)

获取请求数据

SpringWeb支持对多种类型的请求参数进行封装

1.使用request对象接收

@GetMapping(path = "/test")
public voidtset(HttpServletRequest request){
System.out.println(request.getParameter("num"));
}

2.spring自动封装

@RequestMapping("/save")
public void save(String userName,Integer age){
}
Spring 会自定进行数据封装,这里要注意的是,处理器接收参数的形参名称必须
和表单的 name 属性保持一致,否则会接收失败!(可以使用注解解决)

3.当请求参数名与形参名不一致时,可以使用@RequestParam("")进行参数绑

@RequestMapping("/save")
public voidsave(@RequestParam("userName") String name,
@RequestParam("userAge") Integer age){
}
表单的 name 和控制器的形参并不一致,但是@RequestParam 注解的 value值必须和表单的 name 保持一致。
@RequestMapping("/save")
public void save(@RequestParam(value = "userName") String name){
}
@RequestHeader("")用来接收请求中的数据.
@RequestHeader("user-agent") 可以用来接收请求头中的数据
4.使用实体类对象接收
@RequestBody可以接收前端提交的json格式封装到对象中
@RequestMapping("/save")
public void save(@RequestBody Admin admin){
}
需要添加 json 转换组件
<!--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

返回JSON

只需要方法中返回对象即可,框架可以自动将对象转为json格式响应

@RequestMapping(path = "/login",method = RequestMethod.POST)
public Result login(@RequestBody Admin admin){
Result result = new Result(200,"登录成功",admin1);
return result;
}

拦截器

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

拦截器实现

添加servlet api的maven依赖

<!--servlet-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>

注册拦截器

<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<mvc:exclude-mapping path="/loginCtl/checklogin"/>
<bean id="demo" class="com.ffyc.ssm.util.DemoInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>

http://www.lryc.cn/news/470526.html

相关文章:

  • 嵌入式刷题(day21)
  • OpenAI 下一代旗舰模型现身?奥尔特曼亲自辟谣“猎户座“传闻
  • 【C++】STL初识
  • 框架篇补充(东西多 需要重新看网课)
  • 合约门合同全生命周期管理系统:企业合同管理的数字化转型之道
  • 等保测评与风险管理:识别、评估和缓解潜在的安全威胁
  • Golang Agent 可观测性的全面升级与新特性介绍
  • SpringBoot的开篇 特点 初始化 ioc 配置文件
  • docker 可用镜像服务地址(2024.10.25亲测可用)
  • 【SQL实验】表的更新和简单查询
  • 【C++】 string的了解及使用
  • 【K8S】kubernetes-dashboard.yaml
  • 远程root用户访问服务器中的MySQL8
  • 解释一下 Java 中的静态变量(Static Variable)和静态方法(Static Method)?
  • 【Linux】————磁盘与文件系统
  • 平衡控制——直立环——速度环
  • 面试简要介绍hashMap
  • HTTPS如何实现加密以及SSL/TSL加密的详细过程
  • Golang | Leetcode Golang题解之第516题最长回文子序列
  • (done) 什么 RPC 协议? remote procedure call 远程调用协议
  • PCL 基于Ransac提取误匹配点对
  • 光速写作 2.0.5 | 专注AI写作,海量素材库
  • 【已解决,含泪总结】非root权限在服务器上配置python和torch环境,代码最终成功训练(一)
  • 公安基础知识-通哥
  • Python画图|极坐标下的散点图动态输出
  • 揭开MySQL并发中的“死锁”之谜:从原理到解决方案的深度解析
  • 【论文阅读】Reliable, Adaptable, and Attributable Language Models with Retrieval
  • A-Frame负责人Diego Marcos分享WebXR与开源AI的未来
  • 【STM32-HAL库】火焰传感器(STM32F407ZGT6)(附带工程下载链接)
  • git merge没有生成合并提交