Servlet類:
進口?Java . io . io exception;
進口?javax . servlet . servlet exception;
進口?javax . servlet . http . http servlet;
進口?javax . servlet . http . http servlet request;
進口?javax . servlet . http . http servlet response;
公共的?上課?ImageServlet?延伸?HttpServlet?{
私人的?靜電?決賽?長嗎?serialVersionUID?=?1L;
@覆蓋
公共的?虛空?doGet(http servlet request?請求,?HttpServletResponse?回應)
拋投?ServletException,?IOException?{
response . set content type(“image/gif“);//設置相應的類型,告訴瀏覽器輸出的內容是圖片。
response . set header(“Pragma“,?“無緩存”);//設置響應頭信息,告訴瀏覽器不要緩存該內容。
response . set header(“Cache-Control“,?“無緩存”);
response . setdate header(“Expire“,?0);
RandomValidateCode?randomValidateCode?=?新的?RandomValidateCode();
試試?{
randomvalidatecode . getrandcode(request,?回應);//輸出圖片的方法
}?接住嗎?(例外?e)?{
e . printstacktrace();
}
}
@覆蓋
公共的?虛空?doPost(http servlet request?請求,?HttpServletResponse?回應)
拋投?ServletException,?IOException?{
doGet(請求,?回應);
}
}生成圖片的類:
進口?Java . awt . color;
進口?Java . awt . font;
進口?Java . awt . graphics;
進口?Java . awt . image . buffered image;
進口?Java . util . random;
進口?javax . imageio . imageio;
進口?javax . servlet . http . http servlet request;
進口?javax . servlet . http . http servlet response;
進口?javax . servlet . http . http session;
公共的?上課?RandomValidateCode?{
公共的?靜電?決賽?字符串?RANDOMCODEKEY?=?”RANDOMVALIDATECODEKEY”;//會話中的密鑰
私人的?隨機?隨機?=?新的?random();
私人的?字符串?隨機字符串?=?“0123456789 abcdefghijklmnopqrstuvwxyz“;//隨機生成的字符串
私人的?int?寬度?=?80;//圖片寬度
私人的?int?身高?=?26;//畫面高
私人的?int?線條尺寸?=?25;//幹擾線的數量
私人的?int?斯特林納姆?=?4;//隨機生成的字符數
/**
*?生成隨機圖片
*/
公共的?虛空?getRandcode(http servlet request?請求,
HttpServletResponse?回應)?{
HttpSession?會話?=?request . getsession();
BufferedImage?形象?=?新的?BufferedImage(寬度、高度、BufferedImage。TYPE _ INT _ BGR);
圖形?g?=?image . get graphics();
g . fill rect(0,?0,?寬度,?身高);
g.setFont(新?font(“Times?新的?羅馬“,字體。ROMAN_BASELINE,18);
g . set color(getRandColor(180,?233));
//繪制幹涉線
for(int?I = 0;我& lt= lineSizei++){
落水線(g);
}
//繪制隨機字符
字符串?randomString?=?"";
for(int?I = 1;我& lt= stringNumi++){
randomString = drowString(g,randomString,I);
}
session . remove attribute(RANDOMCODEKEY);
session . set attribute(RANDOMCODEKEY,?隨機字符串);
g . dispose();
試試?{
imageio . write(image,?“JPEG”,?response . get output stream());
}?接住嗎?(例外?e)?{
e . printstacktrace();
}
}
//?- ?私人的?方法?-
/*
*?獲取字體
*/
私人的?字體?get font(){
回歸?新的?字體(“Fixedsys”,字體。中心_基線,18);
}
/*
*?獲取顏色
*/
私人的?顏色?getRandColor(int?fc,int?BC ){
如果(fc?& gt?255)
fc?=?255;
如果(公元前?& gt?255)
公元前?=?255;
int?r?=?fc?+?random . nextint(BC-fc-16);
int?g?=?fc?+?random . nextint(BC-fc-14);
int?b?=?fc?+?random . nextint(BC-fc-18);
回歸?新的?顏色(r,g,b);
}
/*
*?畫壹條線
*/
私人的?字符串?drowString(圖形?g弦?randomString,intI ){
g . set font(get font());
g.setColor(新?color(random . nextint(101)、random . nextint(111)、random . nextint(121));
字符串?蘭德?=?string . value of(getRandomString(random . next int(randstring . length())));
randomString?+=蘭特;
g . translate(random . nextint(3),?random . next int(3));
g .拉繩(蘭特,?13*i,?16);
回歸?randomString
}
/*
*?繪制幹涉線
*/
私人的?虛空?drowLine(圖形?g ){
int?x?=?random.nextInt(寬度);
int?y?=?random.nextInt(高度);
int?xl?=?random . nextint(13);
int?yl?=?random . nextint(15);
g . drawline(x,?y?x+xl,?y+yl);
}
/*
*?獲取隨機字符
*/
私人的?字符串?getRandomString(int?num ){
回歸?string . value of(randstring . charat(num));
}
}