赛迪网 > IT技术 Java > 头条列表
  IT资讯搜索
 
IT产品搜索
[程序开发][网管世界][网络安全][数据库技术]
[操作系统][嘉宾聊天·在线访谈][活动集锦]
[精彩专题][Symantec专区][订阅IT技术周刊]
[开发论坛][网管论坛][安全论坛][数据库论坛]
[操作系统论坛][Sybase专区][IBM dW技术专区]
[病毒求助][病毒与漏洞播报][文档·源码下载]

两种输出机制在Servlet中的使用

发布时间:2007.12.10 05:02     来源:赛迪网    作者:执木

在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("Poll of the Day!");
            out.println("                        request.getRequestURI() + "'>");

            out.println(voter.getPollOfTheDay()); 

            out.println("");
            out.println(""); 
        }
        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?

" +
            "The Mormon Tabernacle Choir
" +
            "The Utah Jazz
" +
            "Winter Olympics
" +
            "Donnie Osmond
";
            
            return(poll); 
        }
        public void addToPollResults(String foo)//点票计数
        {
        }
        public byte[] generateImageBytes()//获取图像的二进制数据。
        {
            byte[] b = new byte[1];
            b[0] = 0; 
            return b; 
        }
    } 
      (责任编辑:包春林)


[ 发表评论 ] 字体[  ] [ 打印 ] [ 进入博客 ] [ 进入论坛 ]  [ 推荐给朋友 ]
  相关文章
· 深入剖析 JSP 和 Servlet 对中文的处理 (12-07) · 深入浅出Java的同步 (12-07)
· 关于连接池问题,其实你多想想就明白了 (12-06) · Weblogic下使用jsp查询的Entity Bean (12-06)
· JAVA基础:漫谈Java程序设计中的接口应用 (12-06) · 教你在Java数据库编程中的几个常用技巧 (12-06)
· 建立JSP操作用以提高数据库访问的效率 (12-06) · 初学入门:JAVA里字符编码的探索与理解 (12-06)
· 使用JAVA中的动态代理实现数据库连接池 (12-06) · Java语言中基本数据类型与流的操作方法 (12-06)
  客户需求反馈表
* 姓  名:
更多资料  了解方案  认识厂商
* 单位名称:
* 联系电话:
* 电子邮件:
  赛迪推荐  
  手机·资费 ·新品·导购·评测·手机资费·宽带
手机搜索  诺基亚 N73 MOTO Z6
  IT产品 ·笔记本·台式机·服务器·打印·投影
IT产品搜索 
  IT技术 ·开发·网管·安全·数据库·操作系统
  信息化 ·热点·专题·访谈·周刊·方案案例
· 工信部“三定”公布 总编制731名设24司局
· 北京发电子商务监管意见 营利性网店须办照
· 直播 08中国城市信息化高峰论坛 案例点评
· 烽火网络校园解决方案 移民安置信息管理系统
  IT博客 ·曾剑秋·项立刚·Java学习·网管
  IT技术论坛 ·开发·网管·安全·数据库·系统