TA的每日心情 | 开心 2021-3-12 23:18 |
---|
签到天数: 2 天 [LV.1]初来乍到
|
在Servlet中有两种机制用于打印响应:PrintWriter和ServletOutputStream。Servlet文档告诉我们应该使用ServletOutputStream打印二进制数据,用PrintWriter打印字符文本,如果在Servlet中同时需要打印二进制数据和字符文本,比较明智的做法是使用ServletOutputStream,而不要用if-else分开。ServletOutputStream继承基于字节的java.io.OutputStream,但增加了println()和print()方法,用于打印基本数据类型和字符串(请参看Servlet API),象下面的代码并不值得推荐,甚至随着代码的增加可能会越来越难于管理代码,甚至可能会引入一些bug,因为你必须时刻记住你正在使用的是哪个流。
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.*;
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("<TITLE>Poll of the Day!</TITLE>");
out.println("<FORM METHOD="POST" ACTION="" +
request.getRequestURI() + "">");
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("<B>Technical difficulties.. Please see " +
"your administrator for details.</B>");
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 =
"<H3>What is the best thing about Utah?</H3>" +
"<INPUT TYPE="RADIO" NAME="vote" VALUE=Ƈ">The Mormon Tabernacle Choir<BR>" +
"<INPUT TYPE="RADIO" NAME="vote" VALUE=ƈ">The Utah Jazz<BR>" +
"<INPUT TYPE="RADIO" NAME="vote" VALUE=Ɖ">Winter Olympics<BR>" +
"<INPUT TYPE="RADIO" NAME="vote" VALUE=Ɗ">Donnie Osmond<BR>";
return(poll);
}
public void addToPollResults(String foo)//点票计数
{
}
public byte[] generateImageBytes()//获取图像的二进制数据。
{
byte[] b = new byte[1];
b[0] = 0;
return b;
}
} |
|