一、Response概述
response是Servlet.service方法的一个参数,类型为javax.servlet.http.HttpServletResponse。在客户端发出每个请求时,服务器都会创建一个response对象。response对象是用来对客户端进行响应的,这说明在HttpServletResponse的doXXX()方法中使用response对象可以完成对客户端的响应工作。
二、Response主要功能介绍
1、发送状态码;
2、设置响应头信息;
3、设置响应正文;
4、重定向;
三、HttpServletResponse的常用方法
(一)发送状态码
setStatus(状态码)
sendError(状态码, 状态码相关信息)
(二)设置响应头
setHeader(String name, int value):设置响应头,只有一个值时
addHeader(String name, int value):设置响应头,有多个值时
void setIntHeader(String name, int value):设置响应头
void setDateHeader(String name, long date):设置响应头
(三)设置响应正文
ServletOutputStream getOutputStream():用来向客户端响应字节数据;
PrintWriter getWriter():用来向客户端响应字符数据;
(四)getWriter和getOutputStream细节
1、getWriter()和getOutputStream()两个方法不能同时调用。如同时调用就会出现异常
2、Servlet程序向ServletOutputStream或PrintWriter对象中写入的数据将被Servlet引擎从response里面获取,Servlet引擎将这些数据当作响应消息的正文,然后再与响应状态行和各响应头组合后输出到客户端。
3、Servlet的serice()方法结束后【也就是doPost()或者doGet()结束后】,Servlet引擎将检查getWriter或getOutputStream方法返回的输出流对象是否已经调用过close方法,如果没有,Servlet引擎将调用close方法关闭该输出流对象.
4、response字符流缓冲区大小为8KB,当向字符流中写入数据后,数据可能只在缓冲区中,而没有发送到浏览器。
可以调用response.flushBuffer()或response.getWriter().flush()方法刷新缓冲区,把数据发送到浏览器。
(五)重定向
//方法一:
response.sendStatus(302);
repsonse.setHeader("Location", "http://www.baidu.com");
//方法二:快捷的方法重定向:
response.sendRedirect("http://www.baidu.com");
四、HttpServletResponse应用
1、使用Refresh头进行定时刷新
2、禁用浏览器缓存
/**
Cache-Control: no-cache;
Pragma: no-cache;
Expires: -1;
*/
public class FServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setHeader("Cache-Control", "no-cache");
response.setHeader("Pragma", "no-cache");
response.setDateHeader("Expires", -1);
}
}
3、响应图片
/**
* 响应图片
* 1、获取字节数组(使用CommonsIO)
* 2、获取OutputStream
* 3、写出数据
*/
public class GServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//获取字节数组(使用CommonsIO)
String path = "C:/Users/ASUS/Desktop/壁纸/35.jpg";
FileInputStream is = new FileInputStream(path);
byte[] datas = IOUtils.toByteArray(is);
//获取OutputStream
ServletOutputStream os = response.getOutputStream();
//写出数据
os.write(datas);
}
Java新手,若有错误,欢迎指正!