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"
其他的也可以看看啟動腳本。只要加上這個參數就沒問題了。
新聞熱點
疑難解答