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

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融汇贯通,串联。

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 计算机前沿技术-人工智能算法-大语言模型-最新论文阅读-2024-09-18
  • 行人动作行为识别系统源码分享
  • 自定义类型
  • Flink加载维度数据
  • JBoss EJBInvokerServlet CVE-2013-4810 反序列化漏洞
  • Android——内部/外部存储
  • Fyne ( go跨平台GUI )中文文档-容器和布局 (四)
  • 操作系统笔记三
  • C++笔记---set和map
  • ElasticSearch数据类型和分词器
  • (十五)、把自己的镜像推送到 DockerHub
  • python中网络爬虫框架
  • 机械快门,电子快门,电子前帘快门 的原理
  • SPECFEM手册的一些翻译(Chapter 4)
  • Qt 状态机编程,双层状态机,实现暂停恢复
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • 77. Combinations
  • Apache的基本使用
  • ES6核心特性
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • JavaScript设计模式之工厂模式
  • Java基本数据类型之Number
  • Java-详解HashMap
  • js继承的实现方法
  • js数组之filter
  • MySQL QA
  • php面试题 汇集2
  • Solarized Scheme
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • Spring核心 Bean的高级装配
  • 阿里云容器服务区块链解决方案全新升级 支持Hyperledger Fabric v1.1
  • 分类模型——Logistics Regression
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 理解在java “”i=i++;”所发生的事情
  • 如何编写一个可升级的智能合约
  • 数组的操作
  • 小程序开发之路(一)
  • 中国人寿如何基于容器搭建金融PaaS云平台
  • No resource identifier found for attribute,RxJava之zip操作符
  • 白色的风信子
  • ​LeetCode解法汇总518. 零钱兑换 II
  • ​学习一下,什么是预包装食品?​
  • ​云纳万物 · 数皆有言|2021 七牛云战略发布会启幕,邀您赴约
  • ## 1.3.Git命令
  • #Java第九次作业--输入输出流和文件操作
  • $LayoutParams cannot be cast to android.widget.RelativeLayout$LayoutParams
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (ZT)薛涌:谈贫说富
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (三分钟了解debug)SLAM研究方向-Debug总结
  • (三十五)大数据实战——Superset可视化平台搭建
  • (十)Flink Table API 和 SQL 基本概念
  • (四)stm32之通信协议
  • (五)c52学习之旅-静态数码管