zoukankan      html  css  js  c++  java
  • 响应HttpServletResponse

      可以使用HttpServletResponse来对浏览器进行响应,大部分情况下,会使用setContentType()设置响应类型,使用getWriter()取得PrintWriter对象,而后使用PrintWriter的println()等方法输出。

    一、设置响应标头、缓冲区

      使用setHeader()、addHeader()来设置响应标头,setHeader()设置标头名称与值。如果标头是整数,可以使用setIntHeader()、addIntHeader()方法。所有的标头设置都必须在响应确认Commit之前。

      容器可以对响应进行缓冲,getBufferSize()、setBuffferSize()、isCommitted()、reset()、resetBuffer()、flushBuffer()等。setBufferSize()必须在getWriter()之前调用。isCommitted用来查看是否响应确认。reset()重置,会连设置的标头一起重置。但是resetBuffer()会重置响应内容,不会重置标头。flushbuffer()会清除flush所有的缓冲区中已设置的响应信息至客户端。

      HttpServletResponse对象若被容器关闭,则必须清除所有的响应内容,响应对象被关闭的时机点有以下几种:

        1、Servlet的service()方法已经结束,响应的内容长度超过HttpServletResponse的setContentLength()所设置的长度。

        2、调用了sendRedirect()方法

        3、调用了sendError()方法

        4、调用了AsyncContext的complete()方法。

    二、使用getWriter()输出字符

      如果要对浏览器输出HTML,会通过getWriter()取得PrintWriter对象,然后制定字符串进行输出。例如:

        PrintWriter out = response.getWriter();

        out.println("<html>");

        out.println("<head>");

      在没有设置任何编码之前,使用的字符编码默认是ISO-8859-1。如果输出中文,会出现乱码。浏览器如果有发送Accept-Language标头,可以用getLocale()来取得一个Locale对象,代表客户端可以接受的语系。response.setLocale(Locale.TAIWAN);也可以使用response.setCharacterEncoding("UTF-8");或者resposne.setContentType("text/html;charset=UTF-8");

      例1:示范了如何在用户名称上加上超链接并设置mailto:与所发送的电子邮件,如果用户直接点击链接,就会打开默认的邮件程序。

     1 package cc.openhome;
     2 
     3 import java.io.IOException;
     4 import java.io.PrintWriter;
     5 
     6 import javax.servlet.ServletException;
     7 import javax.servlet.annotation.WebServlet;
     8 import javax.servlet.http.HttpServlet;
     9 import javax.servlet.http.HttpServletRequest;
    10 import javax.servlet.http.HttpServletResponse;
    11 
    12 /**
    13  * Servlet implementation class Pet
    14  */
    15 @WebServlet("/pet")
    16 public class Pet extends HttpServlet {
    17     private static final long serialVersionUID = 1L;
    18        
    19     /**
    20      * @see HttpServlet#HttpServlet()
    21      */
    22     public Pet() {
    23         super();
    24         // TODO Auto-generated constructor stub
    25     }
    26 
    27     /**
    28      * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
    29      */
    30     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    31         // TODO Auto-generated method stub
    32     }
    33 
    34     /**
    35      * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
    36      */
    37     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    38         // TODO Auto-generated method stub
    39         request.setCharacterEncoding("UTF-8");
    40         response.setContentType("text/html; charset=UTF-8");
    41         PrintWriter out=response.getWriter();
    42         out.println("<html>");
    43         out.println("<head>");
    44         out.println("<title>感谢填写</title>");
    45         out.println("</head>");
    46         out.println("<body>");
    47         out.println("联系人:<a href='mailto:"+request.getParameter("email")+"'>"+request.getParameter("user")+"</a>");
    48         out.println("<br>喜欢的宠物类型");
    49         out.println("<ul>");
    50         for(String type:request.getParameterValues("type")){
    51             out.println("<li>"+type+"</li>");
    52         }
    53         out.println("</ul>");
    54         out.println("</body>");
    55         out.println("</html>");
    56         out.close();
    57     }
    58 
    59 }
    Pet.java
     1 <!DOCTYPE html>
     2 <html>
     3 <head>
     4     <meta http-equiv="Content-Type" content="Text/html; charset=UTF-8">
     5     <title>Insert title here</title>
     6 </head>
     7 <body>
     8     <form action="pet" method="post">
     9         姓名:<input type="text" name="user" value=""><br>
    10         邮件:<input type="text" name="email" value=""><br>
    11         你最喜欢的 宠物:<br>
    12         <select name="type" size="6" multiple="true">
    13             <option value="猫"></option>
    14             <option value="狗"></option>
    15             <option value="鱼"></option>
    16             <option value="鸟"></option>
    17         </select><br>
    18         <input type="submit" value="送出"/>
    19     </form>
    20 </body>
    21 </html>
    form.html

       运行结果:

        

    三、使用sendRedirect()、sendError()

      可以使用HttpServletResponse的sendRedirect()方法要求浏览器重新请求一个URL,如response.sendRedirect("http://openhome.cc");

      如果在处理请求过程中,发现了一些错误,而你想要传送服务器默认的状态与错误信息,可以使用sendError()方法。如

        response.sendError(HttpServletResponse.SC_NOT_FOUND);//会响应404状态码

  • 相关阅读:
    iOS 学习
    swift
    (九)Javabean与Jsp(来自那些年的笔记)
    (八)JSP 技术知识点总结(来自那些年的笔记)
    java抽象工厂模式
    java工厂方法模式
    java的简单工厂模式
    服务提供者框架讲解 之 myJDBC
    第一条:考虑用静态工厂方法代替构造器
    另辟蹊径的归并排序复杂度分析
  • 原文地址:https://www.cnblogs.com/liuzhongfeng/p/6106025.html
Copyright © 2011-2022 走看看