ServletAPI详解(四)-HttpServletResponse

我们来看第三个方法,HttpServletResponse

在servlet运行原理中提到,servlet代码中的doXXX方法的目的就是根据请求计算响应,然后将响应数据设置到HttpServletResponse对象中,然后 Tomcat 就会把这个 HttpServletResponse 对象按照 HTTP 协议的格式, 转成一个字符串, 并通过 Socket 写回给浏览器

下列方法可以设置响应头,这些方法通过HttpServletResponse对象可用

序号方法 & 描述
1String encodeRedirectURL(String url)
为 sendRedirect 方法中使用的指定的 URL 进行编码,或者如果编码不是必需的,则返回 URL 未改变。
2String encodeURL(String url)
对包含 session 会话 ID 的指定 URL 进行编码,或者如果编码不是必需的,则返回 URL 未改变。
3boolean containsHeader(String name)
返回一个布尔值,指示是否已经设置已命名的响应报头。
4boolean isCommitted()
返回一个布尔值,指示响应是否已经提交。
5void addCookie(Cookie cookie)
把指定的 cookie 添加到响应。
6void addDateHeader(String name, long date)
添加一个带有给定的名称和日期值的响应报头。
7void addHeader(String name, String value)
添加一个带有给定的名称和值的响应报头。
8void addIntHeader(String name, int value)
添加一个带有给定的名称和整数值的响应报头。
9void flushBuffer()
强制任何在缓冲区中的内容被写入到客户端。
10void reset()
清除缓冲区中存在的任何数据,包括状态码和头。
11void resetBuffer()
清除响应中基础缓冲区的内容,不清除状态码和头。
12void sendError(int sc)
使用指定的状态码发送错误响应到客户端,并清除缓冲区。
13void sendError(int sc, String msg)
使用指定的状态发送错误响应到客户端。
14void sendRedirect(String location)
使用指定的重定向位置 URL 发送临时重定向响应到客户端。
15void setBufferSize(int size)
为响应主体设置首选的缓冲区大小。
16void setCharacterEncoding(String charset)
设置被发送到客户端的响应的字符编码(MIME 字符集)例如,UTF-8。
17void setContentLength(int len)
设置在 HTTP Servlet 响应中的内容主体的长度,该方法设置 HTTP Content-Length 头。
18void setContentType(String type)
如果响应还未被提交,设置被发送到客户端的响应的内容类型。
19void setDateHeader(String name, long date)
设置一个带有给定的名称和日期值的响应报头。
20void setHeader(String name, String value)
设置一个带有给定的名称和值的响应报头。
21void setIntHeader(String name, int value)
设置一个带有给定的名称和整数值的响应报头。
22void setLocale(Locale loc)
如果响应还未被提交,设置响应的区域。
23

void setStatus(int sc)
为该响应设置状态码。

24

void setCharacterEncoding(String charset)

设置被发送到客户端的响应的字符编码(MIME 字符集)例如, UTF-8

25

void sendRedirect(String location)

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

3XX的状态码,浏览器会跳转到新的地址

26

PrintWriter getWriter()

用于往 body 中写入文本格式数据

27

OutputStream getOutputStream()

用于往 body 中写入二进制格式数据

void setCharacterEncoding(String charset)

 重启服务器后输入URL,发现不能正确识别中文 

如果URL中有中文字符,没有设置UTF8,返回的响应就会出现乱码,浏览器默认不知道字符的编码方式,要通过方法显示的告诉浏览器,就可以正确识别了

或者直接和contenttype一起设置

 重启服务后再次刷新页面,就正常了 

注意:设置字符集和contenttype必须要在返回对象的代码上面,必须先被执行,写到下面不会生效

void sendRedirect(String location)我们使用重定向方法

@WebServlet("/redirct")
public class RedirctServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.sendRedirect("http://www.baidu.com");
    }
}

输入URL(http://127.0.0.1:8080/ServletHelloWorld/redirct)后会直接跳转到百度页面

通过抓包我们可以看到响应中有个Location,这个就代表重定向的地址

keep-Alive是建议浏览器和服务器之间保持长连接,短链接是每个连接只进行一次请求和响应,长连接可以进行多次请求和响应 

我们也可以不用sendRedirect方法,分步进行,可以先设置状态码,再设置Location

 重新启动服务器,输入后发现效果是相同的

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YoLo♪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值