每日记录(request&response 对象)

发布时间 2023-06-03 16:56:54作者: 傲世小苦瓜
1. response简介

l response的类型为HttpServletResponse,它是Servlet的service()方法的参数。

l 当客户端发出请求时,tomcat会创建request和rsponse来调用Servlet的service()方法,每次请求都会创建新的request和response。

l response是用来向客户端完成响应。

2 response的两个流,用来响应正文

l response.getWriter() ,返回值为PrintWriter,用响应字符数据。

l response.getOutputStream(),返回值为ServletOutputStream,用来响应字节数据。

l 在一个请求范围内,这两个流不能同时使用!不然会输出非法状态异常。

3 response字符流的编码问题

l response的字符流默认使用ISO-8859-1编码,可以使用response.setCharaceterEncoding(“utf-8”)来设置编码;

l 浏览器在没有得到Content-Type头时,会使用GBK来解读字符串,当如果你设置了Content-Type,会使用你指定编码来解读字符串。response.setContentType(“html/texgt;charset=utf-8”);

4 response字符流的缓冲区

l response字符流缓冲区大小为8KB;

l 可以调用response.getWriter().flush()方法完成刷新,这会把当前缓冲区中的数据发送给客户端。

l 当response一旦开始了发送,那么response的内部会有一个提交状态为true。可以调用response的isCommitted()方法来查看当前的提交状态。

5 自动刷新

l 有一个响应头:Refresh,它的作用是在指定的时间后,自动重定向到指定路径。例如:response.setHeader(“Refresh”, “5;URL=http://www.baidu.com”);,表示在5秒后自动跳转到百度。

6 设置状态码

l response.sendError(404, “没找到您访问的资源”)

l response.sendStatus(302);

7 重定向

l 重定向:两个请求。

Ø 第一个请求,服务器响应码:302

Ø 第一个请求的响应头有一个Location头,它说明了要重定向的URL;

Ø 第二个请求,浏览器重新向Location头指定的URL发出。

l 重定向:可以重定向到本项目之外的页面。例如可以重定向到百度!

l 重定向:可以重定向到本项目内的其他资源,可以使用相对路径,以“/项目名”开头

l 重定向:会使浏览器的地址栏发生变化!

注意事项:

l 当response为以提交状态,就不能再重定向了!

l 当使用了response的输出流响应后,再重定向。如果没有造成response提交,那么说明数据还在缓冲区中,tomcat会把缓冲区清空,然后重定向。