我是靠谱客的博主 怕孤独楼房,这篇文章主要介绍Response介绍,现在分享给大家,希望可以做个参考。

[基于达内教育的学习,总结提炼]

概念:

response对象是用来对客户端进行响应的

继承关系:

ServletRequest、ServletResponse: 当浏览器发出请求时, Web容器创建一个ServletRequest对象封装请求信息, 一个ServletResponse对象封装响应信息. 两个对象作为Servlet的service()方法中的参数.

HttpServletRequest、HttpServletResponse: 丰富了SerlvetRequest、ServletResponse, 提供了http协议相关的内容.

基本API:

设置状态码的方法
void setStatus(int sc)        // sc ---> status code 状态码
void setStatus(int sc, String sm)        // sm ---> status message 状态的描述(java8中已经被弃用了,被标记为过时deprecated)
设置响应头的方法
void setHeader(String name, String value) 
void setDateHeader(String name, long date)
void setIntHeader(String name, int value) 

void addHeader(String name, String value) 
void addDateHeader(String name, long date)
void addIntHeader(String name, int value)
set方法是如果没有则添加,如果有则更新
add方法是无论有没有都添加新的

设置响应内容的方法
ServletOutputStream getOutputStream() 
PrintWriter getWriter()

Response作用:

1. 向客户端发送数据 ( 即服务器向应答实体添加内容 )

1) 字节流发送数据        getOutputStream()                                                                                            乱码问题: 服务器用的utf-8发送数据, 然而浏览器接收数据, 如果不指定特殊编码, 默认为gbk码, 导致编码解码不一致.                                                                                                                              解决方法: response.setHeader("Context-Type","text/html;charset=utf-8"); // 使浏览器用utf-8接收服务器发送过来的数据.

response.setHeader("Context-Type","text/html;charset=utf-8"); response.setContentType("text/html;charset=utf-8");两者等价

response.getOutputStream().write("中国".getBytes("utf-8"));// 把‘中国’以utf-8的格式存入response容器. getBytes()默认的编码是系统本地字符集

2) 字符流发送数据        getWriter()                                                                                                        乱码问题: 用字符流发送数据, 底层字符流要转换成字节流, 服务器不手动指定编码,默认使用iso8895-1码表,由于里面没有中文汉字,所以服务器发给客户端就是一堆乱码                                        服务器会根据getCharacterEncoding()方法返回的编码来发送数据. 如果没有指定, 则默认返回iso8895-1.                                                                                                                                              解决方法: 一. 指定服务器发送响应实体数据使用utf-8        response.setCharacterEncoding("utf-8")                                                                                                                                                                          二.指定浏览器在接收数据使用同一个码表          response.setHeader("Context-Type","text/html;charset=utf-8");   或者  response.setContentType("text/html;charset=utf-8");               注意: 通知浏览器使用什么编码接收服务器发送的数据, 服务器会使用相同的编码来发送数据, 所以指定服务器发送响应实体数据可以省略.                                                                                               getOutputStream()和getWriter()两个方法互斥, 在一次请求中调用了其中的一个方法,就不能调用另一个方法.                                                                                                                                        调用完getOutputStream()或getWriter()方法后, 不用手动关闭流, 服务器会自动帮助我们关闭.          这两个方法获取到的流并不是指向客户端的流, 而是指向response缓冲区的流, 通过流数据写入response缓冲区,service方法执行结束, 请求回到服务器, 服务器将数据打包给浏览器.

    综上: response.setContentType("text/html;charset=utf-8");可以解决乱码问题

2. 实现重定向

原理: 302+location, 通过设置状态码302和location响应头可以实现重定向

response.setStatus(302);                                                                                                                response.setHeader("location", "http://localhost/day11/index.jsp"); 

以上两行代码   <------>    response.sendRedirect("day11/index.jsp") 

特点: 两次请求,两次应答. | 服务器收到302+location后,自动发出新请求. | 地址栏发生变化. | 重定向可以访问服务器内部的资源, 也可以访问服务器外部的资源.                              

3. 实现定时刷新

概念: 通过Refresh响应头, 实现在多少秒之后跳转到另外一个资源

response.setHeader("refresh", "3;url=/day11/index.jsp");

特点: 两次请求,两次应答 | 在第二次请求前,会停留一段时间来显示第一次的响应内容 | 地址栏发生变化. | 重定向可以访问服务器内部的资源, 也可以访问服务器外部的资源. 

4.控制浏览器的缓存行为

1) 控制缓存资源

response.setDateHeader("Expires",System.currentTimemills()+缓存时间(ms))

response.setHeader("cache-control","max-age=缓存时间(s)")

2) 控制不缓存资源

response.setHeader("pragma","no-cache")   不缓存

response.setHeader("cache-control","no-cache")    不使用过期的资源

最后

以上就是怕孤独楼房最近收集整理的关于Response介绍的全部内容,更多相关Response介绍内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(59)

评论列表共有 0 条评论

立即
投稿
返回
顶部