Servlet自学第15讲:http响应详解

来源:互联网 发布:教小孩学编程 编辑:程序博客网 时间:2024/04/30 10:59

http响应介绍

一个http响应代表服务器向浏览器回送的数据
http响应的基本结构:
这里写图片描述

  1. 状态行:
    格式:HTTP版本号 状态码 原因叙述
    举例:HTTP/1.1 200 OK
    状态码 含义
    100-199:表示成功接收请求,要求客户端继续提交下一次请求才能完成整个处理过程
    200-299 :表示成功接收请求并完成整个处理过程,常用200
    300-399 :为完成请求,客户需要进行一步细化请求。例如:请求的资源已经移动一个新的地址,常用302,307
    400-499 :客户端的请求有错误 404
    500-599 :服务器端出现错误,常用500
  2. 状态行举例说明:
    200 就是整个请求和响应过程没有发生错误,这个最常见.
    302: 表示当你请求一个资源的时候,服务器返回302 表示,让浏览器转向到另外一个资源,比如: response.sendRedirect(“/web应用/资源名”)
response.setStatus(302);response.setHeader("Location", "/servletPro/Servlet2");    // 上面两句话等价  response.sendRedirect("/servletPro/Servlet2");

404: 找不到资源
500: 服务器端错误

http响应消息头详解

  1. Location: http://www.baidu.org/index.jsp 【让浏览器重新定位到url】
  2. Server:apache tomcat 【告诉浏览器我是tomcat】
  3. Content-Encoding: gzip 【告诉浏览器我使用 gzip】
  4. Content-Length: 80 【告诉浏览器会送的数据大小80节】
  5. Content-Language: zh-cn 【支持中文】
  6. Content-Type: text/html; charset=GB2312 [内容格式text/html; 编码gab2312]
  7. Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT 【告诉浏览器,该资源上次更新时间】
  8. Refresh: 1;url=http://www.baidu.com 【过多久去,刷新到 http://www.baidu.com】
  9. Content-Disposition: attachment; filename=aaa.zip 【告诉浏览器,有文件下载】
  10. Transfer-Encoding: chunked [传输的编码]
  11. Set-Cookie:SS=Q0=5Lb_nQ; path=/search[后面详讲]
  12. Expires: -1[告诉浏览器如何缓存页面IE]
  13. Cache-Control: no-cache [告诉浏览器如何缓存页面火狐]
  14. Pragma: no-cache [告诉浏览器如何缓存页面]
  15. Connection: close/Keep-Alive [保持连接 1.1是Keep-Alive]
  16. Date: Tue, 11 Jul 2000 18:23:51 GMT

常用的几个http响应消息头介绍

  1. refresh消息头
    定时刷新网页的作用
response.setHeader("Refresh", "5;url=/servletPro/Servlet2");
  1. 文件下载 Content-Disposition
public void doGet(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        response.setContentType("text/html");        //PrintWriter out = response.getWriter();        //演示下载文件        response.setHeader("Content-Disposition", "attachment; filename=winter.jpg");        //打开文件.说明一下web 站点下载文件的原理        //1.获取到要下载文件的全路径        String path=this.getServletContext().getRealPath("/images/Winter.jpg");        //System.out.println("path="+path);        //2创建文件输入流        FileInputStream fis=new FileInputStream(path);        //做一个缓冲字节数组        byte buff[]=new byte[1024];        int len=0;//表示实际每次读取了多个个字节        OutputStream os=response.getOutputStream();        while((len=fis.read(buff))>0){            os.write(buff, 0, len);        }        //缺点: 没有进度条./图标/        //关闭        os.close();        fis.close();    }
  1. 页面缓存
    提出问题:浏览器默认情况下,会缓存我们的页面,这样出现一个问题:如果我们的用户习惯把光标停留在地址栏,然后回车来取页面,就会默认调用cache中取数据。
    (不同浏览器识别的消息头不同,所以有多个)
        //指定该页面不缓存 Ie        response.setDateHeader("Expires", -1);【针对IE浏览器设置不缓存】        //为了保证兼容性.        response.setHeader("Cache-Control", "no-cache");【针对火狐浏览器等】        response.setHeader("Pragma", "no-cache");【其他浏览器】

有些网站要求网页缓存一定时间,比如缓存一个小时:

response.setDateHeader("Expires", System.currentTimeMillis()+3600*1000*24);//后面一个参数表示设置的缓存保持时间,-1表示永远缓存
0 0
原创粉丝点击