• servlet 服务器HTTP响应头设置示例(response用法)


    1,Location

    用于重定向,和返回状态码302结合使用。

    代码示例:

    response.setStatus(302);

    response.setHeader("location","/day20131128/1.html");

    这样,当请求服务器的时候可以重定向到这个/day20131128/1.html文件

    也可以这样:

    response.sendRedirect("/day20131128/1.html");//是上面两句的合成版。

    重定向会向服务器发送两次请求,加重服务器负担。地址栏会变。完成购买这样的操作要重定向,而不要用转发,不然刷新就会又买一次,客户会愤怒。

    2,Content-Encoding,gzip,Content-Length

    用于指定压缩格式,和压缩长度,gzip就是压缩格式的。电信会以流量向大网站收钱,所以压缩可以省钱。。。

    关于如何压缩的代码示例:

    String data = "abcd";//要压缩给客户端的数据

    ByteArrayOutputStream bout = new ByteArrayOutStream();

    /*下面三行将数据压缩*/

     GZIPOutputStream gout = new GZIPOutputStream(bout);

    gout.write(data.getBytes());

    gout.close();

    byte gzip = bout.toByteArray();//获取压缩后的数据

    //通知浏览器数据采用的压缩格式和长度

    response.setHeader("Content-Encoding","gzip");

    response.setHeader("Content-Length",gzip.length+"");

    response.getOutoutStream().write(gzip);

    3,Content-Type

    response.setHeader("content-type","image/bmp"); //设置文件的格式请参考Tomcat的web配置文件,如下图

     InputStream in = this.getServletContext().getResourceAsStream("/1.bmp");

    int len = 0;

    byte buffer[] = new byte[1024];

    OutputStream out = response.getOutputStream();

    while((len=in.read(buffer))>0){

      out.write(buffer,0,len);

    }

    再来两个设置文字格式的例子:

    response.setHeader("Content-type","text/html;charset=UTF-8"); //设置文字格式

    String data = "中国";

    OutputStream out = response.getOutputStream();

    out.write(data.getBytes("UTF-8"));

    response.setCharacterEncoding("UTF-8");

    //response.setHeader("Content-type","text/html;charset=UTF-8"); //设置文字格式

    response.setContentType("text/html;charset=UTF-8"); //以上一句可以换成这一句

    String data = "中国";

    PrintWriter out = response.getWriter();

    out.write(data);

    4,Refresh

     服务器通知浏览器隔多长时间,刷新一次页面。比如聊天室。

    代码:

    response.setHader("refresh","3");//三秒刷新一次。

    //

    response.setHader("refresh","3;url='http://www.baidu.com'");//三秒后跳转到百度。

    String data = "aaaa";

    response.getOutputStream().write(data.getBytes());

    5,Content-Disposition

    告诉浏览器,以下载方式打开数据。

    代码:

    response.setHeader("content-disposition","attachment;filename=3.jpg"); //

    InputStream in = this.getServletContext().getResourceAsStream("/3.jpg");

    int len = 0;

    byte buffer[] = new byte[1024];

    OutputStream out = response.getOutputStream();

    while((len=in.read(buffer))>0){

      out.write(buffer,0,len);

    }

    文件名是汉语名:

    String path = this.getServletContext().getRealPath("/download/美女.jpg");

    String filename = path.substring(path.lastIndexOf("\")+1);

    response.setHeader("content-disposition","attachment;filename=" + URLEncoder.encode(filename,"UTF-8")); //汉字需要经过URL编码

    InputStream in = null;

    OutputStream out = null;

    try{

      in = new FileInputStream(path);

      int len = 0;

      byte buffer[] = new byte[1024];

      out = response.getOutputStream();

      while((len = in.read(buffer))>0){

        out.write(buffer,0,len);

      }

    }finally{

      if(in!=null){

        try{

          in.close();

        }catch(Exception e){

          e.printStackTrace();

        }

      }

    }

    6,Transfer-Encoding

    服务器通过该头告诉浏览器数据的传送格式,chunked表示块传送

    7,Set_cookie:SS=Q0=5Lb_nQ;path=/search

    8,ETag

    缓存相关。服务器根据 web资源的内容生成的 资源对应的串、标示符,客户机发送来的数据会带着服务器发给它的ETag这个东西。服务器根据这个东西有没有改变来决定是否让客户机调用其缓存。这个可以实现实时性很高的更新。如果是按If-Modifed-Since和Last-Modified来确定更新,则在500ms内的差别会被忽略。

    9,Expires

    服务器通过这个,告诉浏览器把服务器发送的资源缓存保存到什么时间。-1或0,则不缓存。

    response.setDataHeader("expires",Sysem.currentTimeMillis()+1000*3600);//缓存数据3600秒。剩下这一个小时再访问这个servlet都不会向服务器发送请求,而是直接去拿缓存。

    String data = "djklasja";

     response.getWriter().write(data);

    10,以下两个头和也是控制浏览器不要缓存。实时性要求很高的数据不要缓存,比如股票行情。

    Cache-Control:no-cache

    Pragma:no-cache

    11,Range

    HTTP请求头字段:

    该头指示服务器只传输一部分呢Web资源,可以实现断点续传功能。Range字段可以通过三种格式设置要传输的字节范围:

    Range: bytes=1000-2000  传输范围从1000到2000字节。

    Range: bytes=1000-     传输Web资源中第1000个字节以后的所有内容。

    Range: bytes=1000     传输最后1000个字节。

    HTTP响应消息头字段:

     Accept-Ranges:这个字段说明Web服务器是否支持Range。支持则返回“Accept-Ranges:bytes”,不支持则“Accept-Ranges:none”。

    Content-Range:指定了范围的Web资源的字节发内,这字段值的格式是:Content-Range:1000-3000/5000(返回给客户端1000字节到3000字节部分,整个资源大小为5000)

    客户端模拟请求服务器某资源5个字节后的内容下载:

    URL url = new URL(http://localhost:8080/day05/a.txt);

    HttpURLConnection conn = (HttpURLConnection)url.openConnection();

    conn.setRequestProperty("Range","bytes=5-");//Tomcat6以上才开始支持断点续传

    InputStream in = conn.getInputStream();

    int len = 0;

    byte buffer[] = new byte[1024];

    FileOutputStream out = new FileOutputStream("c:\a.txt",true);//true表示从后边接着写,而非从头覆盖。

    while((len = in.read (byte))!=-1)

      out.write(buffer,0,len);

    in.close();

    out.close();

  • 相关阅读:
    SpringCloud Alibaba开篇:SpringCloud这么火,为何还要学习SpringCloud Alibaba?
    SpringBoot整合原生OpenFegin的坑(非SpringCloud)
    Git入门教程,详解Git文件的四大状态
    全世界最强的算法平台codeforces究竟有什么魅力?
    设计模式第二篇,链式方法模式
    matplotlib设置颜色、标记、线条,让你的图像更加丰富
    20行代码实现,使用Tarjan算法求解强连通分量
    深入理解SVM,详解SMO算法
    手把手教你配置git和git仓库
    设计模式 | Catalog设计模式,抵御业务方需求变动
  • 原文地址:https://www.cnblogs.com/flying607/p/3448311.html
Copyright © 2020-2023  润新知