SpringWeb解析

news2024/12/26 11:02:16

目录

运行流程

组件介绍

简单搭建一个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.coloradmin.cn/o/1004501.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

豆瓣图书评分数据的可视化分析

导语 豆瓣是一个提供图书、电影、音乐等文化产品的社区平台&#xff0c;用户可以在上面发表自己的评价和评论&#xff0c;形成一个丰富的文化数据库。本文将介绍如何使用爬虫技术获取豆瓣图书的评分数据&#xff0c;并进行可视化分析&#xff0c;探索不同类型、不同年代、不同…

如何做好医药产品说明书翻译?

近年来&#xff0c;随着世界各国之间的交流日渐紧密&#xff0c;医药产业发达国家的药品和医用器械对于其他国家的输出日益增多&#xff0c;但这些医疗产品在流通过程中&#xff0c;往往需要专业的医药翻译人员进行产品说明书的精确翻译。那么&#xff0c;如何做好医药产品说明…

掌动智能:提升硬件连通性测试效率与精确度

在当今数字化时代&#xff0c;各种智能设备和硬件组件在我们的日常生活和工作中扮演着越来越重要的角色。为确保这些设备正常运行&#xff0c;并实现跨设备的无缝连接&#xff0c;硬件连通性测试变得至关重要。为了提高测试效率与精确度&#xff0c;让我们介绍掌动智能作为一家…

物理层(408)

一、通信基础 【2009】在无噪声的情况下&#xff0c;若某通信链路的带宽为3kHz&#xff0c;采用4个相位&#xff0c;每个相位具有4种振幅的QAM调制技术&#xff0c;则该通信链路的最大数据传输速率是&#xff08;B&#xff09; A、12kb/s B、24kb/s C、48kb/s …

A股风格因子看板 (2023.09 第01期)

该因子看板跟踪A股风格因子&#xff0c;该因子主要解释沪深两市的市场收益、刻画市场风格趋势的系列风格因子&#xff0c;用以分析市场风格切换、组合风格暴 露等。 今日为该因子跟踪第1期&#xff0c;指数组合数据截止日2023-08-31&#xff0c;要点如下 近1年A股风格因子收益走…

《DevOps实践指南》- 读书笔记(五)

DevOps实践指南 Part 4 第二步 &#xff1a;反馈的技术实践14. 建立能发现并解决问题的遥测系统14.1 建设集中式监控架构14.2 建立生产环境的应用程序日志遥测14.3 使用遥测指导问题的解决14.4 将建立生产遥测融入日常工作14.5 建立自助访问的遥测和信息辐射器14.6 发现和填补遥…

元宇宙全球市场规模到2030年将达9805亿美元!

元宇宙是一种新兴的概念&#xff0c;它指的是一个虚拟的世界&#xff0c;由人工智能、虚拟现实、区块链等技术构建而成。元宇宙的起源可以追溯到上世纪90年代的虚拟世界“第二人生”&#xff0c;但直到近年来&#xff0c;随着技术的不断发展&#xff0c;它才逐渐成为了人们关注…

labelme2voc 标签重叠/覆盖问题

使用labelme自带的 labelme2voc.py转换voc数据集时可能标签重叠

C语言实现单链表和双向循环链表

全文目录 链表单链表实现申请节点头插尾插头删尾删任意节点后插入删除单链表的销毁 带头双向循环链表实现链表初始化申请节点头插尾插头删尾删任意节点后插入删除链表的销毁 链表和顺序表对比总结 链表 概念&#xff1a;链表是一种物理存储结构上非连续、非顺序的存储结构&…

GO语言篇之发布开源软件包

GO语言篇之发布开源软件包 文章目录 GO语言篇之发布开源软件包新建仓库拉取到本地初始化项目编写代码提交代码发布引用软件包 我们写GO语言程序的时候难免会引用第三方的软件包&#xff0c;那么你知道别人是怎么发布自己的软件包吗&#xff0c;别急&#xff0c;这篇博客教你怎么…

Apache DolphinScheduler 如何实现自动化打包+单机/集群部署?

Apache DolphinScheduler 是一款开源的分布式任务调度系统&#xff0c;旨在帮助用户实现复杂任务的自动化调度和管理。DolphinScheduler 支持多种任务类型&#xff0c;可以在单机或集群环境下运行。下面将介绍如何实现 DolphinScheduler 的自动化打包和单机/集群部署。 自动化…

【Oracle】数据库导入导出

Oracle数据库导入导出 文章目录 Oracle数据库导入导出一、expdp导出1、管理员身份登录2、删除以前测试的用户及对应的数据3、创建表空间&#xff08;源表--待导出的表&#xff09;4、创建用户&#xff0c;给用户设置默认表空间和临时表空间5、给用户授权&#xff08;创建表和视…

Unity+百度文心大模型驱动AI小姐姐数字人

1.简述 最近看到新闻&#xff0c;说是百度、字节、商汤、百川、智普等几家企业及机构所发布的生成式大语言模型&#xff0c;通过了《生成式人工智能服务管理暂行办法》&#xff0c;成为首批获得官方备案的大语言模型服务提供商。虽然一直在使用包括文心一言、chatglm这些大语言…

怒赞了,阿里P8面试官推荐的Java高并发核心编程文档

前言 学完阿里P8面试官推荐的Java高并发核心编程文档后&#xff0c;终于拿到了蚂蚁p6的offer&#xff0c;这份文档包含的内容有点多。 Java高并发核心编程文档《尼恩Java高并发三部曲》获读者怒赞&#xff01;获取方式见文末 文章目录 前言尼恩Java高并发三部曲卷1&#xff1…

适合引流的运动步数打卡抽奖小程序源码开发

要健康也要瘦&#xff1f;那么有一个可以让你悄悄改变还可以获取奖品的小程序简直不要太入心。用运动步数兑换奖品&#xff0c;每天运动一下&#xff0c;换点小礼品&#xff0c;简直不要太惬意。 运动步数兑换小程序核心亮点&#xff1a; 小程序与微信运动做了关联&#xff…

Android环境配置笔记

文章目录 一、各环境文档二、参考 一、各环境文档 Gradle官方的兼容性文档&#xff1a;Java Compatibility 更新日期&#xff1a;2023.9.12 Android Gradle插件版本&#xff1a;Android Gradle Plugin 二、参考 参考文章&#xff1a;Android问题记录

SS928搭建NNN环境

环境要求&#xff1a;ubuntu18.04 参考文件&#xff1a; 《ATC工具使用指南》《应用开发指南》《驱动和开发环境安装指南》 《昇腾模型压缩工具使用指南&#xff08;ONNX&#xff09;》 交叉编译器的安装-----------------------------------------------------------------…

C语言“牵手”淘宝商品评论数据方法,淘宝商品评论接口,淘宝商品评价接口,淘宝API接口申请指南

淘宝商品评论API是淘宝开放平台为开发者提供的一套应用程序编程接口&#xff0c;通过该接口&#xff0c;开发者可以获取到店铺所有商品的评价数据。 淘宝商品评论API包含以下接口&#xff1a; taobao.item.reviews.get&#xff1a;用于获取指定商品的评价数据&#xff0c;输入…

凯迪正大— 氧化锌避雷器检测仪

一、概述 RBZ-3B氧化锌避雷器直流参数测试仪是专门用于检测10kV及6KV电力系统用无间隙氧化锌避雷器MOA阀电间接触不良的内部缺陷&#xff0c;根据《电力设备预防性试验规程》DL/T596-1996中14.2的规定&#xff0c;发电厂、变电所在每年雷雨季前和必要时应该对金属氧化物避雷器…

基于ssm的商场管理信息系统的设计与实现

基于ssm的商场管理信息系统的设计与实现 前言 这个项目适合初学者熟悉框架的项目系统&#xff0c;前端框架采用layui全新回归版本2.8&#xff0c;界面更加丝滑。需要的记得扣我发源码哦&#xff01; 项目脑图 项目技术 前端技术&#xff1a;layui框架&#xff0c;JavaScrip…