zoukankan      html  css  js  c++  java
  • HttpServletResponse接口

    public interface HttpServletResponse extends ServletResponse

           描述一个返回到客户端的HTTP回应。这个接口允许Servlet程序员利用HTTP协议规定的头信息。

           成员变量

           public static final int SC_CONTINUE = 100;

           public static final int SC_SWITCHING_PROTOCOLS = 101;

           public static final int SC_OK = 200;

           public static final int SC_CREATED = 201;

           public static final int SC_ACCEPTED = 202;

           public static final int SC_NON_AUTHORITATIVE_INFORMATION = 203;

           public static final int SC_NO_CONTENT = 204;

           public static final int SC_RESET_CONTENT = 205;

           public static final int SC_PARTIAL_CONTENT = 206;

           public static final int SC_MULTIPLE_CHOICES = 300;

           public static final int SC_MOVED_PERMANENTLY = 301;

           public static final int SC_MOVED_TEMPORARILY = 302;

           public static final int SC_SEE_OTHER = 303;

           public static final int SC_NOT_MODIFIED = 304;

           public static final int SC_USE_PROXY = 305;

           public static final int SC_BAD_REQUEST = 400;

           public static final int SC_UNAUTHORIZED = 401;

           public static final int SC_PAYMENT_REQUIRED = 402;

           public static final int SC_FORBIDDEN = 403;

           public static final int SC_NOT_FOUND = 404;

           public static final int SC_METHOD_NOT_ALLOWED = 405;

           public static final int SC_NOT_ACCEPTABLE = 406;

           public static final int SC_PROXY_AUTHENTICATION_REQUIRED = 407;

           public static final int SC_REQUEST_TIMEOUT = 408;

           public static final int SC_CONFLICT = 409;

           public static final int SC_GONE = 410;

           public static final int SC_LENGTH_REQUIRED = 411;

           public static final int SC_PRECONDITION_FAILED = 412;

           public static final int SC_REQUEST_ENTITY_TOO_LARGE = 413;

           public static final int SC_REQUEST_URI_TOO_LONG = 414;

           public static final int SC_UNSUPPORTED_MEDIA_TYPE = 415;

           public static final int SC_INTERNAL_SERVER_ERROR = 500;

           public static final int SC_NOT_IMPLEMENTED = 501;

           public static final int SC_BAD_GATEWAY = 502;

           public static final int SC_SERVICE_UNAVAILABLE = 503;

           public static final int SC_GATEWAY_TIMEOUT = 504;

           public static final int SC_HTTP_VERSION_NOT_SUPPORTED = 505;

           以上HTTP产状态码是由HTTP/1.1定义的。

           方法

           1、addCookie

           public void addCookie(Cookie cookie);

           在响应中增加一个指定的cookie。可多次调用该方法以定义多个cookie。为了设置适当的头域,该方法应该在响应被提交之前调用。

           2、containsHeader

           public boolean containsHeader(String name);

           检查是否设置了指定的响应头。

           3、encodeRedirectURL

           public String encodeRedirectURL(String url);

           对sendRedirect方法使用的指定URL进行编码。如果不需要编码,就直接返回这个URL。之所以提供这个附加的编码方法,是因为在 redirect的情况下,决定是否对URL进行编码的规则和一般情况有所不同。所给的URL必须是一个绝对URL。相对URL不能被接收,会抛出一个 IllegalArgumentException。

           所有提供给sendRedirect方法的URL都应通过这个方法运行,这样才能确保会话跟踪能够在所有浏览器中正常运行。

           4、encodeURL

           public String encodeURL(String url);

           对包含session ID的URL进行编码。如果不需要编码,就直接返回这个URL。Servlet引擎必须提供URL编码方法,因为在有些情况下,我们将不得不重写URL, 例如,在响应对应的请求中包含一个有效的session,但是这个session不能被非URL的(例如cookie)的手段来维持。

           所有提供给Servlet的URL都应通过这个方法运行,这样才能确保会话跟踪能够在所有浏览器中正常运行。

    5、sendError

    public void sendError(int statusCode) throws IOException;

    public void sendError(int statusCode, String message) throws

    IOException;

    用给定的状态码发给客户端一个错误响应。如果提供了一个message参数,这将作为响应体的一部分被发出,否则,服务器会返回错误代码所对应的标准信息。

    调用这个方法后,响应立即被提交。在调用这个方法后,Servlet不会再有更多的输出。

    6、sendRedirect

    public void sendRedirect(String location) throws IOException;

    使用给定的路径,给客户端发出一个临时转向的响应(SC_MOVED_TEMPORARILY)。给定的路径必须是绝对URL。相对URL将不能被接收,会抛出一个IllegalArgumentException。

    这个方法必须在响应被提交之前调用。调用这个方法后,响应立即被提交。在调用这个方法后,Servlet不会再有更多的输出。

    7、setDateHeader

    public void setDateHeader(String name, long date);

    用一个给定的名称和日期值设置响应头,这里的日期值应该是反映自1970-1-1日(GMT)以来的精确到毫秒的长整数。如果响应头已经被设置,新的值将覆盖当前的值。

    8、setHeader

    public void setHeader(String name, String value);

    用一个给定的名称和域设置响应头。如果响应头已经被设置,新的值将覆盖当前的值。

    9、setIntHeader

    public void setIntHeader(String name, int value);

    用一个给定的名称和整形值设置响应头。如果响应头已经被设置,新的值将覆盖当前的值。

    10、setStatus

    public void setStatus(int statusCode);

    这个方法设置了响应的状态码,如果状态码已经被设置,新的值将覆盖当前的值。以下的几个方法将被取消

    11、encodeRedirectUrl

    public String encodeRedirectUrl(String url);该方法被encodeRedirectURL取代。

    12、encodeUrl

    public String encodeUrl(String url);该方法被encodeURL取代。

    13、setStatus

    public void setStatus(int statusCode, String message);

    这个方法设置了响应的状态码,如果状态码已经被设置,新的值将覆盖当前的值。如果提供了一个message,它也将会被作为响应体的一部分被发送。

    ******************************************************************************************************************

    1.HttpServletResponse对象

    (1).Web服务器收到一个http请求,会针对每个请求创建一个HttpServletRequest和 HttpServletResponse对象,向客户端发送数据找HttpServletResponse,从客户端取数据找 HttpServletRequest;

    (2).HttpServletResponse对象可以向客户端发送三种类型的数据:a.响应头b.状态码c.数据

    (3).自己去看HttpServletResponse的API

    (4).rsponse常见应用:

    a.使用OutputStream向客户端写入中文:

        String data = "中国";

        OutputStream stream = response.getOutputStream();//获取一个向Response对象写入数据的流,当tomcat服务器进行响应的时候,会将Response中的数据写给浏览器

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

        //此时在html页面会出现乱码,这是因为:服务器将"中国"按照UTF-8码表进行编码,得到对应的码值假设是98,99,服务器将码值发送给浏览器。浏览器默认按照GB2312进行解码,在GB2312码表中对应的字符已不是"中国"

        正确代码如下:

        response.setHeader("Content-type","text/html;charset=UTF-8");//向浏览器发送一个响应头,设置浏览器的解码方式为UTF-8

        String data = "中国";

        OutputStream stream = response.getOutputStream();

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

    b.使用Writer向客户端写入中文:

        PrintWriter writer = response.getWriter();

        writer.write("中国");//同样会出现乱码,这是因为我们将"中国"写入response对象时,tomcat服务器为了将数据通过网络传输给浏览器,必须进行编码,由于没有指定编码方式,默认采用ISO8859-1,

        当浏览器接收到数据后,根据GBK解码必然出现乱码

        正确代码如下:

        response.setCharacterEncoding("UTF_8");//设置Response的编码方式为UTF-8

        response.setHeader("Content-type","text/html;charset=UTF-8");//向浏览器发送一个响 应头,设置浏览器的解码方式为UTF-8,其实设置了本句,也默认设置了Response的编码方式为UTF-8,但是开发中最好两句结合起来使用

        //response.setContentType("text/html;charset=UTF-8");同上句代码作用一样

        PrintWriter writer = response.getWriter();

        writer.write("中国");

    c.使用Response实现文件下载:

        String path = this.getServletContext.getRealPath(“/中国.jpg”);

        String fileName = path.subString(path.lastIndexOf(“\”));

        Response.setHeader(“content-disposition”,”attachment;filename”+URLENcode    r.encode(fileName,”UTF-8”));//设置响应头,告诉浏览器,该响应是下载响应,如果文件名包含中文,必须使用URL编码

        ……对文件进行读写

  • 相关阅读:
    STL
    STL
    Python编程-基础知识-条件判断
    STL
    springmvc 自定义注解
    Springboot 入口类及其实现自动配置的原理
    Java RestTemplate post请求传递参数遇到的坑
    Spring中@Autowire的底层原理解析(附详细源码阅读步骤)
    非常详细的SpringBoot-自动装配原理
    为何一个@LoadBalanced注解就能让RestTemplate拥有负载均衡的能力?
  • 原文地址:https://www.cnblogs.com/opaljc/p/3355385.html
Copyright © 2011-2022 走看看