一、response对象
HttpServletResponse是一个接口,response对象指的是HttpServletResponse的实现类对象,该对象封装了发送给客户端的响应信息,由服务器将response对象传递给servlet。
1)服务器端的响应信息被封装在这个对象中。
2)响应信息由response对象传送给web服务器,再由web服务器发送给客户端。
3)其父接口是ServletResponse,定义一个对象协助servlet向客户端发送一个响应,服务器创建一个ServletResponse对象,并且传递一个参数到servlet的service方法中。
4)向客户端返回响应数据:
①使用PrintWriter对象的getWriter()方法来返回字符格式的响应数据。
②使用ServletOutputStream的getOutputStream()方法来返回一个二进制的响应数据。
5)响应的构成:
①状态行
②响应头
③响应实体
二、构建响应信息
1、状态行
状态行表示状态,无法人为构造,一个正常的状态行如:HTTP 200 ok,正常情况下是200,找不到内容是404,发生异常是500,
2、构建响应头
response.setHeader("content-type", "text/html:charset=gbk");
response.addHeader("refresh", "3;url=1.jsp");
3、构建响应体
response.getWriter() //输出文本使用
response.getOutputStream() //输出非文本使用(比如:图片、视频、exe文件)
三、测试
1、设置响应头部信息
①在TestResponseServlet.java中重写doGet方法,并且使用resp.setHeader()的方式来设置响应头信息。
package com.hpe.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class TestResponseServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.setHeader("content-type", "text/html;charset=gbk");
PrintWriter pw = resp.getWriter(); //pw和pw2是同一个对象
PrintWriter pw2 = resp.getWriter();
pw.println("<strong>aaaa</strong>");
pw.println("<strong>bbbb</strong>");
System.out.println(pw);
System.out.println(pw2);
}
}
②在web.xml配置好这个类,然后通过浏览器访问,同时服务器在控制台的打印信息说明通过resp.getWriter()获取到的是同一个对象:
③在浏览器窗口右键F12来查看元素,按照下图中的顺序来查看Content-Type为text/html;charset=gbk,这是我们在doGet方法中通过resp.setHeader()的方式所设置的响应头信息:
④将Content-Type设置为text/plain;charset=gbk,"plain"表示普通文本,输出流中的内容将会以其本身的样子被浏览器解析:
⑤以下还有两种方法可以设置文本类型或字符编码:
package com.hpe.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class TestResponseServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.setHeader("content-type", "text/html;charset=gbk"); //必须是分号隔开,不能是逗号或冒号等其它符号
resp.setContentType("text/html;charset=gbk"); //必须是分号隔开,不能是逗号或冒号等其它符号
resp.setCharacterEncoding("gbk"); //写上这3个方法中的任意一个,设置为gbk后,中文都可以正常显示,也推荐用utf-8
PrintWriter pw = resp.getWriter(); //pw和pw2是同一个对象
PrintWriter pw2 = resp.getWriter();
pw.println("<strong>aaaa</strong>");
pw.println("<strong>bbbb</strong>");
System.out.println(pw);
System.out.println(pw2);
}
}