当前页面: 开发资料首页 → Java 专题 → 在Servlet中使用两种输出机制
在Servlet中使用两种输出机制
摘要: 在Servlet中使用两种输出机制
</td>
</tr>
<tr>
<td height="35" valign="top" class="ArticleTeitle">
在Servlet中有两种机制用于打印响应:PrintWriter和ServletOutputStream。Servlet文档告诉我们应该使用ServletOutputStream打印二进制数据,用PrintWriter打印字符文本,如果在Servlet中同时需要打印二进制数据和字符文本,比较明智的做法是使用ServletOutputStream,而不要用if-else分开。ServletOutputStream继承基于字节的java.io.OutputStream,但增加了println()和print()方法,用于打印基本数据类型和字符串(请参看Servlet API),象下面的代码并不值得推荐,甚至随着代码的增加可能会越来越难于管理代码,甚至可能会引入一些bug,因为你必须时刻记住你正在使用的是哪个流。
<table width="673" border="0">
<tr>
<td width="382">PrintWriter pw
ServletOutputStream out;
try{
out=response.getOutputStream();
//写二进制数据
}catch(Exception e){
pw=response.getWriter();
pw.println("There was an error: "+e.getMessage())
}
下面是一个正确的实例:这是一个简单投票程序。
import java.io.*;
import java.text.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*; </td>
<td width="281">
</td>
</tr>
</table>
public class GoodVoterServlet extends HttpServlet
{
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException
{
doPost(request,response);
}
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException
{
String vote = request.getParameter("vote");
ServletOutputStream out = response.getOutputStream();
VoterApp voter = VoterApp.getInstance();
if ( vote == null )//创建投票页面
{
//Let's print out the Poll of the Day!
response.setContentType("text/html");
out.println("
Poll of the Day!");
out.println("<form METHOD='POST' ACTION='" +
");
out.println(voter.getPollOfTheDay());
out.println("<input TYPE='SUBMIT' VALUE='投票!'>");
out.println("</form>");
}
else//统计结果
{
voter.addToPollResults(vote);
//Get the generated poll results graph
byte[] generatedGraph = voter.generateImageBytes();
if ( generatedGraph == null )//没有输出图像时输出文本字符
{
response.setContentType("text/html");
out.println("
Technical difficulties.. Please see " +
"your administrator for details.");
return;
}
else//输出统计图像
{
response.setContentType("image/gif");
out.write(generatedGraph, 0, generatedGraph.length);
out.flush();
}
}
}
}
帮助类的代码:
public class VoterApp {
private static VoterApp instance = null;
private VoterApp() {}
public static VoterApp getInstance()
{
if ( instance == null )
{
instance = new VoterApp();
}
return(instance);
}
public String getPollOfTheDay()//投票的表单
{
String poll =
"
What is the best thing about Utah?
" +
"<input TYPE='RADIO' NAME='vote' VALUE=Ƈ'>The Mormon Tabernacle Choir
" +
"<input TYPE='RADIO' NAME='vote' VALUE=ƈ'>The Utah Jazz
" +
"<input TYPE='RADIO' NAME='vote' VALUE=Ɖ'>Winter Olympics
" +
"<input TYPE='RADIO' NAME='vote' VALUE=Ɗ'>Donnie Osmond
";
return(poll);
}
public void addToPollResults(String foo)//点票计数
{
}
public byte[] generateImageBytes()//获取图像的二进制数据。
{
byte[] b = new byte[1];
b[0] = 0;
return b;
}
}
function TempSave(ElementID)
{
CommentsPersistDiv.setAttribute("CommentContent",document.getElementById(ElementID).value);
CommentsPersistDiv.save("CommentXMLStore");
}
function Restore(ElementID)
{
CommentsPersistDiv.load("CommentXMLStore");
document.getElementById(ElementID).value=CommentsPersistDiv.getAttribute("CommentContent");
}
</td>
</tr>
<tr>
↑返回目录
前一篇: Servlet 2.3过滤器编程
后一篇: WEB应用中的编码问题