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" onfocus="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"
onkeydown="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"
onkeydown="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="#" onclick="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" onclick="gotoSubmit();" style="cursor:hand;" />
</td>
<td>
<img src="images/portlettools/login/cancle.jpg"
width="76" height="35" style="cursor:hand;"
onclick="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>