spring中对于servlet API的封装---springWeb

目录

一.springweb概述

二.springweb的特点

三.springweb的运行流程

 四.springweb组件

五.springweb的搭建

1.导包

 2.配置 DispatcherServlet

 3.开启 springweb 注解

 4.处理器的搭建

六.springweb注解

 七.springweb拦截器

1.拦截器概述

 2.拦截器的实现

(1)添加 servelt api 依赖

 (2)拦截器的使用

 (3)注册拦截器

总结


一.springweb概述

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

早期的 ssmspring + struts2(对web层进行的封装) + mybatis 

现在的 ssmspring + springweb + mybatis

二.springweb的特点

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

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

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

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

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

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

三.springweb的运行流程

用户发送出请求到前端控制器 DispatcherServlet。

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

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

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

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

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

 四.springweb组件

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

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

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

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

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

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

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

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

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

五.springweb的搭建

1.导包

首先需要通过 maven pom.xml 文件中导入springweb所需要使用的 .jar 包。

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

 2.配置 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>

 3.开启 springweb 注解

spring.xml 中开启 springweb 注解

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

 4.处理器的搭建

对于web层的类,我们程序员一般都会以--Controller 来命名,这也就是我们自定义的处理器。

eg:

 对于自定义处理器的对象的创建,我们当然还是要将 new 对象的权力交给spring去管理。

所以就需要在类名前面加上: @RestController ,和@Service @Component @Repository用法是一样的。

六.springweb注解

获得请求数据使用的注解:

在springweb中给每个类每个方法都定义了地址,这样就可以精准地找到对应的地址了。当然,每个类对应的地址都是不一样的,并且一个类中的多个方法的地址也是不能相同的,保证精确性。

@RequestMapping( path =" /地址 " ,method = RequestMethod.POST/GET)  使用在类名和方法名前,因为请求的方式有 get 和 post 请求,该注解中还有 method 属性用来区分请求方式。

@GetMapping( path = " /地址 " )  此注解专门用于 GET 请求,用在方法前。

@PostMapping( path =" /地址 " )  此注解专门用于 POST 请求,用在方法前。

在方法中,通常需要接收前端发送到后端的数据,(前后端接收的参数的名字必须一致),如果前后端的参数名字不一致的话,就需要使用 @RequestParam(" 前端参数名 ") ,此注解使用在方法的参数前,如果是要拿到请求头中的数据的话还需要用到 @RequestHeader 。

 当前端通过 json 的形式发送到后端,后端用对象来接收 需要在对象前使用 @RequestBody 注解(接收到数据的前提是导入了 json 的.jar包)

返回 json: 

如果在前端输入的 json 格式的字符串中有日期属性,就需要在模型类中对日期属性的接收格式做出规定,使用 @DataTimeFormat( pattern = " " ),还有一个注解:@JsonFormat( pattern = " " )此注解用于后端向前端做出相应时规定日期的格式,eg:

 七.springweb拦截器

1.拦截器概述

springweb拦截器类似于在servlet中的过滤器 Filter,它主要用于拦截用户请求并做出相关处理。

区别

Spring 中的拦截器与过滤器有着本质的区别,过滤器是 servlet 规范中定义并实现的,在进入servlet 之前截获请求.而拦截器是 spring 中定义的一种拦截机制,是对进入到处理器的请求进行拦截.

 

 2.拦截器的实现

(1)添加 servelt api 依赖

<!--servlet-->

<dependency>

        <groupId>javax.servlet</groupId>

        <artifactId>javax.servlet-api</artifactId>

        <version>4.0.1</version>

        <scope>provided</scope>

</dependency>

 (2)拦截器的使用

 对于拦截器的使用,我们需要定义一个类去实现  HandlerInterceptor 接口,重写接口中 preHandle 方法,此方法返回值是spring规定好的,为 true/false ,所以我们想要向前端做出相应时,就只能使用 response,eg:

 (3)注册拦截器

想要拦截器生效,还需要在 spring.xml 中去注册拦截器:


总结

     同学们,springweb的内容就到此告一段落,本篇博客讲述了spring中对于web层的封装--springweb框架,详细指出springweb的运行流程,其中使用的组件,springweb的搭建以及对springweb中参数接收拦截器的学习内容和小细节,我们认真学习springweb之后,我们就可以将spring框架--springweb--mybatis融汇贯通,串联。

制作不易,希望可以多多三连支持博主,博主会继续努力的!!!

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

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

相关文章

详解:冒泡排序

1.是什么 冒泡排序&#xff08;Bubble Sort&#xff09;是一种简单的排序算法。它重复地遍历要排序的数列&#xff0c;一次比较两个元素&#xff0c;如果它们的顺序错误就把它们交换过来。遍历数列的工作是重复地进行直到没有再需要交换&#xff0c;也就是说该数列已经排序完成…

望繁信科技携流程智能解决方案亮相CNDS 2024新能源产业数智峰会

9月13日&#xff0c;CNDS 2024中国新能源产业数智峰会在北京圆满落幕。本次峰会以“走向数字新能源”为主题&#xff0c;汇聚了来自新能源领域的顶尖领袖、专家学者及知名企业代表&#xff0c;共同探讨数字化技术在新能源行业中的创新应用和发展趋势。上海望繁信科技有限公司&a…

C++ List (带你一篇文章搞定C++中的List类)

感谢大佬的光临各位&#xff0c;希望和大家一起进步&#xff0c;望得到你的三连&#xff0c;互三支持&#xff0c;一起进步 数据结构习题_LaNzikinh篮子的博客-CSDN博客 初阶数据结构_LaNzikinh篮子的博客-CSDN博客 收入专栏&#xff1a;C_LaNzikinh篮子的博客-CSDN博客 其他专…

flask项目初始化

1、初始环境 python3.8 2、flask文档地址&#xff1a;https://flask.palletsprojects.com/en/latest/installation/#install-flask 3、初始化项目 $ mkdir myproject $ cd myproject $ python3 -m venv .venv $ . .venv/bin/activate $ pip install Flask4、打开项目mypr…

Pycharm出现Please specify a different SDK name报错,但是看不到重名环境解决方案

这句话的意思是出现了重名的环境 &#xff0c;一般情况下删除重名的环境即可解决问题。做法如下图所示 1&#xff0c;点击右上角齿轮→settings&#xff08;或者File→settings&#xff09;进入Python Interpreter 2.点击这个沙漏按键&#xff0c;你会发现多了几个环境&#x…

VScode相关问题与解决

VScode只是一个文档编辑器&#xff0c;类似于我们使用的记事本。我们在编辑完文档之后呢一定要保存。 文档编辑器加上它可以安装不同的插件&#xff0c;就可以进行程序开发。 1.写c文件时找不到头文件stdio.h 在linux下我们gcc命令来编译c文件时&#xff0c;会遇到找不到头文…

一文讲懂Mac中的环境变量

你是否曾经因为环境变量配置不当而浪费了宝贵的开发时间?你是否好奇为什么有时候在终端输入命令会提示"command not found",而有时候又能正常运行?如果你是一名Mac用户,并且希望真正掌握环境变量的奥秘,那么这篇文章将为你揭开Mac中环境变量的神秘面纱,帮助你成为一…

Java设计模式—面向对象设计原则(二) --------> 里氏代换原则 LSP (完整详解,附有代码+案列)

文章目录 里氏代换原则3.2.1 概述3.2.2 改进上述代码 里氏代换原则 里氏代换原则&#xff1a;Liskov Substitution Principle&#xff0c;LSP 3.2.1 概述 里氏代换原则是面向对象设计的基本原则之一。 里氏代换原则&#xff1a;任何基类可以出现的地方&#xff0c;子类一定…

html实现好看的多种风格手风琴折叠菜单效果合集(附源码)

文章目录 1.设计来源1.1 风格1 -图文结合手风琴1.2 风格2 - 纯图片手风琴1.3 风格3 - 导航手风琴1.4 风格4 - 双图手风琴1.5 风格5 - 综合手风琴1.6 风格6 - 简描手风琴1.7 风格7 - 功能手风琴1.8 风格8 - 全屏手风琴1.9 风格9 - 全屏灵活手风琴 2.效果和源码2.1 动态效果2.2 源…

FloodFill(洪水灌溉)算法专题——DFS深搜篇

目录 1、图像渲染 1.1 算法原理 1.2 算法代码 2、岛屿数量 2.1 算法原理 2.2 算法代码 3、岛屿的最大面积 3.1 算法原理 3.2 算法代码 4、被围绕的区域 4.1 算法原理 4.2 算法代码 5、太平洋大西洋水流问题 5.1 算法原理 5.2 算法代码 6、扫雷游戏 6.1 算法原理…

React学习day07-ReactRouter-抽象路由模块、路由导航、路由导航传参、嵌套路由、默认二级路由的设置、两种路由模式

14、ReactRouter续 &#xff08;2&#xff09;抽象路由模块 1&#xff09;新建page文件夹&#xff0c;存放组件 组件内容&#xff1a; 2&#xff09;新建router文件夹&#xff0c;在其下创建实例 3&#xff09;实例导入&#xff0c;使用 4&#xff09;效果 &#xff08;3&…

【大数据方案】智慧大数据平台总体建设方案书(word原件)

第1章 总体说明 1.1 建设背景 1.2 建设目标 1.3 项目建设主要内容 1.4 设计原则 第2章 对项目的理解 2.1 现状分析 2.2 业务需求分析 2.3 功能需求分析 第3章 大数据平台建设方案 3.1 大数据平台总体设计 3.2 大数据平台功能设计 3.3 平台应用 第4章 政策标准保障体系 4.1 政策…

Day26_0.1基础学习MATLAB学习小技巧总结(26)——数据插值

利用空闲时间把碎片化的MATLAB知识重新系统的学习一遍&#xff0c;为了在这个过程中加深印象&#xff0c;也为了能够有所足迹&#xff0c;我会把自己的学习总结发在专栏中&#xff0c;以便学习交流。 参考书目&#xff1a; 1、《MATLAB基础教程 (第三版) (薛山)》 2、《MATL…

Java项目——苍穹外卖(二)

Redis 简介 Redis是一个基于内存的key-value结构数据库 基于内存存储&#xff0c;读写性能高适合存储热点数据&#xff08;热点商品、资讯、新闻&#xff09;企业应用广泛 基础操作 启动 在redis安装目录中打开cmd&#xff0c;输入如上图指令即可启动&#xff0c;按下crtl…

【图像匹配】基于SIFT算法的图像匹配,matlab实现

博主简介&#xff1a;matlab图像代码项目合作&#xff08;扣扣&#xff1a;3249726188&#xff09; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 本次案例是基于基于SIFT算法的图像匹配&#xff0c;用matlab实现。 一、案例背景和算法介绍 本…

es的封装

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、类和接口介绍0.封装思想1.es的操作分类 二、创建索引1.成员变量2.构造函数2.添加字段3.发送请求4.创建索引总体代码 三.插入数据四.删除数据五.查询数据 前…

Linux下root用户共享conda环境给其他用户

首先可以先用命令查看环境存储位置 conda env list 比如我的root用户的base环境 # conda environments: # base * /usr/local/miniconda3 在root下先给环境添文件夹加普通用户的权限 chmod -R 755 /usr/local/miniconda3 接下来新建一个用户&#xff0…

Python 课程14-TensorFlow

前言 TensorFlow 是由 Google 开发的一个开源深度学习框架&#xff0c;广泛应用于机器学习和人工智能领域。它具有强大的计算能力&#xff0c;能够运行在 CPU、GPU 甚至 TPU 上&#xff0c;适用于从小型模型到大规模生产系统的各种应用场景。通过 TensorFlow&#xff0c;你可以…

Unity+LeapMotion2的使用

开始吧 导入步骤1.到官网下载软件并安装2.安装插件3.场景中添加检测管理器4.场景中添加手部模型 更多细节 导入步骤 1.到官网下载软件并安装 地址 重启电脑后连接设备 可以看到连接成功 2.安装插件 &#xff08;也可以看官方教程&#xff09; Project—>PackageManag…

从AI应用排行榜选择AI产品(9月)

2024年9月13日&#xff0c;OpenAI公司宣布推出其全新的AI模型&#xff1a;o1&#xff0c;在数学、编程和科学问题的解决处理能力上取得了显著进步。该模型通过自我对弈强化学习&#xff08;Self-play RL&#xff09;和思维链&#xff08;Chain of Thought, CoT&#xff09;技术…