@XML代码
<?xmlversion="1.0"encoding="UTF-8"?>
<web-app>
<servlet>
<servlet-name>randomCodeServlet</servlet-name>
<servlet-class>RandomCodeServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>randomCodeServlet</servlet-name>
<url-pattern>/imgcode</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>loginCheckServlet</servlet-name>
<servlet-class>LoginCheckServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>loginCheckServlet</servlet-name>
<url-pattern>/loginchk</url-pattern>
</servlet-mapping>
</web-app>
@HTML代码
<%@pagepageEncoding="utf-8"%>
<html>
<head><title>登录</title></head>
<body>
<form method="POST"action="loginchk">
<table>
<tr>
<td>名称: </td>
<td><inputtype="text" name="username" /></td>
</tr>
<tr>
<td>密码: </td>
<td><inputtype="password" name="password"/></td>
</tr>
<tr>
<td>验证码:</td>
<td>
<inputtype="text" name="random"/>
<imgsrc="imgcode">
</td>
</tr>
<tr>
<td colspan=2align=center> <input type="reset"value="重填"/>
<inputtype="submit" value="提交"/>
</td>
</tr>
</table>
</form>
</body>
</html>
@JAVA代码
importjava.awt.*;
importjava.awt.image.*;
importjava.io.IOException;
importjavax.servlet.*;
importjavax.servlet.http.*;
publicclass RandomCodeServlet extends HttpServlet {
private final int width = 60; //图片宽度
private final int height = 20; //图片高度
//由于没用通过提交按钮访问,应实现service()方法
protected voidservice(HttpServletRequest req,
HttpServletResponseresp)
throws ServletException,IOException{
BufferedImage buffImg = newBufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
Graphics2D g = buffImg.createGraphics();
g.setColor(Color.WHITE); //背景颜色
g.fillRect(0, 0, width, height);
Font font = new Font("Times NewRoman", Font.PLAIN, 18);
g.setFont(font); //设置字体,字号与图片高度相关
g.setColor(Color.black); //图片边框
g.drawRect(0, 0, width - 1, height - 1);
g.setColor(Color.gray); //干扰线颜色
for (int i = 0; i < 16; i++) { // 随机产生16条干扰线
int x = (int)(Math.random()*width);
int y = (int)(Math.random()*height);
int x1 = (int)(Math.random()*12);
int y1 = (int)(Math.random()*12);
g.drawLine(x, y, x + x1, y + y1);
}
StringBuffer randomCode = newStringBuffer();
for (int i = 0; i < 4; i++) { // 随机产生4位数字的验证玛
String strRand =String.valueOf((int)(Math.random()*10));
//产生随机的颜色分量来构造颜色值,这样输出的每位数字的颜色都不一样
int red = (int)(Math.random()*255);
intgreen = (int)(Math.random()*255);
int blue = (int)(Math.random()*255);
g.setColor(new Color(red, green,blue));
g.drawString(strRand, 13 * i + 6,16);
randomCode.append(strRand); // 将产生的四个随机数组合起来
}
//将四位数字保存到session中
HttpSession session = req.getSession();
session.setAttribute("randomCode", randomCode.toString());
//禁止图像的缓存
resp.setHeader("Cache-Control","no-cache");
resp.setContentType("image/jpeg");
//将图像输出到servlet输出流中
ServletOutputStream sos =resp.getOutputStream();
javax.imageio.ImageIO.write(buffImg,"jpeg", sos);
sos.close();
}
}