Response对象
简介
一个完整的http响应包括响应行,若干响应头和响应数据主体三部分构成。
web服务器收到客户端的http请求,会针对每一次请求,分别创建一个代表请求的request对象和代表响应的response对象。
因此,要向客户机输出数据,只需要找response对象就行了
Response常见应用
1.缓存应用
2.向客户端输出中文数据:1)中文乱码问题 2)分别以OutputStream和PrintWriter输出
3.文件下载
4.定时刷新网页
5.请求重定向
缓存应用:setDateHeader方法
使用到"Expires"响应头
long expiresTime = System.currentTimeMillis()+1*24*60*60*1000;//将缓存截止时间设置为一天后
response.setDateHeader("expires",expiresTime)
中文乱码问题
使用HttpServletResponse响应对象的setHeader的方法,将"Content-type"这个响应头中设置编码方式。同时,sun公司也提供了更便捷的代码语句setContentType给编程人员使用。
response.setHeader("content-type","text/html;charset="UTF-8");
//response.setContentType("text/html;charset=UTF-8");//这句功能同上一句
getOutputStream()方法
如果我们用输出流直接输出数字的话,会是输出这个数字在编码表中代表的字符,如代码为:
response.getOutputStream().write(97);
在浏览器中得到:a。
注意:显示数字要按照字符串格式进行显示:”97“
getOutputStream和getWriter方法说明
1.getOutputStream和getWriter方法分别用于得到输出二进制数据、输出文本数据的ServletOutputStream、PrintWriter对象
2.getOutputStream和getWriter方法相互排斥,不能同时使用
请求重定向
response.sendRedirect("/myservlet/index.jsp");
一次请求重定向会向服务器发送两次请求。也就是说会产生两次response响应对象和request请求对象;同时浏览器的地址栏是会发生变化的,URL将跳转到重定向后的页面地址。这点与请求转发不同
sendRedirect方法不仅可以重定向到当前应用程序中的其他资源,它还可以重定向到同一个站点上的其他应用程序中的资源,甚至是使用绝对URL重定向到其他站点的资源
RequestDispatcher.forward方法只能在同一个web应用程序内资源之间转发请求
请求重定向的运行流程
1.浏览器根据用户的请求生成HTTP请求消息,并将其发送给web服务器。
2.如果请求资源为Servlet,web服务器检查内存中是否存在该servlet对象,如果不存在,则加载和创建该servlet对象。
3.web服务器创建针对该次访问的request和response。request中包含了HTTP的请求信息,response用于封装将要发送的HTTP响应信息,此时响应对象中的内容为空。
4.web容器调用servlet1的service方法,并将请求对象和响应对象传递给该方法
5.servlet对象的service方法从请求对象中读取请求信息,并将包含重定向的响应头信息写入到响应对象中
6.service方法执行完毕后返回
7.web服务器从响应对象中读取响应消息
8.web服务器将包含重定向的响应信息发送给浏览器,一次请求响应过程完全结束,request和response变成垃圾,等待垃圾收集器将其彻底从内存中清除
9.重复上述过程,直到一次请求响应过程完全结束