用Servlet在客户端显示图像显示不出~

ar7043 2008-03-25 03: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>
...全文
178 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ar7043 2008-03-26
  • 打赏
  • 举报
回复
谁来帮忙看下~再顶
水中飞月 2008-03-26
  • 打赏
  • 举报
回复
果使用weblogic的话,在Weblogic启动脚本中的$JAVACMD $JAVA_OPTIONS
后面加入-Djava.awt.headless=true
or
if u use tomcat

add the same line into the "startup.bat"
水中飞月 2008-03-26
  • 打赏
  • 举报
回复
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 也试过,没有问题。
ar7043 2008-03-25
  • 打赏
  • 举报
回复
有没有人知道啊~~

67,538

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧