zoukankan      html  css  js  c++  java
  • Servlet-HttpServletResponse对象

    概述

    servlet-api 4.0.1版本

    Web服务器收到客户端的http请求,会针对每一次请求,创建一个代表响应的response对象,这个对象中封装了向客户端发送数据、发送响应头,发送响应状态码的方法。

    详细方法可以在IDEA里直接点进去看

    常用方法

    HttpServletResponse

    扩展ServletResponse接口以在发送响应时提供特定于HTTP的功能

    可以找到所有的响应码:

    public void addCookie(Cookie cookie); // 将指定的cookie添加到响应中。可以多次调用此方法来设置多个cookie
    
    public boolean containsHeader(String name); // 返回一个布尔值,指示命名的响应头是否已经设置
    
    public String encodeURL(String url); // 
    
    public String encodeRedirectURL(String url); // 编码含有中文的重定向链接
    
    public void sendError(int sc, String msg) throws IOException;
    
    public void sendError(int sc) throws IOException;
    
    public void sendRedirect(String location) throws IOException; // 重定向功能
    
    public void setDateHeader(String name, long date); // 设定具有指定日期的头
    
    public void addDateHeader(String name, long date);
    
    public void setHeader(String name, String value); // 使用给定的名称和值设置响应头。 如果已设置,则新值将覆盖前一个值
    
    public void addHeader(String name, String value); // 添加具有给定名称和值的响应头。 此方法允许响应标头具有多个值
    
    public void setIntHeader(String name, int value); // 用给定的名称和整数值设置响应头。 如果已设置标题,则新值将覆盖前一个值
    
    public void addIntHeader(String name, int value); // 添加具有给定名称和整数值的响应标头。 此方法允许响应标头具有多个值
    
    public void setStatus(int sc); // 设置此响应的状态码
    
    public int getStatus(); // 获取此响应的当前状态代码
    
    public String getHeader(String name);  // 获取具有给定名称的响应头的值。如果具有给定名称的响应标头存在并且包含多个值,则将返回最先添加的值。
    
    public Collection<String> getHeaders(String name);  // 获取具有给定名称的响应头的值组
    
    public Collection<String> getHeaderNames(); // 获取此响应的标头名称
    

    ServletResponse

    public String getCharacterEncoding(); // 返回用于此响应中发送的正文的字符编码(MIME字符集)的名称
    
    public String getContentType(); // 返回用于此响应中发送的MIME正文的内容类型。 在提交响应之前,必须已经使用setContentType指定了适当的内容类型
    
    public ServletOutputStream getOutputStream() throws IOException; // 返回适合于在响应中写入二进制数据的ServletOutputStream。 Servlet容器不对二进制数据进行编码
    
    public PrintWriter getWriter() throws IOException; // 返回一个PrintWriter对象,该对象可以将字符文本发送到客户端。 PrintWriter使用getCharacterEncoding返回的字符编码
    
    public void setCharacterEncoding(String charset); // 设置用于此响应中发送的正文的字符编码(MIME字符集)的名称
    
    public void setContentType(String type); // 设置用于此响应中发送的MIME正文的内容类型
    
    public void setContentLength(int len);
    
    public void setBufferSize(int size); // 设置响应主体的首选缓冲区大小。 Servlet容器将使用至少与请求的大小一样大的缓冲区
    
    public int getBufferSize(); // 返回用于响应的实际缓冲区大小。 如果不使用缓冲,则此方法返回0
    
    public void flushBuffer() throws IOException; // 强制将缓冲区中的任何内容写入客户端。 对此方法的调用将自动提交响应,这意味着将写入状态代码和标头
    
    public void resetBuffer(); // 清除响应中基础缓冲区的内容,而不清除标头或状态码
    
    public boolean isCommitted(); // 返回一个布尔值,指示是否已提交响应。 提交的响应已经写入了其状态代码和标头
    
    public void reset(); // 清除缓冲区中存在的所有数据以及状态代码,标头
    
    public void setLocale(Locale loc); // 设置响应的语言环境。 如果尚未使用setContentType或setCharacterEncoding显式设置字符编码,它还会针对区域设置适当地设置响应的字符编码
    
    public Locale getLocale(); // 使用setLocale方法返回为此响应指定的语言环境。  如果未指定任何语言环境,则返回容器的默认语言环境。
    

    细节:

    • response获得的流不需要手动关闭,web容器(tomcat容器)会帮助我们关闭
    • getWriter和getOutputStream不能同时调用
    • 重定向语句一般作为终结代码

    浏览器乱码问题

    设置浏览器响应类型,指定浏览器解析时用的编码,包含setCharacterEncoding()功能,写在开头

    response.setContentType("text/html;charset=UTF-8"); 
    

    重定向

    B一个web资源收到客户端A请求后,B他会通知A客户端去访问另外一个web资源C,这个过程叫重定向

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 重定向到 /hello
        // 如果有项目名要加上完整路径 /myweb/hello
        response.sendRedirect("/hello");
    }
    

    重定向和转发的区别

    • 相同点
      * 页面都会实现跳转
    • 不同点
      * 请求转发的时候,url不会产生变化,不需要加虚拟路径,307
      * 重定向时候,url地址栏会发生变化,需要加虚拟路径,302

    验证

  • 相关阅读:
    Navicat连接mysql出现10061/10060错误的解决
    对话守则
    一次Django admin bug解决的思维过程
    Think different
    SVN版本库的迁移
    Windows Phone 8 锁屏背景与通知
    Windows Phone 7 应用升级 Windows phone 8 方案预览 选择合适的 Key Feature
    从 windows phone7 到 windows phone 8 更新 如何设配两个版本
    windows phone 8 语音 Speech for Windows Phone 8
    windows phone 8 中的应用间通信
  • 原文地址:https://www.cnblogs.com/shenleg/p/14252309.html
Copyright © 2011-2022 走看看