Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 342|回复: 0

[servlet学习]在Servlet中使用两种输出机制

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-10-10 00:56:40 | 显示全部楼层 |阅读模式
    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=&#391;">The Mormon Tabernacle Choir<BR>" +
                 "<INPUT TYPE="RADIO" NAME="vote" VALUE=&#392;">The Utah Jazz<BR>" +
                 "<INPUT TYPE="RADIO" NAME="vote" VALUE=&#393;">Winter Olympics<BR>" +
                 "<INPUT TYPE="RADIO" NAME="vote" VALUE=&#394;">Donnie Osmond<BR>";
                  
                 return(poll);  
             }
             public void addToPollResults(String foo)//点票计数
             {
             }
             public byte[] generateImageBytes()//获取图像的二进制数据。
             {
                 byte[] b = new byte[1];
                 b[0] = 0;  
                 return b;  
             }
         }
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-6-16 01:25 , Processed in 0.523581 second(s), 50 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表