Servlet的常用Api—HttpServletResponse

news2024/12/29 10:15:51

Servlet的常用Api—HttpServletResponse

  • 🔎核心方法
    • setContentType && setCharacterEncoding
    • sendRedirect
      • 关于Keep-Alive
      • 关于状态码 && Body
  • 🔎结尾

🔎核心方法


方法描述
(void) setStatus(int sc)为该响应设置状态码
(void) setHeader(String name, String value)设置一个带有给定的名称和值的 header. 如果 name 已经存在, 则覆盖旧的值
(void) addHeader(String name, String value)添加一个带有给定的名称和值的 header. 如果 name 已经存在, 不覆盖旧的值, 并列添加新的键值对
(void) setContentType(String type)设置被发送到客户端的响应的内容类型
(void) setCharacterEncoding(String charset)设置被发送到客户端的响应的字符编码(MIME 字符集). 例如 UTF-8
(void) sendRedirect(String location)使用指定的重定向位置 URL 发送临时重定向响应到客户端
(PrintWriter) getWriter()用于向 Body 中写入文本格式数据
(OutputStream) getOutputStream()用于向 Body 中写入二进制格式数据
  • 注意
    • setHeader类似于将键值对的key进行覆盖
      • 键值对为{1, tom}, 使用setHeader设置键值对为{1, homo} 后, 键值对数量为1, 键值对为{1, homo}
    • addHeader类似于允许重复的key
      • 键值对为{1, tom}, 使用addHeader设置键值对为{1, homo} 后, 键值对数量为2, 键值对为{1, tom}, {1, homo}
    • 对于状态码 / 响应头的设置要放到 getWriter / getOutputStream 之前, 否则可能失效

setContentType && setCharacterEncoding


使用setContentType可以设置被发送到客户端的响应的内容类型
使用setCharacterEncoding可以设置被发送到客户端的响应的字符编码(MIME 字符集)

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;


@WebServlet("/getParameter")
public class GetParameterServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //super.doGet(req, resp);

        // 预期浏览器会发送一个类似 /getParameter?studentId=10&classId=20 的请求
        // 通过 req 的 getParameter 方法拿到 query string 中的内容
        String studentId = req.getParameter("studentId");
        String classId = req.getParameter("classId");

        resp.getWriter().write("学生Id : " + studentId + ", " + "班级Id : " + classId);
    }
}

上述代码的运行结果

在这里插入图片描述

出现乱码的原因是未设置响应的类型, 编码的格式
添加resp.setContentType("text/html");, resp.setCharacterEncoding("utf8");后的效果
也可以简写为resp.setContentType("text/html; charset=utf8");

在这里插入图片描述

sendRedirect


使用sendRedirect可以将指定的重定向位置 URL 发送临时重定向响应到客户端

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/redirect")
public class RedirectServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //super.doGet(req, resp);

    }
}

上述代码的运行结果

在这里插入图片描述

由于未填写对应的内容, 因此页面是空白的
添加resp.sendRedirect("https://www.sogou.com/");后的效果
将指定的URL(https://www.sogou.com/)发送临时重定向响应到客户端

在这里插入图片描述

抓包的效果🍭


在这里插入图片描述

  • 此时的状态码为302
  • 此时的 Location 为https://www.sogou.com/
    • 根据上面的信息可以将resp.sendRedirect("https://www.sogou.com/");
    • 替换为resp.setStatus(302);, resp.setHeader("Location", "https:www.sogou.com/");

再次抓包, 查看替换后的运行效果🍭


效果与之前相同

在这里插入图片描述


关于Keep-Alive

  • TCP 的特点
    • 面向字节流
    • 可靠传输
    • 全双工
    • 有连接

TCP 是有连接的, 连接可以划分为

  • 短连接(每个连接只进行一次请求和响应的传输)
  • 长连接(每个连接可进行多次请求和响应的传输)

Keep-Alive: 建议保持长连接


关于状态码 && Body


  • 设置状态码, 未设置Body, 返回的是该状态码对应的默认的Body
  • 设置状态码, 设置Body, 返回的是该状态码对应的自定义的Body

设置状态码, 未设置Body🍭

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/status")
public class StatusServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //super.doGet(req, resp);

        // 设置状态码为 404, 但是不设置 Body
        resp.setStatus(404);
    }
}

在这里插入图片描述

设置状态码, 设置Body🍭

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/status")
public class StatusServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //super.doGet(req, resp);

        // 设置状态码为 404, 设置 Body
        resp.setStatus(404);
        resp.getWriter().write("<h1>404NotFound</h1>");
    }
}

在这里插入图片描述

返回 Tomcat 自带的错误页面🍭

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/status")
public class StatusServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //super.doGet(req, resp);

        // 返回 Tomcat 自带的错误页面
        resp.sendError(404);
    }
}

在这里插入图片描述

🔎结尾

创作不易,如果对您有帮助,希望您能点个免费的赞👍
大家有什么不太理解的,可以私信或者评论区留言,一起加油

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

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

相关文章

2023年4月和5月随笔

1. 回头看 为了不耽误学系列更新&#xff0c;4月随笔合并到5月。 日更坚持了151天&#xff0c;精读完《SQL进阶教程》&#xff0c;学系统集成项目管理工程师&#xff08;中项&#xff09;系列更新完成。 4月和5月两月码字114991字&#xff0c;日均码字数1885字&#xff0c;累…

python的AutoGui库(1)获取鼠标实时位置

1.安装AutoGui库,与库的导入 PyAutoGUI是一个纯Python的GUI自动化工具&#xff0c;其目的是可以用程序自动控制鼠标和键盘操作&#xff0c;多平台支持&#xff08;Windows&#xff0c;OS X&#xff0c;Linux&#xff09;。可以用pip安装&#xff0c;Github上有源码。 使用命令…

Ceph应用

//存储类型 块存储 一对一&#xff0c;只能被一个主机挂载使用&#xff0c;数据以块为单位进行存储&#xff0c;典型代表: 硬盘 文件存储 一对多&#xff0c;能被多个主机同时挂载使用&#xff0c;数据以文件的形式存储的(元数据和实际数据是分开存储的)&#xff0c;并且有…

Python学习笔记 - 探索33个保留关键字

Python编程语言中有33个保留关键字&#xff0c;这些关键字在Python语法中有特殊含义&#xff0c;不能用作变量名、函数名或其他标识符。 33个保留字&#xff08;关键字&#xff09; 不能冲突的关键词 33 个 来看看都有哪些关键字。 import keyword print("&#xff0c;…

面试专题:java多线程(3)---关于 Atomic 原子类

1.介绍一下Atomic 原子类Atomic 翻译成中文是原子的意思。在化学上&#xff0c;我们知道原子是构成一般物质的最小单位&#xff0c;在化学反应中是不可分割的。在我们这里 Atomic 是指一个操作是不可中断的。即使是在多个线程一起执行的时候&#xff0c;一个操作一旦开…

cpolar内网穿透创建实现远程办公---无需公网IP

文章目录 前言1.本地访问简介2. cpolar内网穿透3. 公网远程访问4. 固定公网地址 转发自cpolar极点云的文章&#xff1a;外网远程访问公司内网用友畅捷通T财务软件 – 远程办公 前言 用友畅捷通T适用于异地多组织、多机构对企业财务汇总的管理需求&#xff1b;全面支持企业对远…

JavaScript 客户端脚本语言 选择器、事件

JavaScript发展史 JavaScript介绍 JavaScript ( 简称 JS): 是一种轻量级客户端脚本语言&#xff0c;通常被直接嵌入 HTML 页面&#xff0c;在浏览器上执 行。 JavaScript 的主要用途 : 使网页具有交互性&#xff08;如果不去使用js&#xff0c;只是使用html css那么只是…

chatgpt赋能python:Python主网站的SEO优化

Python主网站的SEO优化 作为一名有10年Python编程经验的工程师&#xff0c;我一直非常关注Python官方网站的SEO优化&#xff0c;因为官方网站对于传播Python语言的影响至关重要。在这篇文章中&#xff0c;我将介绍一些Python主网站的SEO优化策略&#xff0c;并总结一些结论&am…

程序切片(定义+用途)

程序切片(定义用途) 介绍 让我们假设我们测试了一个程序 p 并失败了&#xff08;错误的 输出&#xff09;。然后我们想找出导致失败&#xff08;故障&#xff09;的原因。 现在假设我们要更改程序的一部分。我们可能会问&#xff1a;程序的哪些其他部分受到影响 我们想找到导致…

1728_c语言标准库memcpy函数的简单使用

全部学习汇总&#xff1a; GreyZhang/c_basic: little bits of c. (github.com) 欢迎路过的YUAN类朋友相互交流&#xff0c;以下是我的联系方式&#xff1a; Email&#xff1a;greyzhang126.com 微信&#xff1a;grey0612 静态代码检测遇到了一处memcpy函数使用的错误&#…

如何DIY项目资源私有检测规则

本地资源检测是UWA推出的、面向于静态资源的全量分析。可以全面自动检测项目静态工程内各项资源、代码和设置&#xff0c;能够帮助项目组制定合理的资源与代码标准&#xff0c;及时发现潜在的性能问题和异常错误&#xff0c;建立有效的开发规范。 为了在游戏优化过程中持续与U…

计网之HTTPS的安全机制

文章目录 一. 什么是HTTPS?二. HTTPS中的加密机制(SSL/TLS)1. HTTP的安全问题2. 对称加密3. 非对称加密4. 中间人问题5. 证书 一. 什么是HTTPS? 在网络传输过程中, 存在着运营商劫持和一些黑客入侵这样的危险, 在之前只有HTTP的明文传输数据环境下, 这样的问题是有些泛滥的,…

java 利用poi根据excel模板导出数据(二)

本文是 java 利用poi根据excel模板导出数据&#xff08;一&#xff09; 的续篇 经常有poi的开发一定会碰到三个名词&#xff1a; HSSFWorkbook 、 XSSFWorkbook、SXSSFWorkbook&#xff1b; 这三个都是导出excel的形式&#xff0c;具体区别&#xff1a; HSSFworkbook,XSSF…

bert中文文本摘要代码(1)

bert中文文本摘要代码 写在最前面关于BERT使用transformers库进行微调 load_data.py自定义参数collate_fn函数BertDataset类主函数 tokenizer.py创建词汇表encode函数decode函数 写在最前面 熟悉bert&#xff0b;文本摘要的下游任务微调的代码&#xff0c;方便后续增加组件实现…

Vue.js+nodejs高校水电费缴费设备维修管理系统

本大学城水电管理系统管理员功能有个人中心&#xff0c;用户管理&#xff0c;领用设备管理&#xff0c;消耗设备管理&#xff0c;设备申请管理&#xff0c;设备派发管理&#xff0c;状体汇报管理&#xff0c;领用报表管理&#xff0c;消耗报表管理&#xff0c;班组报表管理&…

面向对象编程 实验二 MouseHit--SDUWH

来源网络。仅供参考 面向对象编程技术 实验二实验报告 1.实验要求 熟悉Visual Studio的环境与使用,创建一个新的工程以EasyWin为示例程序完成第一个Windows程序的编写、调试、运行。练习命令行的方式进行程序创建。 在理解Windows按键与鼠标的基础上,开发一个小型的打字…

feat:使用企业微信JS-SDK的onMenuShareAppMessage()实现点击转发自定义分享内容(TypeScript)

背景&#xff1a;企业微信应用使用企业微信JS-SDK的分享接口实现分享样式自定义 原生&#xff1a; 需要实现成&#xff1a; 企业微信JS-SDK 是企业微信面向网页开发者提供的 基于企业微信内 的网页开发工具包。 通过使用企业微信JS-SDK&#xff0c;网页开发者 可借助企业微信…

Python-shellcode免杀分离

#Python-原生态-MSF&CS&生成&执行代码 MSF-payload&#xff1a;msfvenom -p windows/meterpreter/reverse_tcp lhostX.X.X.X lport6688 -f c CS-payload&#xff1a; 攻击--生成后门--payload生成器--选择监听器和输出格式为C语言 python 3.10-32位&#xff0c;注…

如何将完成的报告从 FastReport .NET 导出到 S3

FastReport .NET 报表生成器FastReport .NET是适用于.NET Core 3&#xff0c;ASP.NET&#xff0c;MVC和Windows窗体的全功能报告库。使用FastReport .NET&#xff0c;您可以创建独立于应用程序的.NET报告。 简单存储服务是一种用于存储大量数据的服务。该服务将存储的数据划分…

BERT在GLUE数据集构建任务(未完待续。。。)

0 Introduction 谷歌开源的BERT项目在Github上&#xff0c;视频讲解可以参考B站上的一个视频 1 GLUE部分基准数据集介绍 GLUE数据集官网GLUE数据集下载&#xff0c;建议下载运行这个.py脚本文件进行数据集的下载&#xff0c;如果连接无法打开&#xff0c;运行下面代码。运行…