> 文章列表 > ServletAPI详解(四)-HttpServletResponse

ServletAPI详解(四)-HttpServletResponse

ServletAPI详解(四)-HttpServletResponse

我们来看第三个方法,HttpServletResponse

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

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

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

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