一、response对象继承体系结构
二、response对象的功能
1、设置响应数据
package com.wedu.demo.servlet;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* response的使用
*/
@WebServlet("/responseDemo")
public class ResponseDemo extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//void setStatus(int sc):设置响应的状态码
//response.setStatus(302);
//void setHeader(String name, String value):设置响应消息体数据的编码方式一
//response.setHeader("content-type","text/html;charset=utf-8");
//设置响应消息体数据的编码方式二
response.setContentType("text/html;charset=utf-8");
//设置服务器端以UTF-8编码输出数据到客户端
response.setCharacterEncoding("UTF-8");
//PrintWriter getWriter():获取字符输出流
//PrintWriter pw = response.getWriter();
//pw.println("hello,servlet");
//ServletOutputStream getOutputStream():获取字节输出流
ServletOutputStream os = response.getOutputStream();
os.write("hello,servlet!".getBytes("UTF-8"));
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}
2、重定向
2.1、定义
就是一种特殊的响应,响应信息由服务器自动填写需要我们提供重定向的目标,该响应所包含的状态码是302。
2.2、原理
在重定向的过程中,影响浏览器做出动作的关键点即响应中的状态码及Location这个消息头。302状态就像一道命令一样,使得浏览器做出新的一次请求,而请求的地址会从头信息中查找。由于这个新的请求动作是由浏览器发出的,所以浏览器的地址栏上的地址会变成Location消息头中的地址。
2.3、特点
- 请求的地址可以是任意地址,哪怕是当前应用以外的应用;
- 重定向时浏览器的地址会发生改变;
- 不会共享同一个request和response。
2.4、实现代码
package com.wedu.demo.servlet;
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("/responseDemo")
public class ResponseDemo extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//void sendRedirect(String location):设置重定向地址
response.sendRedirect("https://blog.csdn.net/yu1755128147/article/details/102751502");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}
2.5、与转发的区别
- 重定向地址栏发生变化;转发地址栏路径不变;
- 重定向可以访问其他站点(服务器)的资源,转发只能访问当前服务器下的资源;
- 重定向是两次请求,不能使用request对象来共享数据;转发是一次请求,可以使用request对象来共享数据。
四、应用实例
1、文件下载