首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 用Servlet在客户端显示图像显示不出~
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-25 15:41:39 楼主
    import java.awt.Color;
    import java.awt.Component;
    import java.awt.Frame;
    import java.awt.Graphics;
    import java.awt.image.BufferedImage;
    import java.io.ByteArrayOutputStream;
    import java.io.IOException;
    import java.io.OutputStream;
    import javax.servlet.ServletConfig;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import com.sun.image.codec.jpeg.JPEGCodec;
    import com.sun.image.codec.jpeg.JPEGImageEncoder;


    public class ImageServlet extends HttpServlet {
    private static final String CONTENT_TYPE="image/jpeg";
    public int DataArray[]={120,100,60,200};
    public int Total=480;
    public Component dummy;
    public ImageServlet()
    {
    super();
    }
    public void init(ServletConfig cfg) throws ServletException
    {
    super.init(cfg);
    dummy=new Frame();
    dummy.addNotify();

    }
    public void destroy()
    {
    super.destroy(); // Just puts "destroy" string in log
    // Put your code here
    }
    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException

    {
    //request.i
    response.setContentType(CONTENT_TYPE);
    response.setHeader("Pragma","no-cache");
    response.setHeader("Cache-Control","no-cache");
    response.setDateHeader("Expires", 0);
    Color fg=new Color(255,255,0);
    Color bg=new Color(255,100,0);
    Color fill=new Color(155,155,155);
    if(request.getParameter("ChartType").equals("pie"))
    sendImage(response,createPieChart(300,300,fg,bg,fill));
    }
    public BufferedImage createPieChart(int w,int h,Color fg,Color bg, Color fill)
    {
    int done=0,arc=0;
    BufferedImage img=createImage(w,h,bg);
    Graphics g=img.getGraphics();
    for(int i=0;i <DataArray.length;i++)
    {
    done+=DataArray[i];
    int newArc=(done*360)/Total;
    g.setColor(new Color(255,50,50*i));
    g.fillArc(0, 0, w-1, h-1, arc,newArc);
    arc=newArc;
    }
    return img;
    }
    public BufferedImage createImage(int w,int h,Color bg)
    {
    BufferedImage img =new BufferedImage(w,h,BufferedImage.TYPE_INT_RGB);
    Graphics g=img.getGraphics();
    g.setColor(bg);
    g.fillRect(0, 0, w, h);
    return img;
    }
    public void sendImage(HttpServletResponse res , BufferedImage img )
    {
    try
    {
    JPEGImageEncoder encoder;
    ByteArrayOutputStream byteOut=new ByteArrayOutputStream();
    OutputStream Out=res.getOutputStream();
    encoder=JPEGCodec.createJPEGEncoder(byteOut);
    encoder.encode(img);
    byte[] buf=byteOut.toByteArray();
    byteOut.close();
    res.setContentLength(buf.length);
    Out.write(buf);
    Out.close();
    }
    catch(Exception e)
    {
    e.printStackTrace();
    }
    }
    }
    /***********/
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">


    <html>
      <head>
        <title>Tet.html </title>

        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
        <meta http-equiv="description" content="this is my page">
        <meta http-equiv="content-type" content="text/html; charset=UTF-8">
      </head>
    <SCRIPT LANGUAGE="JavaScript">
    document.onclick=fnClick;
    function fnClick()
    {
    if(event.srcElement.id=="pie")
    {
    chart.src="ImageServlet? ChartType=Pie";
    chart.width="300";
    chart.hetght="300";
    }
    else if(event.srcElement.id=="bar")
    {
    chart.src="ImageServlet? ChartType=Bar";
    chart.height="110";
    }
    }
    </script>
      <body>
    <span id=pie style="cursor:hand;">饼形图 </span>
    <img id=chart width=300 height=300>

      </body>
    </html>
    30  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-25 22:05:121楼 得分:0
    有没有人知道啊~~
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-26 09:20:012楼 得分:0
    谁来帮忙看下~再顶
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-26 16:38:563楼 得分:0
    1:将jdk升级为jdk1.4,然后在java命令后加上运行参数  –Djava.awt.headless=true  即可,java  xxxx.class  -Djava.awt.headless=true  。 
      2:虚拟一个图形环境。一般在linux下使用Xvfb来虚拟一个图形环境,在linux命令行键入Xvfb  :0  -screen  0  1024x768x16  &  , 
      不过在使用之前要对Xvfb进行设置。我在本机上没有调试成功。各位可以试一下。 
      3:使用第三方工具包。可以使用  pja包,下载地址  http://www.eteks.com/pja/en/#Download  ,使用方法见解决方案。 
       
      解决方案:将pja.jar  ,pjatools.jar拷贝到weblogic的lib目录下,在startWebLogic.sh中将这两个文件加入到CLASSPATH中, 
      然后将以下文字加入到$JAVACMD中,其中 
      /usr/java/jdk1.3.1_06  是指java的安装目录 
      /home/weblogic/wlserver6.1/lib  是指  pja.jar  ,pjatools.jar的存放目录 
       
      -Xbootclasspath/a:/usr/java/jdk1.3.1_06/lib/rt.jar:/home/weblogic/wlserver6.1/lib/pja.jar  -Djava.awt.toolkit=com.eteks.awt.PJAToolkit  -Djava.awt.graphicsenv=com.eteks.java2d.PJAGraphicsEnvironment  -Djava.awt.fonts=/usr/java/jdk1.3.1_06/jre/lib/fonts   
       
       
      添加后执行会出现一些说  font找不到的提示,不用理他。 
       
       
       
      在servlet中也是可以使用-Djava.awt.headless=true  的。要针对不同的jsp服务器进行设置。 
      如果使用weblogic的话,在Weblogic启动脚本中的$JAVACMD  $JAVA_OPTIONS   
      后面加入-Djava.awt.headless=true   
      就可以了。几乎所有的中间件服务器都是使用java编写的,服务器启动时就是需要运行java的。 
      tomcat  也试过,没有问题。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-26 16:40:364楼 得分:0
    果使用weblogic的话,在Weblogic启动脚本中的$JAVACMD  $JAVA_OPTIONS     
      后面加入-Djava.awt.headless=true     
    or
    if u use tomcat

    add the same line into the "startup.bat"
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved