------verifycode.java
package cn.e3testmall.controller;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Random;
import javax.imageio.ImageIO;
public class VerifyCode {
private int w = 70;
private int h = 35;
private Random r = new Random();
private String[] fontNames = {"宋体", "华文楷体", "黑体", "华文新魏", "华文隶书", "微软雅黑", "楷体_GB2312"};
private String codes = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
private Color bgColor = new Color(240, 240, 240);
private String text ;
private Color randomColor () {
int red = r.nextInt(256);
int green = r.nextInt(256);
int blue = r.nextInt(256);
return new Color(red, green, blue);
}
private Font randomFont () {
int index = r.nextInt(fontNames.length);
String fontName = fontNames[index];
int style = r.nextInt(4);
int size = r.nextInt(5) + 24;
return new Font(fontName, style, size);
}
private void drawLine (BufferedImage image) {
int num = 5;
Graphics2D g2 = (Graphics2D)image.getGraphics();
for(int i = 0; i < num; i++) {
int x1 = r.nextInt(w);
int y1 = r.nextInt(h);
int x2 = r.nextInt(w);
int y2 = r.nextInt(h);
g2.setStroke(new BasicStroke(1.5F));
g2.setColor(Color.BLUE);
g2.drawLine(x1, y1, x2, y2);
}
}
private char randomChar () {
int index = r.nextInt(codes.length());
return codes.charAt(index);
}
private BufferedImage createImage () {
BufferedImage image = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
Graphics2D g2 = (Graphics2D)image.getGraphics();
g2.setColor(this.bgColor);
g2.fillRect(0, 0, w, h);
return image;
}
public BufferedImage getImage () {
BufferedImage image = createImage();
Graphics2D g2 = (Graphics2D)image.getGraphics();
StringBuilder sb = new StringBuilder();
// 向图片中画4个字符
for(int i = 0; i < 4; i++) {
String s = randomChar() + "";
sb.append(s);
float x = i * 1.0F * w / 4;
g2.setFont(randomFont());
g2.setColor(randomColor());
g2.drawString(s, x, h);
}
this.text = sb.toString();
drawLine(image);
return image;
}
public String getText () {
return text;
}
public static void output (BufferedImage image, OutputStream out)
throws IOException {
ImageIO.write(image, "JPEG", out);
}
}
----------------------------------------------------------------------------------
---VerifyCodeServlet.java
String name = request.getParameter("name");
VerifyCode vc = new VerifyCode();//创建验证码类
BufferedImage image = vc.getImage();//创建验证码图片
request.getSession().setAttribute(name, vc.getText());//获取验证码文本
System.out.println(vc.getText());
VerifyCode.output(image, response.getOutputStream());//输出图片到页面
-----------------------------------------------------------------------
---login.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>regist.jsp</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<script type="text/javascript">
function _change() {
var img = document.getElementById("vCode");
img.src = "<c:url value='/VerifyCodeServlet?name=loginCode&'/>" + new Date().getTime();
}
</script>
</head>
<body>
<h1>登录</h1>
<hr/>
<p style="font-weight: 900; color: red;">${msg }</p>
<form action="<c:url value='/LoginServlet'/>" method="post">
用户名:<input type="text" name="username" value="${user.username }" /><br/>
密 码:<input type="password" name="password"/><br/>
验证码:<input type="text" name="loginCode" size="2"/>
<img id="vCode" src="<c:url value='/VerifyCodeServlet?name=loginCode'/>" border="2"/>
<a href="javascript:_change()" style="font-size: 12;">看不清,换一张</a><br/>
<input type="submit" value="登录"/>
</form>
</body>
</html>
-----------------------------------------------
--regist.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>regist.jsp</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<script type="text/javascript">
function _change() {
var img = document.getElementById("vCode");
img.src = "<c:url value='/VerifyCodeServlet?name=registCode&'/>" + new Date().getTime();
}
</script>
</head>
<body>
<h1>注册</h1>
<hr/>
<p style="font-weight: 900; color: red;">${msg }</p>
<form action="<c:url value='/RegistServlet'/>" method="post">
用户名:<input type="text" name="username" value="${user.username }" /><br/>
密 码:<input type="password" name="password"/><br/>
确认密码:<input type="password" name="repassword"/><br/>
验证码:<input type="text" name="registCode" size="2"/>
<img id="vCode" src="<c:url value='/VerifyCodeServlet?name=registCode'/>" border="2"/>
<a href="javascript:_change()" style="font-size: 12;">看不清,换一张</a><br/>
<input type="submit" value="注册"/>
</form>
</body>
</html>
--------------------------------
--index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>login.jsp</title>
</head>
<body>
<h1>主页</h1>
<hr/>
<c:choose>
<c:when test="${empty sessionScope.user }">
您还没有登录
</c:when>
<c:otherwise>
用户名:${sessionScope.user.username }
<a href="<c:url value='/QuitServlet'/>">退出</a>
</c:otherwise>
</c:choose>
</body>
</html>