首页 > 代码库 > HttpServletResponse

HttpServletResponse

HTTP协议包含请求和响应部分。
HttpServletRequest就代表着请求部分
HttpServletResponse就代表着响应部分

 

常见应用:

  1、文件下载(不知道怎么贴代码就不贴了)

    

    通知客户端以下载的方式打开
    response.setHeader("Content-type", "text/html;application/octet-stream");
    response.setHeader("Content-Disposition", "attachment;filename=1.jpg");

    如果文件是中文名的话

    

    String path = getServletConfig().getServletContext().getRealPath("/美女.jpg");
    //通知客户端以下载的方式打开
    String name = path.substring(path.lastIndexOf("\\")+1);
    response.setHeader("Content-type", "text/html;application/octet-stream");
    response.setHeader("Content-Disposition", "attachment;filename="+URLEncoder.encode(name, "utf-8")+"");

  2、输出中文数据

    

    字节流:
    out.write("中文".getBytes("UTF-8"));有乱码
    解决办法:
    方式一:更改浏览器的查看编码(不可取)

    通知浏览器,使用的码表
    方式二:response.setHeader("Content-Type", "text/html;charset=UTF-8");
    方式三:response.getOutputStream().write("<meta http-equiv=‘Content-Type‘ content=‘text/html;charset=UTF-8‘>".getBytes("UTF-8"));
    *方式四:response.setContentType("text/html;charset=UTF-8");//方式二、三、四都是一样的

    字符流:
    Servlet中的字符流默认查ISO-8859-1(SUN的Servlet规范要求的)
    如何更改这个默认的编码呢?response.setCharacterEncoding("UTF-8");

    //不要忘记通知浏览器的编码
    response.setCharacterEncoding("UTF-8");
    response.setHeader("Content-Type", "text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();
    out.write(s);//默认查的是ISO-8859-1码表(SUN的Servlet规范要求的)


    在字符流输出中文数据时:response.setContentType("text/html;charset=UTF-8");
    有两个作用:通知字符流以UTF-8编码输出
    通知客户端以UTF-8解码显示

  3、动态生成验证码

  

  4、控制缓存时间

  发送HTTP头控制缓存时间

  response.setDateHeader(“Expires”, System.currentTimeMillis()+1000*60*60);//缓存1小时

  5、定时刷新

  发送HTTP头

  response.setHeader("Refersh",1);//每隔一秒刷新本页面

  response.setHeader("Refersh",5;URL=1.html);//5秒钟之后跳转到1.html

  6、请求重定向

  

    通过response实现请求重定向。 请求重定向指:一个web资源收到客户端请求后,通知客户端去访问另外一个web资源,这称之为请求重定向。 地址栏会变,并发送2次    请求,增加服务器负担 实现方式 response.sendRedirect() 实现原理: 302/307状态码和location头即可实现重定向

  7、细节

  

  字节流和字符流不能同时使用,互斥的。
  通过字符流或字节流输出的数据并不是直接打给浏览器的。而是把数据写到response对象的缓存中的。服务器从缓存中取出数据,按照HTTP协议的响应格式输出给浏览器。
  如果你调用的response的输出流没有主动关闭,服务器会替你关的。