Servlet的response对象
目录
HTTP响应报文协议
reponse继承体系
reponse的方法
响应行
public void setStatus(int sc)
响应头
public void setHeader(String name, String value)
响应体
public java.io.PrintWriter getWriter()
public ServletOutputStream getOutputStream()
请求重定向
请求转发
public RequestDispatchergetRequestDispatcher(String path)
void forward(ServletRequest var1, ServletResponse var2)
HTTP响应报文协议
前端页面
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Title</title> </head> <body><h2>GET请求</h2><form action="/reGetServlet" method="get"><input type="text" name="username"/> <br><input type="text" name="password"/> <br><input type="submit" value="提交"> <br></form><h2>POST请求</h2><form action="/postServlet" method="post"><input type="text" name="username"/> <br><input type="text" name="password"/> <br><input type="submit" value="提交"> <br></form> </body> </html>
servlet
import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.annotation.*; import java.io.IOException;@WebServlet("/reGetServlet") public class ReGetServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.getWriter().println("response...");}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);} }
浏览器
响应行
响应头
响应体
总结
响应报文协议:服务器发给浏览器的数据遵守的规范
响应报文协议包括:
1.响应行
2.响应头
3.响应体
响应行:
1.响应状态码 200 404 500 405 302 3042.响应协议/版本 http/1.1
响应头:
服务器时间响应数据的字符个数
响应体:
服务器响应给浏览器的数据如果浏览器请求的是静态资源页面,那么tomcat服务器就会响应给浏览器静态资源
reponse继承体系

因为ServletReponse和HttpServletReponse都是接口,不能创建出对象,所以tomcat会在底层创建ReponseFacade门面类对象-->ServletReponse reponse=new ReponseFacade();
然后将响应对象传递给service的doGet() doPost()方法。
reponse的方法
响应行
public void setStatus(int sc)
设置此响应的状态代码。此方法用于设置没有错误时的返回状态代码
响应头
public void setHeader(String name, String value)
用给定名称和值设置响应头。如果已经设置了头,则新值将重写以前的值。
containsHeader方法可用于测试在设置其值之前头是否存在。
name 头的名称 value 头值,如果该值包含八位字节字符串,则应该根据 RFC 2047 (http://www.ietf.org/rfc/rfc2047.txt) 对其进行编码 See also containsHeader, addHeader
响应体
对于响应体,是通过字符,字节输出流的方式往浏览器写
public java.io.PrintWriter getWriter()
获取字符输出流
返回可将字符文本发送到客户端的
PrintWriter对象。
public ServletOutputStream getOutputStream()
获取字节输出流
此方法的默认行为是返回对包装的响应对象调用 getOutputStream() 的结果。
请求重定向
重定向:属于服务器外部跳转的行为。当服务器某个资源没有处理业务的能力,会将新的服务器地址告知浏览器(location),并设置状态码304。浏览器会拿着新的地址再次向服务器发送请求
response.setStatus(302);
response.setHeader("location","资源B的访问路径")
特点
1. 服务器外部跳转2.两次请求和响应
3.地址栏发生改变,记录最后一次的地址
4.不能共享request域对象
测试
@WebServlet("/reponseDemo1") public class reponseDemo1 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {System.out.println("我无法处理");/* response.setStatus(302);//设置状态码response.setHeader("location","/reponseDemo2");//告知资源B的地址*///简写response.sendRedirect("/reponseDemo2");}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);B} }@WebServlet("/reponseDemo2") public class reponseDemo2 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {System.out.println("我可以处理");//响应数据给浏览器response.getWriter().println("success...");}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);} }浏览器:最后的地址的responseDemo2
请求转发
使用
public RequestDispatchergetRequestDispatcher(String path)
path:要跳转服务器的路径
void forward(ServletRequest var1, ServletResponse var2)
特点
1. 服务器内部跳转2.一次请求和响应
3.地址栏没有改变
4.共享request域对象
测试
@WebServlet("/responseDemo3") public class responseDemo3 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//请求转发System.out.println("responseDemo3...");//向request域对象存储数据request.setAttribute("msg","我无法解析");//获取转发器RequestDispatcher requestDispatcher = request.getRequestDispatcher("/responseDemo4");requestDispatcher.forward(request,response);//转发}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);} }@WebServlet("/responseDemo4") public class responseDemo4 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {System.out.println("responseDemo4...");//获取request域对象的数据Object msg = request.getAttribute("msg");System.out.println(msg);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);} }浏览器页面:地址没有变
相关文章:
Servlet的response对象
目录 HTTP响应报文协议 reponse继承体系 reponse的方法 响应行 public void setStatus(int sc) 响应头 public void setHeader(String name, String value) 响应体 public java.io.PrintWriter getWriter() public ServletOutputStream getOutputStream() 请求重定…...
Unity射击游戏开发教程:(20)增加护盾强度
在本文中,我们将增强护盾,使其在受到超过 1 次攻击后才会被禁用。 Player 脚本具有 Shield PowerUp 方法,我们需要调整盾牌在被摧毁之前可以承受的数量,因此我们将声明一个 int 变量来设置盾牌可以承受的击中数量。...
初识C语言——第二十八天
代码练习1: 用函数的方式实现9*9乘法表 void print_table(int n) {int i 0;int j 0;for (i 1; i< n; i){for (j 1; j< i; j){printf("%d*%d%-3d ", i, j, i * j);}printf("\n");}}int main() {int n 0;scanf("%d", &a…...
Android NDK系列(三)输入事件分发到Native层的流程
在Android NDK系列(一)手动搭建Native Project 创建的Native工程中,是可以接收输入事件的,只需在android_main中注册输入事件的处理函数,当触摸屏幕后,handleInputEvent函数便会调用,代码如下。 static int32_t handleInputEvent(struct android_app* app, AInputEvent…...
Kafka之【生产消息】
消息(Record) 在kafka中传递的数据我们称之为消息(message)或记录(record),所以Kafka发送数据前,需要将待发送的数据封装为指定的数据模型: 相关属性必须在构建数据模型时指定,其中…...
asp.net core接入prometheus
安装prometheus和Grafana 参考之前的文章->安装prometheus和Grafana教程 源代码 dotnet源代码 新建.net core7 web项目 修改Program.cs using Prometheus;namespace PrometheusStu01;public class Program {public static void Main(string[] args){var builder We…...
C++ 变量类型与转换
C 变量类型与转换 文章目录 C 变量类型与转换变量int_tsize_t与ssize_tpid_ttime_t typenametypeid关键字类型转换编译期类型转换std::static_cast注意事项运行时类型转换std::dynamic_cast 变量 int_t 它是通过typedef定义的,而不是一种新的数据类型。 - int8_t…...
【杂七杂八】Huawei Gt runner手表系统降级
文章目录 Step1:下载安装修改版华为运动与健康Step2:在APP里进行配置Step3:更新固件(时间会很长) 目前在使用用鸿蒙4 111版本的手表系统,但是感觉睡眠检测和运动心率检测一言难尽,于是想到是否能回退到以前的版本&…...
FMEA做不出来的原因究竟是什么?——FMEA软件
免费试用FMEA软件-免费版-SunFMEA FMEA(Failure Mode and Effects Analysis)即故障模式与影响分析,是一种旨在识别并预防潜在问题的方法。然而,尽管其重要性被广泛认知,但在实际应用中,却常常遇到FMEA难以…...
pandas ExcelWriter写excel报错openpyxl.utils.exceptions.IllegalCharacterError
一直使用pandas写excel,本次写的数据有大字段,每次写到该字段就报错,代码如下: with pd.ExcelWriter(r".\提数_20240523\tq_type3_doc.xlsx", engineopenpyxl) as writer: df.to_excel(writer,indexFalse, sheet_namesh…...
Golang创建文件夹
方法 package zdpgo_fileimport ("os" )// AddDir 创建文件夹 func AddDir(dir string) error {if !IsExist(dir) {return os.MkdirAll(dir, os.ModePerm)}return nil }测试 package zdpgo_fileimport "testing"func TestAddDir(t *testing.T) {data : […...
头歌OpenGauss数据库-I.复杂查询第5关:至少学了某位学生(Oliver)所学的全部课程的学生
本关任务:根据提供的表和数据,查询至少学了Oliver同学所学的全部课程的其他同学的信息(学号s_id,姓名`s_name)。 student表数据: s_ids_names_sex01Mia女02Riley男03Aria女04Lucas女05Oliver男06Caden男07Lily女08Jacob男course表数据: c_idc_namet_id01Chinese0202Math…...
【数据结构】哈夫曼树和哈夫曼编码
一、哈夫曼树 1.1 哈夫曼树的概念 给定一个序列,将序列中的所有元素作为叶子节点构建一棵二叉树,并使这棵树的带权路径长度最小,那么我们就得到了一棵哈夫曼树(又称最优二叉树) 接下来是名词解释: 权&a…...
深入探索微软Edge:领略新一代浏览器的无限可能
深入探索微软Edge:领略新一代浏览器的无限可能 在当今数字化时代,网络浏览器已经成为我们日常生活中不可或缺的一部分。而随着技术的不断进步,浏览器的功能和性能也在不断提升。微软Edge作为微软推出的全新一代浏览器,引领着浏览…...
JavaScript表达式和运算符
表达式 表达式一般由常量、变量、运算符、子表达式构成。最简单的表达式可以是一个简单的值。常量或变量。例:var a10 运算符 运算符一般用符号来表示,也有些使用关键字表示。运算符由3中类型 1.一元运算符:一个运算符能够结合一个操作数&…...
爬虫实训案例:中国大学排名
近一个月左右的时间学习爬虫,在用所积累的知识爬取了《中国大学排名》这个网站,爬取的内容虽然只是可见的文本,但对于初学者来说是一个很好的练习。在爬取的过程中,通过请求数据、解析内容、提取文本、存储数据等几个重要的内容入…...
C++ IO流
C标准IO流 使用cout进行标准输出,即数据从内存流向控制台(显示器)使用cin进行标准输入,即数据通过键盘输入到程序中使用cerr进行标准错误的输出使用clog进行日志的输出 C文件IO流 文件流对象 ofstream:只写 ofstream 是 C 中用于输出文件…...
debian nginx upsync consul 实现动态负载
1. consul 安装 wget -O- https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg echo "deb [signed-by/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_r…...
前端基础入门三大核心之HTML篇 —— 同源策略的深度解析与安全实践
前端基础入门三大核心之HTML篇 —— 同源策略的深度解析与安全实践 一、同源策略:定义与起源1.1 定义浅析1.2 何为“源”?1.3 起源与意义 二、同源策略的运作机制2.1 限制范围2.2 安全边界 三、跨越同源的挑战与对策3.1 JSONP3.2 CORS3.3 postMessage 四…...
go 微服务框架 kratos 日志库使用方法及原理探究
一、Kratos 日志设计理念 kratos 日志库相关的官方文档:日志 | Kratos Kratos的日志库主要有如下特性: Logger用于对接各种日志库或日志平台,可以用现成的或者自己实现Helper是在您的项目代码中实际需要调用的,用于在业务代码里…...
GTE多任务NLP引擎部署教程:离线环境下的安装、配置与测试
GTE多任务NLP引擎部署教程:离线环境下的安装、配置与测试 1. 环境准备与快速部署 1.1 系统要求与依赖检查 在开始部署前,请确保您的离线服务器满足以下最低要求: 操作系统:Ubuntu 20.04/22.04 或 CentOS 7/8(推荐&…...
数字人形象哪里找?lite-avatar形象库150+角色免费使用体验
数字人形象哪里找?lite-avatar形象库150角色免费使用体验 1. 数字人形象获取的痛点与解决方案 在开发数字人应用时,寻找合适的数字人形象往往是第一个拦路虎。传统方式需要自己收集数据、训练模型,这个过程既耗时又耗力,对很多开…...
FireRedASR Pro优化指南:如何提升长音频识别效率
FireRedASR Pro优化指南:如何提升长音频识别效率 1. 长音频识别的核心挑战 语音识别系统在处理长音频时面临几个关键瓶颈问题: 内存压力:随着音频时长增加,需要缓存的中间状态呈指数级增长计算复杂度:注意力机制的时…...
十分钟微调Qwen2.5-7B实战:效果立现,适合新手的完整教程
十分钟微调Qwen2.5-7B实战:效果立现,适合新手的完整教程 1. 准备工作与环境介绍 1.1 为什么选择Qwen2.5-7B进行微调 Qwen2.5-7B是阿里云推出的开源大语言模型,7B参数规模在单卡上就能流畅运行。相比全量微调,使用LoRA技术可以在…...
基于U-Net的肺部CT结节检测系统设计与实现
摘要:肺癌是当前威胁人类健康的重要疾病之一,肺结节作为肺癌早期筛查和诊断的重要影像学表现,其准确检测具有重要意义。CT影像因具有较高的空间分辨率,被广泛应用于肺部疾病检查。然而,传统人工阅片方式存在工作量大、…...
OpenClaw版本升级:Qwen3-4B兼容性测试与迁移方案
OpenClaw版本升级:Qwen3-4B兼容性测试与迁移方案 1. 升级前的准备工作 上周五晚上,当我准备给团队演示OpenClaw的自动化流程时,突然发现控制台弹出了版本更新提示。这个看似简单的升级通知,却让我经历了整整两天的兼容性调试。今…...
别再死记硬背分度表了!用Python+Arduino动手复现K型热电偶测温全过程
别再死记硬背分度表了!用PythonArduino动手复现K型热电偶测温全过程 温度测量是工程实践中最基础却又最关键的环节之一。想象一下,当你需要监控3D打印机热床温度、测量自制咖啡烘焙机的内部环境,或是记录太阳能热水器的水温变化时,…...
OpenClaw飞书机器人集成:千问3.5-9B对话触发详解
OpenClaw飞书机器人集成:千问3.5-9B对话触发详解 1. 为什么选择飞书OpenClaw的私有化方案 去年团队内部开始尝试用AI助手处理日常事务时,我们面临一个典型困境:公有云机器人虽然开箱即用,但所有对话记录和文件都要经过第三方服务…...
【独家首发】CPython内存管理策略白皮书(基于v3.9–v3.13源码比对):37处关键宏定义、12个GC阈值参数、8类对象内存布局差异
第一章:CPython内存管理策略全景概览CPython 作为 Python 官方解释器,其内存管理机制融合了引用计数、循环垃圾回收(GC)与分代回收策略,形成一套兼顾实时性与鲁棒性的综合体系。理解该机制对诊断内存泄漏、优化对象生命…...
Goldfish4Tech空气泵驱动库:嵌入式直流泵安全控制方案
1. Goldfish4Tech空气泵驱动库技术解析1.1 库定位与工程价值Goldfish4TechAirPump 是一款面向嵌入式平台的轻量级空气泵控制库,专为金鱼科技(Goldfish4Tech)系列微型直流空气泵设计。该库并非通用型电机驱动框架,而是针对特定硬件…...




