• HttpServletResponse接口


    HttpServletResponse接口是ServletResponse的子接口,HttpServlet类的重载service()方法及doGet()和doPost()等方法都有一个HttpServletResponse类型参数:

    protected void service(HttpServletRequest req, HttpServletResponse resp)
    throws ServletException, IOException

    HttpServletResponse 接口提供了与 HTTP 协议相关的一些方法,Servlet 可通过这些方法来设置HTTP响应头或向客户端写Cookie。

    addHeader(String name, String value):向HTTP响应头中加入一项内容。

    sendError(int sc):向客户端发送一个代表特定错误的HTTP响应状态代码。

    sendError(int sc, String msg):向客户端发送一个代表特定错误的HTTP响应状态代码,并且发送具体的错误消息。

    setHeader(String name, String value):设置HTTP响应头中的一项内容。如果在响应头中已经存在这项内容,那么原先所做的设置将被覆盖。

    setStatus(int sc):设置HTTP响应的状态代码。

    addCookie(Cookie cookie):向HTTP响应中加入一个Cookie。

    在HTTPServletResponse接口中定义了一些代表HTTP响应状态代码的静态常量,如下所示。

    HTTPServletResponse. SC_BAD_REQUEST:对应的响应状态代码为400。

    HTTPServletResponse. SC_FOUND:对应的响应状态代码为302。

    HTTPServletResponse. SC_METHOD_NOT_ALLOWED:对应的响应状态代码为405。

    HTTPServletResponse. SC_NON_AUTHORITATIVE_INFORMATION:对应的响应状态代码为203。

    HTTPServletResponse. SC_FORBIDDEN:对应的响应状态代码为403。

    HTTPServletResponse. SC_NOT_FOUND:对应的响应状态代码为404。

    HTTPServletResponse. SC_OK:对应的响应状态代码为200。

    例程4-4的HelloServlet类的doGet()方法先得到username请求参数,对其进行中文字符编码转换,然后判断username参数是否为null。如果满足条件,就直接返回一个代表特定错误的 403 响应状态代码;否则,就通过 HttpServletResponse 对象的getWriter()方法得到一个PrintWriter对象,然后通过PrintWriter对象来输出一个HTML文档。

    例程4-4  HelloServlet.java

    public class HelloServlet extends HttpServlet {
    public void doGet(HttpServletRequest request,HttpServletResponse response)
    throws ServletException, IOException {
    //获得username请求参数
    String username=request.getParameter("username");
        /*字符编码转换。
    HTTP请求的默认字符编码为ISO-8859-1,如果请求中包含中文,
    需要把它转换为GB2312中文编码。*/
        if(username!=null)
    username=new String(username.getBytes("ISO-8859-1"),"GB2312");
        if(username==null){
    //仅仅为了演示response.sendError()的用法。
    response.sendError(response.SC_FORBIDDEN);
    return;
    }
        //设置HTTP响应的正文的MIME类型及字符编码
    response.setContentType("text/html;charset=GB2312");
        /*输出HTML文档*/
    PrintWriter out = response.getWriter();
    out.println("<html><head><title>HelloServlet</TITLE></head>");
    out.println("<body>");
    out.println("你好: "+username);
    out.println("</body></html>");
        System.out.println("before close():"+response.isCommitted()); //false
    out.close(); //关闭PrintWriter
    System.out.println("after close():"+response.isCommitted()); //true
    }
    }

    Tips

    为了节省篇幅,本书列出的部分类的源代码省略了开头的 package 语句和import语句。在本书附赠光盘中提供了范例的完整源代码。

    以上HelloServlet类利用HttpServletResponse对象的setContentType()方法来设置响应正文的MIME类型及字符编码。“text/html”表示响应正文为HTML文档,“GB2312”表示响应正文采用中文字符编码。以下3种方式是等价的,都能设置HTTP响应正文的MIME类型及字符编码:

    //方式一
    response.setContentType("text/html;charset=GB2312");
    //方式二
    response.setContentType("text/html");
    response.setCharacterEncoding("GB2312");
    //方式三
    response.setHeader("Content-type","text/html;charset=GB2312");

    HelloServlet类的service()方法最后调用PrintWriter对象的close()方法关闭底层输出流,该方法在关闭输出流之前会先把缓冲区内的数据提交到客户端。因此在调用PrintWriter 对象的 close()方法之前,response.isCommitted()方法返回 false;而在调用PrintWriter对象的close()方法之后,response.isCommitted()方法返回true。HelloServlet类的service()方法中的“System.out.println(…)”语句把内容打印到Tomcat服务器所在的控制台。

  • 相关阅读:
    网页对ipad iphone 的样式支持
    Url Properties of SPSite and SPWeb
    vs 2010 中添加 代码模板,动态生成创建时间,创建作者等信息
    明确工作目标,提升工作效率的利器Momentum插件
    与父亲相处的无奈
    VS2012一打开就停止工作的解决方法
    关于SQL Server 中连接查询Join的几种常见用法
    CSS零基础学习笔记.
    SQL Server2014,附加数据库失败,错误为:5120的解决方法
    C#Abstract抽象类的语法
  • 原文地址:https://www.cnblogs.com/langtianya/p/2883221.html
Copyright © 2020-2023  润新知