响应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状态码

 

posted @ 2016-11-27 10:25  liurio  阅读(2296)  评论(0编辑  收藏  举报