javaWeb之Response详解
Response
代表了http响应的对象
继承结构 (!掌握)
ServletResponse -- 通用的响应接口, 定义了响应对象应该具有的功能
|
|--HttpServletResponse 在ServletResponse的基础上, 添加了很多和Http协议相关的方法
组成结构
状态行主要是指此次请求的响应状态,用数字来表示。
一个3位的数字, 范围为100~600, 表示服务器处理请求的结果
200~299 表示服务器正确的处理了请求
300~399 表示服务器正确的处理了本次请求, 但是如果想要继续执行, 还需要更多的额外信息
400~499 表示客户端的请求有问题
500~599 表示服务器端发生了问题
200 表示服务器处理成功
302 表示请求重定向
304/307 通知浏览器使用缓存资源
404 表示客户端请求的资源不存在
500 表示服务器端处理请求出错
response的api
response.getOutputStream().write()字节流向response缓冲区返回字节数据;
response.getWriter().write()字符流向response缓存区返回字符数据;
注意
1.在一次请求响应中,二者只能选一;
2.写入缓冲区的数据,到service方法执行结束后,将由服务器将数据组织成响应消息打给浏览器。
解决字节流或者字符流乱码问题:response.setContentType(“text/html;charset=xxx”)
重定向:response.sendRedirect(“页面的相对web应用根目录(即项目名)的路径”)
定时刷新: (可以看成是定时跳转)
通过Refresh响应头, 可以实现在多少秒之后跳转到另外一个资源response.setHeader(“Refresh”,”秒数;url=”需要刷新的页面的相对路径””)
请求转发/请求重定向/定时刷新都可以实现资源的跳转, 区别是什么呢?
请求转发:
一次请求,一次响应;
地址栏不变;
只能在服务器内部同一应用跳转,不能转发到别的服务器的别的应用上;
请求重定向:
两次请求,两次响应,不同的request对象;(每次请求服务器都会创建新的request对象)
地址栏改变;
既可以服务器内,也可以不同服务器不同应用上跳转;
定时刷新:
两次请求,两次响应,request对象肯定不是一个了;
地址栏发生变化;
可以用于服务器内部的资源跳转, 也可以用于不同应用和不同服务器之间的资源跳转;
和重定向的区别就是有了时间间隔,可以进行别的操作, 如: 注册成功, xx秒后跳转到xxx;
在服务器中设置响应头来控制浏览器的缓存行为
缓存:
setDateHeader("Expires", System.currentTimeMillis()+1000*60*60*24);1.0协议缓存一段时间setHeader("Cache-control", "max-age=60");1.1协议缓存一段时间
不要缓存:
setDateHeader("Expires", -1);
setHeader("Cache-control", "no-cache");1.1协议
setHeader("Pragma", "no-cache");http1.0协议
赋一张请求响应流程图