2.javaWeb_请求和响应的处理(Request,Response)
2.请求和响应的处理
文章目录
- 2.请求和响应的处理
- 一、动态资源和静态资源
- javax.servlet(包)
- 二、Servlet体系
- 1.简介
- 2.HttpServlet
- 3.Servlet生命周期
- 三、Request对象
- 1.ServletRequest
- 1)ServletRequest主要功能有:
- 2)ServletRequest类的常用方法:
- 2.HttpServletRequest处理请求
- 四、Response对象
- 1.ServletResponse
- 1)常用方法:
- 2.HttpServletResponse处理响应
- 1)常用方法:
一、动态资源和静态资源
-
静态资源:
客户端发送请求到web服务器,web服务器从内存取到相应的文件,返回给客户端,客户端解析并渲染显示出来
-
动态资源:
.jsp、.asp/.aspx、.php请求的资源先提交web服务器>>连接数据库处理,再将内容交给web服务器>>客户端
动态资源需要在服务器端运行,响应给客户端是服务器端代码的运行结果
-
javax.servlet(包)
Servlet相关的接口都放在javax.servlet包中,常用接口有:接口 说明 Servlet 处理请求和发送响应的过程的Java技术 ServletConfig 在初始化的过程中由 Servlet容器使用 ServletContext 定义在Servlet用于获取来自其容器的信息的方法 ServletRequest 向服务器发送的请求信息 ServletResponse 客户端请求的响应 ServletInputStream 用于从客户端读取二进制数据 ServletOutputStream 用于将二进制数据发送到客户端
二、Servlet体系
1.简介
Servlet 是一个用 Java 编写的程序,此程序在服务器上运行以处理客户端请求,处理请求的过程如下:
- 接收客户端(浏览器)请求信息
- 调用业务处理
- 向客户端(浏览器)发送HTTP响应
2.HttpServlet
HttpServlet 类是一个抽象类,用以创建针对HTTP协议的 Servlet接口的实现类,它实现了service方法;
针对客户端不同的消息发送方式,分别调用doGet()、doPost()等方法,因此在继承HttpServlet时只需要覆盖doGet或doPost方法即可
3.Servlet生命周期
| 阶段 | 时机 | 调用的方法(钩子) |
|---|---|---|
| 实例化 | Servlet 容器创建 Servlet 的实例 | 默认构造方法 |
| 初始化 | 第一次向服务器发送请求或者服务器上没有servlet的时候,实例化之后 | init(config) |
| 服务 | 每次向服务器发送请求的时候 | service() |
| 销毁 | 服务停止的时候,项目重新加载的时候 | destroy () |
| 不可用 | 销毁实例并标记为垃圾收集 | 等待GC回收 |
Servlet的生命周期可以归纳为以下几个阶段:
-
装载Servlet:这项操作一般是动态执行的。有些服务器提供了响应的管理功能,可以在启动的时候就装载Servlet并能够初始化特定的Servlet。
只调用一次
当web应用处于运行阶段时,特定的servlet被客户端首次请求访问。
在web.xml文件中为servlet设置了
<load-on-startup>元素<servlet><servlet-name>servlet1</servlet-name><servlet-class>servlet.servlet1</servlet-class><load-on-startup>0</load-on-startup></servlet>在servlet的配置当中,
<load-on-startup>5</load-on-startup>的含义是:标记容器是否在启动的时候就加载这个servlet。当值为0或者大于0时,表示容器在应用启动时就加载这个servlet;
当是一个负数时或者没有指定时,则指示容器在该servlet被选择时才加载。正数的值越小,启动该servlet的优先级越高。
当web应用被重新启动时,web应用中的所有servlet会在特定的时间被重新初始化。
-
创建一个Servlet实例。
-
调用Servlet的init()方法。
-
一个客户端的请求到达服务器。
-
创建一个请求对象。
-
创建一个响应对象。
-
激活Servlet的Service()方法,并传递请求和响应对象。
多次调用执行
在这个阶段servlet可以随时响应客户端的请求。当servlet容器接到访问特定的servlet请求时,servlet容器会创建针对与这个请求的servletRequest和servletResponse对象,然后调用service()方法,并把这两个对象当做参数传递给service()方法。Service()方法通过servletRequest对象获得请求信息,并处理该请求,再通过servletResponse对象生成响应结果。
不管是post还是get方法提交,都会在service中处理,然后,由service来交由相应的doPost或doGet方法处理,如果你重写了service方法,就不会再处理doPost或doGet了,如果重写sevice()方法,可以自己转向doPost()或doGet()方法
当servlet容器把servlet生成的响应结果发送给客户后,servlet容器会销毁servletRequest和sevletResponse对象。
-
Service()方法获得关于请求对象的信息、处理请求、访问其它资源、获得需要的信息。
-
Service()方法使用响应对象的方法,将响应传回服务器,最终到达客户端。
-
对于更多的客户端请求,服务器创建新的请求和响应对象,仍然激活此Servlet的Service()方法,将两个对象作为参数传递给它。
-
当服务器不再需要Servlet或当服务器关闭时,服务器将会调用Servlet的destroy()方法来销毁Servlet。
只执行一次
当Web应用被终止时,servlet容器会先调用web应用中所有的servlet对象的destroy()方法,然后在销毁servlet对象。此外容器还会销毁与servlet对象关联的servletConfig对象。
在destroy()方法的实现中,可以释放servlet所占用的资源。如关闭文件输入输出流,关闭与数据库的连接。

三、Request对象
Request对象封装了客户端对服务器的请求信息
实现javax.servlet.http.HttpServletRequest接口
使用 HTTP 协议处理客户端的请求
1.ServletRequest
ServletRequest接口封装了客户端请求的细节。它与协议无关,并指定一个HTTP的子接口。
1)ServletRequest主要功能有:
- 找出客户端的主机名和IP地址
- 检索请求参数
- 取得和设置属性
- 取得输入、输出流
2)ServletRequest类的常用方法:
- getAttribute(String name): 返回具有指定名称的请求属性,如果不存在则返回null。属性可由Servlet引擎设置或使用
- setAttribute()显式加入。
- getAttributeName(): 返回请求中所有属性名的枚举。如果不存在属性,则返回一个空的枚举。
- getCharacteEncoding(): 返回请求所用的字符编码。
- getInputStream()throws IOException: 返回与请求相关的(二进制)输入流。可以调用getInputStream()或getReader()方法。
- getParameter(String name): 返回指定输入参数,如果不存在,返回null。
- getParameterName(): 返回请求中所有参数名的一个可能为空的枚举。
- getParameterValues(String name): 返回指定输入参数名的取值数组,如果取值不存在则返回null。
2.HttpServletRequest处理请求
HttpServletRequest类型的对象代表的是请求对象,父接口:ServletRequest
所在包为:javax.servlet.http
常用方法
- getParameter: 得到客户端的请求参数信息
- getMethod: 得到客户端的请求方式,返回GET或者POST
- getRequestDispatcher: 得到请求转发器
- setAtrribute(): 给请求范围中设置数据
- getAttribute(): 取出请求范围的数据
四、Response对象
服务器端生成响应并发送给客户端
1.ServletResponse
ServletResponse将一个Servlet生成的结果传送到发出请求的客户端。ServletResponse操作主要是作为输出流及其内容类型和长度的包容器,它由Servlet引擎创建。
1)常用方法:
- getCharacterEncoding(): 返回响应程序使用字符解码的名字。除非显式设置,否则为ISO-8859-1。
- getOutputStream()throws IOException: 返回用于将返回的二进制输出写入客户端的流,此方法和getWrite()方法二者只能调用其一。
- getWriter()throws IOException: 返回用于将返回的文本输出写入客户端的一个字符写入器,此方法和getOutputStream()二者只能调用其一。
- setContentType(String type): 设置内容类型。在HTTPServlet中设置Content-Type头标。
2.HttpServletResponse处理响应
HttpServletResponse类型的对象代表的是响应对象,父接口ServletResponse;
HttpServletResponse代表了对客户端的Http的响应。它提供了表示状态码、状态信息和响应头标的方法,同时还负责对URL中写入一个Web页面的HTTP会话ID进行解码。JSP中的内建对象response是一个HttpServletResponse实例。
所在包为:javax.servlet.http
1)常用方法:
- addCookie(Cookie cookie): 将一个Set-Cookie头标加入到响应。
- setHeader(String name,String value): 设置具有指定名字和取值的一个响应头标。
- encodeRedirectURL(String url): 如果客户端不知道接受cookie,则向URL加入会话ID。第一种形式只对在sendRedirect()中使用的URL进行调用。其它被编码的URL应被传递到encodeURL()中。
- encodeURL(String url): 使用URL和一个SessionID重写这个URL。
- sendRedirect(String location): 把响应发送到另一页面或者Servlet进行处理。
- getWriter(): 该方法取得PrintWriter对象,来输出字符数据。
- getOutputStream(): 该方法获得ServletOutputStream输出流。
- setContentType(): 该方法设置响应的MIME类型。
dRedirect(String location): 把响应发送到另一页面或者Servlet进行处理。 - getWriter(): 该方法取得PrintWriter对象,来输出字符数据。
- getOutputStream(): 该方法获得ServletOutputStream输出流。
- setContentType(): 该方法设置响应的MIME类型。
- setCharacterEncoding(String charset): 设置响应的字符编码类型。
相关文章:
2.javaWeb_请求和响应的处理(Request,Response)
2.请求和响应的处理 文章目录 2.请求和响应的处理一、动态资源和静态资源javax.servlet(包) 二、Servlet体系1.简介2.HttpServlet3.Servlet生命周期 三、Request对象1.ServletRequest1)ServletRequest主要功能有:2)ServletRequest类的常用方法: 2.HttpServletReques…...
用C++、Python、Rust编写的有安全问题的B树
程序猿们都知道,B树(B-tree)是一种平衡的多路查找树,主要用于存储和检索大量数据,常用于数据库和文件系统中。 B树的特性包括: 每个节点可以包含多个关键字(键值)和对应的孩子指针…...
问题:当直齿圆柱齿轮的齿数少于?时,可采用 变位的办法来避免根切。 #学习方法#其他
问题:当直齿圆柱齿轮的齿数少于?时,可采用 变位的办法来避免根切。 参考答案如图所示...
请你谈谈:spring bean的生命周期 - 阶段2:Bean实例化阶段
在Spring框架中,Bean的实例化是Bean生命周期中的一个重要阶段。这个过程包括两个关键的子阶段:Bean实例化前阶段和Bean实例化阶段本身。 BeanFactoryPostProcessor:BeanFactoryPostProcessor是容器启动阶段Spring提供的一个扩展点࿰…...
【开发指南】HTML和JS编写多用户VR应用程序的框架
1.概述 Networked-Aframe 的工作原理是将实体及其组件同步到连接的用户。要连接到房间,您需要将networked-scene组件添加到a-scene元素。对于要同步的实体,请向其添加networked组件。默认情况下,position和rotation组件是同步的,…...
C语言第6天作业 7月17日
删除字符串中的空格字符 从终端输入一个字符串,要求删除字符串中的空格字符。提示:可以新建一个辅助数组 #include <stdio.h> #include <string.h> int main(int argc, const char *argv[]) {char str[100];char str1[100];gets(str);for(in…...
【BES2500x系列 -- RTX5操作系统】深入探索CMSIS-RTOS RTX -- 配置篇 -- flash的使用 --(八)
💌 所属专栏:【BES2500x系列】 😀 作 者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! Ὁ…...
vue视频、图片自动轮播并伴随进度条
废话不多说直接上代 多余没用的部分自己看着删除 <template><div class"showImg"><el-carousel ref"carousel" trigger"hover" :autoplay"false" class"dimControl" :height"${(currenInnerWith*0.37…...
Android Studio环境安装指南
一、安装前注意事项: 安装android studio之前,请先检查下操作系统中的用户名(C盘->用户或user)下是否含有中文,如果含有中文,请新建一个用户(必须全部英文),JDK的安装和配置也请重新安装和配…...
CentOS 7 初始化环境配置详细
推荐使用xshell远程连接,如链接不上 请查看 CentOS 7 网络配置 修改主机名 hostname hostnamectl set-hostname xxx bash 关闭 SElinux 重启之后生效 配置yum源(阿里) 先备份CentOS-Base.repo,然后再下载 mv /etc/yum.repos…...
数据结构(双向链表)
链表的分类 链表的结构⾮常多样,以下情况组合起来就有8种(2 x 2 x 2)链表结构: 虽然有这么多的链表的结构,但是我们实际中最常⽤还是两种结构:单链表和双向带头循环链表 1.⽆头单向⾮循环链表:…...
关于Kafka的17个问题
1.Kafka 的设计时什么样的呢? Kafka 将消息以 topic 为单位进行归纳 将向 Kafka topic 发布消息的程序成为 producers. 将预订 topics 并消费消息的程序成为 consumer. Kafka 以集群的方式运行,可以由一个或多个服务组成,每个服务叫做一个…...
Redis 散列
1. 数据结构 我们自底向上来描述redis散列涉及的数据结构。 首先是负责存储键值的结构,Java 中存储的结构叫 Entry,redis里也差不多,叫dictEntry: typedef struct dictEntry {void *key; // 键,它是一个指针类型…...
ip地址错误无法上网怎么修复
在数字化日益普及的今天,网络已经成为我们生活中不可或缺的一部分。然而,当遇到IP地址错误导致无法上网的问题时,很多人可能会感到手足无措。那么,IP地址错误无法上网怎么修复?下面跟着虎观代理小二一起来了解一下吧。…...
数据库管理的艺术(MySQL):DDL、DML、DQL、DCL及TPL的实战应用(上:数据定义与控制)
文章目录 DDL数据定义语言1、创建数据库2、创建表3、修改表结构4、删除5、数据类型 列的约束主键约束(primary key)唯一约束(unique key)非空约束检查约束(check)外键约束(foreign keyÿ…...
成为CMake砖家(5): VSCode CMake Tools 插件基本使用
大家好,我是白鱼。 之前提到过,白鱼的主力 编辑器/IDE 是 VSCode, 也提到过使用 CMake Language Support 搭配 dotnet 执行 CMakeLists.txt 语法高亮。 对于阅读 CMakeLists.txt 脚本, 这足够了。 而在 C/C 开发过程中ÿ…...
【简洁明了】调节大模型的prompt的方法【带案例】
简明调节大模型的prompt的方法【简洁明了带案例】 1. 明确任务目标2. 提供上下文3. 指定格式4. 限制输出长度5. 使用示例6. 逐步引导7. 提供反面例子8. 使用CoT思维链9. 反复试验和调整方法九解释:乔哈里窗检视 最后 因为网上给出的调节prompt都 过于详细ÿ…...
【操作系统】文件管理——文件存储空间管理(个人笔记)
学习日期:2024.7.17 内容摘要:文件存储空间管理、文件的基本操作 在上一章中,我们学习了文件物理结构的管理,重点学习了操作系统是如何实现逻辑结构到物理结构的映射,这显然是针对已经存储了文件的磁盘块的࿰…...
微软GraphRAG +本地模型+Gradio 简单测试笔记
安装 pip install graphragmkdir -p ./ragtest/input#将文档拷贝至 ./ragtest/input/ 下python -m graphrag.index --init --root ./ragtest修改settings.yaml encoding_model: cl100k_base skip_workflows: [] llm:api_key: ${GRAPHRAG_API_KEY}type: openai_chat # or azu…...
数学建模-Topsis(优劣解距离法)
介绍 TOPSIS法(Technique for Order Preference by Similarity to Ideal Solution) 可翻译为逼近理想解排序法,国内常简称为优劣解距离法 TOPSIS 法是一种常用的综合评价方法,其能充分利用原始数据的信息, 其结果能精…...
第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
应用升级/灾备测试时使用guarantee 闪回点迅速回退
1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...
Admin.Net中的消息通信SignalR解释
定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...
unix/linux,sudo,其发展历程详细时间线、由来、历史背景
sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...
微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...
mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...
C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。
1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...
C++:多态机制详解
目录 一. 多态的概念 1.静态多态(编译时多态) 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1).协变 2).析构函数的重写 5.override 和 final关键字 1&#…...
