SpringWeb解析

目录

运行流程

组件介绍

简单搭建一个SpringWeb项目

1.导入依赖

2.配置DispatcherServlet

3.开启注解

4.处理器搭建

5.接收请求

获取请求的数据

中文乱码

返回json格式

拦截器

 代码实现


SpringWeb 是 spring 框架中的一个模块,基于 Servlet API 构建的原始 web 框架,在现在前后端分离开发中,多用于SpringWeb,MVC架构已经被慢慢淘汰掉了。

        在 web 层框架历经 Strust1,WebWork,Strust2 等诸多产品的历代更选 之后,目前业界普遍选择了springWeb作为 Java EE 项目 web 层开发的首选方案。以前的ssm(spring struts2 mybatis)和ssh(spring struts2 hibernate),而现在的ssm指的是(spring springweb mybatis)。

运行流程

  1.  用户发出请求到前端的控制器DispatcherServlet
  2. DispatcherServlet收到请求后调用HandlerMapping(处理器映射器)
  3. HandlerMapping找到具体的处理器(查找xml或者注解),生成处理器拦截器(如果有的话),再一起返回给DispatcherServlet
  4. DispatcherServlet再调用HandlerAdapter(处理器适配器)
  5. HandlerAdapter找到具体的适配器(Controller)
  6. Controller完成响应

组件介绍

1. 前端控制器:DispatcherServlet(不需要程序员开发),由框架提供,在 web.xml 中配置。 作用:统一处理请求和响应,整个流程控制的中心,由它调用其它组件处理用户的请求.

2. 处理器映射器:HandlerMapping(不需要程序员开发),由框架提供。作用:根据请求的 url 查找 Handler(处理器/Controller) 处理器适配器:

3. HandlerAdapter(不需要程序员开发),由框架提供。作用:按照特定规则(HandlerAdapter 要求的规则)去执行 Handler。

4.处理器:Handler(也称之为 Controller,需要工程师开发)。 注意:编写 Handler 时按照 HandlerAdapter 的要求去做,这样适配器才可以去正确执行 Handler 

简单搭建一个SpringWeb项目

1.导入依赖

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

2.配置DispatcherServlet

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

3.开启注解

<mvc:annotation-driven></mvc:annotation-driven>

4.处理器搭建

  1. @RestController 用于标记在一个类上,使用它标记的类就是一个 SpringWEB 控制器类,spring在扫描完包后,将该类加入IOC容器中,注入依赖
  2. @RequestMapping 注解是一个用来处理请求地址映射的注解,可用于类或方法上

5.接收请求

@RequestMapping 是一个用来为处理器地址映射的注解,可用于类或方法上. 作用在类上,在整个项目中不能重复,作用在方法上,整个类中不能重复.常用属性有:

path和value来指定路径

method指定请求的方法(post或get)

获取请求的数据

1.使用request对象接收

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

注意到导入相关的servlet依赖

2.spring自动封装

@GetMapping(path = "/test1")
public String login(String account,String password) {return "msg";
}

处理器接收参数的形参名称必须 和表单的 name 属性保持一致,否则会接收失败 

3. 使用@RequestParam("")进行参数绑定,@RequestHeader("")

@GetMapping(path = "/test1")
public String login(String account,@RequestParam(value = "pwd",required = true,defaultValue = "111")String password,@RequestHeader("User-Agent") String UserAgent) {return "msg";}

 required:参数是否必须。代表页面是否必须传递该参数。如果该值为 true,但没有传递参数,会报错。

defaultValue:默认值。代表如果页面没有传递该参数,使用 defaultValue 的值代替

4.使用实体类

@RequestMapping("/save")public void save(Admin admin){
}

5.属性类型为data的要进行格式化

@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date birthday;

中文乱码

在web.xml中进行配置

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

返回json格式

如果向前端返回数据为json时 , 只需要在方法上添加 @ResponseBody 注解即可

由于类中使用了@RestController注解,其中就包含@ResponseBody,所以我们就不用重复添加。但要在项目中导入json依赖

<!--jackson-->
<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.13.3</version>
</dependency>

拦截器

Spring WEB 中的拦截器(Interceptor)类似于 Servlet 中的过滤器(Filter),它主要用于拦截用户请求并作相应的处理。 

两者区别:

过滤器是 servlet 规范中定义并实 现的,在进入到 servlet 之前截获请求

拦截器是 spring 中定义的一种拦截机制, 是对进入到处理器的请求进行拦截

 代码实现

编写一个类,继承 HandlerInterceptorAdapte

public class DemoInterceptor implements HandlerInterceptor{
/* 当请求到达控制器之前被执行
true--继续向下执行,到达下一个拦截器,或控制器
false--不会继续向下执行*/
public boolean preHandle(HttpServletRequest request, HttpServletResponse
response, Object handler)throws Exception {}

 注册拦截器

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

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GO语言篇之CGO

GO语言篇之CGO 文章目录 GO语言篇之CGO前言C代码嵌入GO代码C文件嵌入GO代码缺点 前言 Go语言可以通过内置的CGO调用C语言接口&#xff0c;从而实现C语言代码的交互&#xff0c;CGO提供了一种将Go代码嵌入到C代码中&#xff0c;或者从Go代码中调用C函数的方法 C代码嵌入GO代码…

华为云云耀云服务器L实例评测|基于云服务器的minio部署手册

华为云云耀云服务器L实例评测|基于云服务器的minio部署手册 【软件安装版本】【集群安装&#xff08;是&#xff09;&#xff08;否&#xff09;】 版本 创建人 修改人 创建时间 备注 1.0 jz jz 2023.9.2 minio华为云耀服务器 一. 部署规划与架…

C# WPF 自己写的一个模拟病毒传播的程序,有可视化

源代码: https://github.com/t39q/VirusSpread 主要代码 using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks;namespace VirusSpread.Bu…

JavaScript学习--Day04

元字符 边界符&#xff1a; /^/&#xff1a;以什么开头 /$/&#xff1a;以什么结尾 量词&#xff1a; 预定义类&#xff1a;

IGBT和碳化硅SiC模块,全球市场总体规模,前二十大厂商排名及市场份额

IGBT模块与碳化硅SiC模块全球市场总体规模 2023年全球IGBT模块市场规模大约为67亿美元&#xff0c;预计2029年将达到145亿美元&#xff0c;未来几年年复合增长率CAGR为13.6%。 2023年全球碳化硅SiC模块市场规模大约为16.9亿美元&#xff0c;预计2029年将达到92亿美元&#xff…

浅谈Dead reckoning实现原理以及常用算法

0. 简介 航位推算是一个很常见的定位方法。在知道当前时刻的位置&#xff0c;然后通过imu等传感器去估计下一个时刻的位置。在自动驾驶车辆定位的时候&#xff0c;GPS提供10Hz的定位信息。这每个GPS信息来临的0.1s的间隔里面&#xff0c;车辆位置也会移动很多。那么这个时候就…

仿东郊到家app系统及功能介绍

类似东郊到家app系统开发&#xff0c;预约sap东郊到家软件定制开发&#xff0c;东郊到家小程序APP开发&#xff0c;东郊到家模式系统定制开发 一、东郊到家软件介绍 1、东郊到家app是一家以推拿为主项&#xff0c;个人定制型的o2o平台&#xff0c;东郊到家app平台提供、正规、安…

VR农学虚拟仿真情景实训教学演示

首先&#xff0c;VR农学虚拟仿真情景实训教学提供了更为真实的实践环境。传统的农学实训往往受制于时间、空间和资源的限制&#xff0c;学生只能通过观察或简单的模拟来学习农业知识和技能。而借助虚拟现实技术&#xff0c;学生可以进入虚拟农场&#xff0c;与各种农作物、工具…

docker安装开发常用软件MySQL,Redis,rabbitMQ

Docker安装 docker官网&#xff1a;Docker: Accelerated Container Application Development docker镜像仓库&#xff1a;https://hub.docker.com/search?qnginx 官网的安装教程&#xff1a;Install Docker Engine on CentOS | Docker Docs 安装步骤 1、卸载以前安装的doc…

运维经验记录 在CentOS上挂载Windows共享磁盘

1、需求&#xff1a; 非root用户&#xff08;普通用户&#xff09;能够读写windows共享目录&#xff0c;比如查看文件、创建文件、修改文件、删除文件 # 让普通用户也可以正常读写 uidvalue and gidvalue Set the owner and group of the root of the file system (default: …

Spring与OAuth2:实现第三方认证和授权的最佳实践

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

综合续航达1040公里:腾势计划2024年在香港上市,售价60-100 万

腾势汽车表示&#xff0c;他们计划于2024年在香港地区上市全新的D9车型。这款中大型高端新能源MPV是通过DM-i超级混动技术打造的&#xff0c;由于综合续航能力达到1040公里&#xff0c;且纯电续航最大可达190公里&#xff0c;这款车已经引起了广泛关注。据腾势销售事业部总经理…