Servlet的常用Api—HttpServletResponse

简介: Servlet的常用Api—HttpServletResponse

🔎核心方法


方法 描述
(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/)发送临时重定向响应到客户端

抓包的效果🍭


  • 根据上面的信息可以将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);
    }
}

🔎结尾

创作不易,如果对您有帮助,希望您能点个免费的赞👍

大家有什么不太理解的,可以私信或者评论区留言,一起加油

目录
打赏
0
0
0
0
1
分享
相关文章
05JavaWeb基础 - Servlet的相关API
05JavaWeb基础 - Servlet的相关API
51 0
获得servlet相关API,获得请求头和cookie-spring23
获得servlet相关API,获得请求头和cookie-spring23
Java Web 项目入门指南(http、Servlet、HttpServletRequest、HttpServletResponse、ServletContext)
Java Web 项目入门指南(http、Servlet、HttpServletRequest、HttpServletResponse、ServletContext)
502 0
Java Web 项目入门指南(http、Servlet、HttpServletRequest、HttpServletResponse、ServletContext)
【JavaEE】Servlet的API详解
【JavaEE】Servlet的API详解
117 0
java202304java学习笔记第六十二天-ssm-获取servlet相关api
java202304java学习笔记第六十二天-ssm-获取servlet相关api
94 0
java202304java学习笔记第六十二天-ssm-获取servlet相关api
java202304java学习笔记第六十二天-ssm-获取servlet相关api
106 0
速卖通商品详情接口(速卖通API系列)
速卖通(AliExpress)是阿里巴巴旗下的跨境电商平台,提供丰富的商品数据。通过速卖通开放平台(AliExpress Open API),开发者可获取商品详情、订单管理等数据。主要功能包括商品搜索、商品详情、订单管理和数据报告。商品详情接口aliexpress.affiliate.productdetail.get用于获取商品标题、价格、图片等详细信息。开发者需注册账号并创建应用以获取App Key和App Secret,使用PHP等语言调用API。该接口支持多种请求参数和返回字段,方便集成到各类电商应用中。

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等