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);
    }
}

🔎结尾

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

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

相关文章
|
API
05JavaWeb基础 - Servlet的相关API
05JavaWeb基础 - Servlet的相关API
37 0
|
5月前
|
API
获得servlet相关API,获得请求头和cookie-spring23
获得servlet相关API,获得请求头和cookie-spring23
|
JSON 应用服务中间件 API
【计算机网络】Servlet API重点知识汇总
【计算机网络】Servlet API重点知识汇总
|
6月前
|
JSON Java 应用服务中间件
|
XML 开发框架 前端开发
Java Web 项目入门指南(http、Servlet、HttpServletRequest、HttpServletResponse、ServletContext)
Java Web 项目入门指南(http、Servlet、HttpServletRequest、HttpServletResponse、ServletContext)
480 0
Java Web 项目入门指南(http、Servlet、HttpServletRequest、HttpServletResponse、ServletContext)
|
JSON 编解码 前端开发
【JavaEE】Servlet的API详解
【JavaEE】Servlet的API详解
97 0
|
API
java202304java学习笔记第六十二天-ssm-获取servlet相关api
java202304java学习笔记第六十二天-ssm-获取servlet相关api
77 0
|
API
java202304java学习笔记第六十二天-ssm-获取servlet相关api
java202304java学习笔记第六十二天-ssm-获取servlet相关api
92 0
|
应用服务中间件 API
Servlet API 详解
Servlet API 详解
252 0
Servlet API 详解
|
3月前
|
缓存 安全 Java
Java服务器端技术:Servlet与JSP的集成与扩展
Java服务器端技术:Servlet与JSP的集成与扩展
33 3