MakePicture.java产生图片的类:
package com.strongit.zwjc.util;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.awt.*;
import java.awt.image.*;
import java.util.*;
import javax.imageio.*;
public class MakePicture extends HttpServlet {
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("image/jpeg");
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);
HttpSession session=request.getSession();
// 在内存中创建图象
int width=60, height=20;
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
// 获取图形上下文
Graphics g = image.getGraphics();
//生成随机类
Random random = new Random();
// 设定背景色
g.setColor(getRandColor(200,250));
g.fillRect(0, 0, width, height);
//设定字体
g.setFont(new Font("Times New Roman",Font.PLAIN,18));
//画边框
//g.setColor(new Color());
//g.drawRect(0,0,width-1,height-1);
// 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到
g.setColor(getRandColor(160,200));
for (int i=0;i<155;i++) {
int x = random.nextInt(width);
int y = random.nextInt(height);
int xl = random.nextInt(12);
int yl = random.nextInt(12);
g.drawLine(x,y,x+xl,y+yl);
}
// 取随机产生的认证码(4位数字)
String sRand="";
for (int i=0;i<4;i++){
String rand=String.valueOf(random.nextInt(10));
sRand+=rand;
// 将认证码显示到图象中
g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));//调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成
g.drawString(rand,13*i+6,16);
}
// 将认证码存入SESSION
session.setAttribute("rand",sRand);
// 图象生效
g.dispose();
ServletOutputStream responseOutputStream =response.getOutputStream();
// 输出图象到页面
ImageIO.write(image, "JPEG", responseOutputStream);
//以下关闭输入流!
responseOutputStream.flush();
responseOutputStream.close();
}
Color getRandColor(int fc,int bc){//给定范围获得随机颜色
Random random = new Random();
if(fc>255) fc=255;
if(bc>255) bc=255;
int r=fc+random.nextInt(bc-fc);
int g=fc+random.nextInt(bc-fc);
int b=fc+random.nextInt(bc-fc);
return new Color(r,g,b);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
public String getServletInfo() {
return "Short description";
}
}
页面代码:
<%@ page language="java" pageEncoding="UTF-8"%> <html> <head> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <link href="css/datagather_login.css" rel="stylesheet" type="text/css"> <title>个性化门户登陆页面</title> <script type="text/javascript"> var request = false; function refresh(){ document.getElementById("makePicture").src="makePicture?now="+ new Date(); } </script> </head> <body> <form action="" method="post" id="form1" name="form1"> <table width="100%" height="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td align="center"> <table width="607" align="center" border="0" cellspacing="0" cellpadding="0"> <tr> <td valign="bottom"> <img src="images/portlettools/login/titleportal.jpg" width="682" height="103" /> </td> </tr> <tr> <td valign="top" align="right" background="images/portlettools/login/bg.jpg" width="607" height="288"> <table width="38%" border="0" cellspacing="0" cellpadding="0"> <tr> <td height="30"> </td> </tr> <tr> <td height="100"> <table width="100%" height="100" border="0" cellspacing="0" cellpadding="0"> <tr> <td width="52" class="tt"> 用户名: </td> <td colspan="2" class="lo_input"> <input name="username" height="40" type="text" style="width:132" οnfοcus="true" class="lo_input" size="18" /> </td> </tr> <tr> <td width="52" class="tt"> 密 码: </td> <td colspan="2" class="lo_input"> <input id="password" name="password" type="password" style="width:132" οnkeydοwn="if(event.keyCode==13) gotoSubmit();" size="18" /> </td> </tr> <tr> <td width="52" class="tt"> 验证码: </td> <td width="70"> <input type="text" name="checkCode" size="4" maxlength="4" οnkeydοwn="if(event.keyCode==13) gotoSubmit();"> </td> <td> <img src="makePicture" id="makePicture"> </td> </tr> <tr> <td width="52"></td> <td> <td> <font color="blue"><a href="#" οnclick="refresh()">看不清</a> </font> </td> </tr> </table> </td> </tr> <tr> <td> <table width="210" align="left" border="0" cellspacing="0" cellpadding="0" height="80"> <tr> <td align="left"> <img src="images/portlettools/login/login.jpg" width="76" height="35" οnclick="gotoSubmit();" style="cursor:hand;" /> </td> <td> <img src="images/portlettools/login/cancle.jpg" width="76" height="35" style="cursor:hand;" οnclick="gotoReset()" /> </td> </tr> </table> </td> </tr> </table> </td> </tr> </table> </td> </tr> </table> </form> </body> </html>
WEB.XML中设置:
<servlet> <servlet-name>makePicture</servlet-name> <servlet-class> com.strongit.zwjc.util.MakePicture </servlet-class> </servlet> <servlet-mapping> <servlet-name>makePicture</servlet-name> <url-pattern>/makePicture</url-pattern> </servlet-mapping>