可以使用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:与所发送的电子邮件,如果用户直接点击链接,就会打开默认的邮件程序。

 package cc.openhome;

 import java.io.IOException;
import java.io.PrintWriter; import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; /**
* Servlet implementation class Pet
*/
@WebServlet("/pet")
public class Pet extends HttpServlet {
private static final long serialVersionUID = 1L; /**
* @see HttpServlet#HttpServlet()
*/
public Pet() {
super();
// TODO Auto-generated constructor stub
} /**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
} /**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");
PrintWriter out=response.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<title>感谢填写</title>");
out.println("</head>");
out.println("<body>");
out.println("联系人:<a href='mailto:"+request.getParameter("email")+"'>"+request.getParameter("user")+"</a>");
out.println("<br>喜欢的宠物类型");
out.println("<ul>");
for(String type:request.getParameterValues("type")){
out.println("<li>"+type+"</li>");
}
out.println("</ul>");
out.println("</body>");
out.println("</html>");
out.close();
} }

Pet.java

 <!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="Text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="pet" method="post">
姓名:<input type="text" name="user" value=""><br>
邮件:<input type="text" name="email" value=""><br>
你最喜欢的 宠物:<br>
<select name="type" size="6" multiple="true">
<option value="猫">猫</option>
<option value="狗">狗</option>
<option value="鱼">鱼</option>
<option value="鸟">鸟</option>
</select><br>
<input type="submit" value="送出"/>
</form>
</body>
</html>

form.html

  运行结果:

    

三、使用sendRedirect()、sendError()

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

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

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

响应HttpServletResponse的更多相关文章

  1. Struts2之HelloWorld

    首先既然是开发Struts程序的话,那么自然需要用到Struts2开发包,Struts2是apache旗下的开源框架,所有的开发包和源代码都可以在Apache官网下载. 那么,就来开始编写第一个Str ...

  2. Web.xml详解(转)

    这篇文章主要是综合网上关于web.xml的一些介绍,希望对大家有所帮助,也欢迎大家一起讨论. ---题记 一.            Web.xml详解: (一)  web.xml加载过程(步骤) 首 ...

  3. struts2执行流程

    当Web容器收到 请求(HttpServletRequest) 1.它将请求传递给一个标准的的过滤链包括 (ActionContextCleanUp)过滤器 2.然后经过Other filters(S ...

  4. ActionContext和ServletActionContext区别

    1. ActionContext 在Struts2开发中,除了将请求参数自动设置到Action的字段中,我们往往也需要在Action里直接获取请求(Request)或会话(Session)的一些信息, ...

  5. Struts2应用流程注解

    当Web容器收到请求(HttpServletReques   t)它将请求传递给一个标准的的过滤链包括(ActionContextCleanUp)过滤器. 经过Other filters(SiteMe ...

  6. kinderEditor + Struts2整合

    环境: kinderEditor4.1.5 Struts2.3.5 Spring3.0.5 Hibernate3.6 代码: FileManageAction package com.hcsoft.p ...

  7. SSH框架总结(框架分析+环境搭建+实例源码下载) 《转》

    这篇文章比较易懂,易理解: 首先,SSH不是一个框架,而是多个框架(struts+spring+hibernate)的集成,是目前较流行的一种Web应用程序开源集成框架,用于构建灵活.易于扩展的多层W ...

  8. SSH框架总结(框架分析+环境搭建+实例源码下载)

    来源于: http://blog.csdn.net/shan9liang/article/details/8803989 首先,SSH不是一个框架,而是多个框架(struts+spring+hiber ...

  9. JSP/Servlet基础语法

    相关学习资料 http://my.oschina.net/chape/blog/170247 http://docs.oracle.com/cd/E13222_01/wls/docs81/webapp ...

随机推荐

  1. android 1.6 launcher研究之自定义ViewGroup (转 2011.06.03(二)——— android 1.6 launcher研究之自定义ViewGroup )

    2011.06.03(2)——— android 1.6 launcher研究之自定义ViewGroup2011.06.03(2)——— android 1.6 launcher研究之自定义ViewG ...

  2. 挂载了Cinder Volume的实例无法动态迁移排错

    现象:挂载了Cinder Volume的实例无法动态迁移 [root@node-5 nova]# tail -f compute.log 2016-01-13 16:36:12.870 18762 E ...

  3. 基于Verilog HDL 各种实验

    菜鸟做的的小实验链接汇总:           1.基于Verilog HDL 的数字时钟设计 2.乘法器 3.触发器(基本的SR触发器.同步触发器.D触发器) 4.基于Verilog HDL的ADC ...

  4. Struts2--Global Result全局结果集

    如果有很多action,有共同的result指向, 而且属于不同的包,那么可以继承上面的包, 然后写一个<global-results> 1. jsp显示文件: <ol> &l ...

  5. 密钥public/private key登陆linux

    Public Key认证是什么这是一种认证方法,类似于常见的用户名密码认证方法.不同的是需要在客户端机器上保留一个很长很长的加密key,而在服务器端需要做出相应的配置.当客户端想要访问服务器时,服务器 ...

  6. iOS系统弃用方法更新方法

    -boundingRectWithSize:options:attributes:context:用法 - (CGSize)sizeWithFont:(UIFont *)font constraine ...

  7. 说说Android应用的persistent属性

    转载地址:http://my.oschina.net/youranhongcha/blog 摘要 在Android系统中,有一种永久性应用.它们对应的AndroidManifest.xml文件里,会将 ...

  8. PHP 多线程、多进程

    多线程:PHP其实并不支持多线程,只是通过一些扩展或者socket方式伪装成多线程,实质不是的.在PHP 5.3 以上版本,使用 pthreads PHP扩展,可以使PHP真正地支持多线程:或者使用 ...

  9. URL中有中文字符,转码方法

    服务端返回的urlString里面有时含有中文,使用 [NSURL URLWithString:urlString]生成URL对象时,iOS客户端不能正确进行网络请求,网上找到的URLEncode方法 ...

  10. poj1328贪心中的区间问题

    题意:给定海岛个数.雷达半径以及各海岛坐标,求能覆盖所有海岛的最小雷达数. 思路:先对每个海岛求一个区间:即能覆盖它的所有雷达的圆心所构成的区间.然后对区间排序,定义一个最右点over,依次延伸ove ...