一、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()获取到的是同一个对象:


java response既返回文件又返回数据给前端 response返回对象_getWriter

③在浏览器窗口右键F12来查看元素,按照下图中的顺序来查看Content-Type为text/html;charset=gbk,这是我们在doGet方法中通过resp.setHeader()的方式所设置的响应头信息:


java response既返回文件又返回数据给前端 response返回对象_servlet_02


④将Content-Type设置为text/plain;charset=gbk,"plain"表示普通文本,输出流中的内容将会以其本身的样子被浏览器解析:


java response既返回文件又返回数据给前端 response返回对象_response_03


⑤以下还有两种方法可以设置文本类型或字符编码:

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);
	}
}