一、Response体系结构
1.ServletResponse
Java提供的请求对象根接口。
2.HttpServletResponse(★)
Java提供的对HTTP协议封装的请求对象接口。
3.ResponseFacade
Tomcat定义的实现类。
二、Response设置响应数据
1.设置响应行的数据
void setStatus(int sc) |
设置响应状态码sc |
2.设置响应头的数据
void setHeader(String name, String value) |
设置响应头键值对 |
3.设置响应体的数据
使用IO流设置响应体的数据。
ServletOutputStream getOutputStream() |
获取字节输出流 |
PrintWriter getWriter() | 获取字符输出流 |
(1)响应字符数据
①获取字符输出流:
PrintWriter writer = response.getWriter();
②写数据:
writer.write("数据内容");(2)中文乱码问题:
因为通过Response获取的字符输出流默认编码为ISO-8859-1,所以会出现中文乱码问题。可以使用setContentType()方法来设置编码:
response.setContentType("text/html;charset=UTF-8");【tips】setContentType方法有两个功能:
①设置响应头content-type的值;
②设置编码,默认为ISO-8859-1。
(3)响应字节数据
①获取字节输出流:
ServletOutputStream os = response.getOutputStream();
②写数据:
os.write(bys, 0, len);
【tips】IOUtils工具类:提供了输入流输出流的常用工具方法,如数据复制等:
①在pom.xml中导入坐标:
<dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.6</version> </dependency>②数据复制:
IOUtils.copy(输入流对象, 输出流对象);
三、Response完成重定向
重定向(Redirect):一种资源跳转方式。
1.重定向的实现
(1)设置响应状态码302:
resp.setStatus(302);
(2)在响应头设置资源位置:location:xxx:
resp.setHeader("location","资源B的路径");【tips】★★★因为每次重定向的状态码(302)和响应头的键(location)都是一样的,只是键值(资源路径)不一样,所以还有一种简易的重定向写法:
resp.sendRedirect("资源B的路径");
2.重定向的特点
(1)浏览器地址栏路径发生变化;
(2)可以重定向到任意资源(服务器内外皆可);
(3)两次请求(所以地址栏发生变化),在多个资源间不能使用request共享数据,可使用会话跟踪技术共享数据。
【tips】资源路径问题:什么时候加虚拟目录ContextPath,什么时候不加虚拟目录?
【tips】资源路径问题:什么时候加虚拟目录ContextPath,什么时候不加虚拟目录?
明确该目录是谁来使用:
①浏览器使用:需要加虚拟目录(即项目路径);
②服务器使用:不加。