import java.io.*;
import java.util.*;
import com.sun.image.codec.jpeg.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.awt.*;
import java.awt.image.*;
public class validatecode extends httpservlet {
private font mfont=new font("宋体", font.plain,12);//设置字体
//处理post
public void dopost(httpservletrequest request,httpservletresponse response)
throws servletexception,ioexception {
doget(request,response);
}
public void doget(httpservletrequest request,httpservletresponse response)
throws servletexception,ioexception {
//取得一个1000-9999的随机数
string s="";
int intcount=0;
intcount=(new random()).nextint(9999);//
if(intcount<1000)intcount+=1000;
s=intcount+"";
//保存入session,用于与用户的输入进行比较.
//注意比较完之后清除session.
httpsession session=request.getsession (true);
session.setattribute("validatecode",s);
response.setcontenttype("image/gif");
servletoutputstream out=response.getoutputstream();
bufferedimage image=new bufferedimage(35,14,bufferedimage.type_int_rgb);
graphics gra=image.getgraphics();
//设置背景色
gra.setcolor(color.yellow);
gra.fillrect(1,1,33,12);
//设置字体色
gra.setcolor(color.black);
gra.setfont(mfont);
//输出数字
char c;
for(int i=0;i<4;i++) {
c=s.charat(i);
gra.drawstring(c+"",i*7+4,11); //7为宽度,11为上下高度位置
}
jpegimageencoder encoder=jpegcodec.createjpegencoder(out);
encoder.encode(image);
out.close();
}
}
java的图片处理包需要图形环境,而linux上没有启动图形环境,找不到图形环境的server(x11 window server using ':0.0' )所以会报这个错。而通过java -djava.awt.headless=true 这个参数的指定就可以避免java 2d去找图形环境。
要么这样试试,应该也可以。在servlet里一开始写一句:
system.setproperty("java.awt.headless","true");
web服务器的java虚拟机必须加以个参数java.awt.headless=true
以tomcat为例
可以在/etc/profile或启动web服务的用户的.bash_profile中的catalina_opts变量中加入:
catalina_opts="... -djava.awt.headless=true"
其他的也可以看看启动脚本。只要加上这个参数就没问题了。
新闻热点
疑难解答