在HttpServlet中无论是doGet,doPost的会有这样一个对象他的功能呢就是来发生响应消息
response的基础操作 1.设置响应行 2.设置响应头- 格式:HTTP/1.1 200 ok
- 设置状态码:setStatus(int sc)
//1. 设置状态码为302
response.setStatus(302);
//2.设置响应头location
response.setHeader("location","/Servlet_war_exploded/rpdemo02");
//告诉浏览器,服务器发生的数据编码,建议浏览器使用该编码解析
response.setHeader("content-type","text/html;charset=utf-8");
//简单形式,设置编码
response.setContentType("text/html;charset=utf-8");
3.设置响应体
- 使用步骤:
-
获取输出流
-
字符输出流:PrintWriter getWriter()
-
字节输出流:ServletOutputStream getOutputStream()
-
-
使用输出流,将数据输出到客户端浏览器
-
这是我们简单的字符输出流实验
@WebServlet(name = "Demo03", value = "/rpdemo03")
public class Demo03 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取流之前,设置流的编码(默认ISO-8859-12)设置为GBK
//response.setCharacterEncoding("utf-8");
//告诉浏览器,服务器发生的数据编码,建议浏览器使用该编码解析
response.setHeader("content-type","text/html;charset=utf-8");
//简单形式,设置编码
response.setContentType("text/html;charset=utf-8");
//获取字符输出流
PrintWriter pw = response.getWriter();
//输出数据
pw.write("hello response");
pw.write("你好 response");
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
下面我们来简单的使用response进行字节输出实验
@WebServlet(name = "Demo04", value = "/rpdemo04")
public class Demo04 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//告诉浏览器
response.setContentType("text/html;charset=utf-8");
//获取字节输出流
ServletOutputStream sos = response.getOutputStream();
//输出数据
sos.write("你好".getBytes("utf-8"));
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
还有一种响应体用法,可以利用他进行重定向
//动态获取虚拟目录 String contextPath = request.getContextPath(); //简单的重定向方法 response.sendRedirect(contextPath+"/responseDemo2");
这个为Demo02文件
@WebServlet(name = "Demo02", value = "/rpdemo02")
public class Demo02 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("Demo2...");
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
- 重定向的特点:redirect
- 地址栏发生变化
2. 重定向可以访问其他站点(服务器)的资源
3. 重定向是两次请求。不能使用request对象来共享数据
4. 需要加虚拟目录,建议虚拟目录自动获取- 转发的特点:forward
- 转发地址栏路径不变
2. 转发只能访问当前服务器下的资源
3. 转发是一次请求,可以使用request对象来共享数据
4. 不需要加虚拟目录



