HttpServlet
类的请求处理方法(doGet
,doPost
…)有2个参数。
javax.servlet.http.HttpRequest
javax.servlet.http.HttpResponse
例如,下面是HttpServlet.doGet()
方法的声明,可以看到有上面提到的2个参数
protected void doGet(
HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
}
本文将学习HttpResponse
类。
HttpResponse
类表示web服务端发送回浏览器的HTTP响应,是对浏览器所发送请求的响应。
HttpResponse
类有很多方法与成员,我们关注最常用的部分,如需进一步了解可参阅其他文档。
输出HTML
要将HTML发送回浏览器,可从HttpResponse
对象获取一个PrintWriter
:
PrintWriter writer = response.getWriter();
writer.write("<html><body>GET/POST响应</body></html>");
Headers
就像HttpRequest
一样,HttpResponse
也可以包含HTTP报头。
报头信息必须首先设置,不能在向响应写入信息后再设置。
下面示例设置一个报头信息:
response.setHeader("Header-Name", "Header Value");
与请求报头类似,可以看到响应报头是一个名值对。
Content-Type
content-type
是一个响应报头,表示向浏览器发回的内容的类型。如HTML的内容类型是text/HTML
,纯文本的内容类型text/plain
。
下面示例在HttpResponse
对象上设置内容类型报头:
response.setHeader("Content-Type", "text/html");
输出纯文本
可以向浏览器返回纯文本:
response.setHeader("Content-Type", "text/plain");
PrintWriter writer = response.getWriter();
writer.write("奇客谷纯文本");
上面代码中,首先设置内容类型为text/plain
,然后将一个纯文本字符串返回给浏览器。
Content-Length
Content-Length
报头告诉浏览器servlet返回了多少字节。如果要返回二进制数据,需要设置内容长度报头:
response.setHeader("Content-Length", "1024");
输出二进制数据
可以将二进制数据返回给浏览器,如图片、pdf文件等等。
同样地,输出二进制数据首先要设置Content-Type
报头为合适的类型,如PNG图像的Content-Type
是image/PNG
。
可以在网上搜一下mime类型,会看到很多内容类型。
输出二进制数据不能使用response.getWriter()
,这个只能用于文本,要使用response.getOutputStream()
方法,从中获得OutputStream
:
OutputStream outputStream = response.getOutputStream();
outputStream.write(...);
重定向到不同URL
可以将浏览器重定向到另一个URL。在重定向时,不能将任何数据发送回浏览器。
下面示例是重定向:
response.sendRedirect("http://qikegu.com");