首页
论坛
图书
开发资料
在线文档
网址
下载
联系我们
 新闻│Java│JavaScript│Eclipse│Eclipse 英文│J2EE│J2ME│J2SE│JSP│Netbeans│Hibernate│JBuilder│Spring│Struts
站内搜索: 请输入搜索关键词

当前页面: 开发资料首页 → 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应用中的编码问题

首页 | 全站 Sitemap | 联系我们 | 设为首页 | 收藏本站
版权所有 Copyright © 2006-2007, Java 编程资料牛鼻站, All rights reserved