一个简单的登录时候需要输入的验证码
- jsp代码
<tr>
<td>验证码:</td>
<td>
<input type="text" name="validataCode" />
<img style="cursor:pointer;" title="点击更换" src="CodeServlet"
onclick="this.src = 'CodeServlet?'+Math.random();"/>
<span style="color:red">${requestScope.messagecode}</span>
</td>
</tr>
- CodeServlet
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 此方法生成一张图片
Random r = new Random();
// 1.创建空白图片 长 宽 三原色
BufferedImage image = new BufferedImage(100, 30, BufferedImage.TYPE_INT_RGB);
// 2.获取图片的画笔
Graphics g = image.getGraphics();
// 3.设置画笔的颜色 画背景
g.setColor(new Color(r.nextInt(255), r.nextInt(255), r.nextInt(255)));
// 4.绘制矩形画布 从(0,0) 开始画长100宽30
g.fillRect(0, 0, 100, 30);
// 5.调用有个自定义方法,获取一个长度为五的字母和数字的字符串
String number = this.getNumber(5);
// 6.把随机生成的验证码存储在session中
HttpSession session = request.getSession();
session.setAttribute("code", number);
// 7.重新设置画笔, 画验证码
// 颜色为黑色
g.setColor(new Color(0, 0, 0));
// 名称 样式 大小
g.setFont(new Font(null, Font.BOLD, 24));
// 8.绘制验证码 画的数字 位置(5,25)
g.drawString(number, 5, 25);
// 9.绘制八条干扰线
for (int i = 0; i < 8; i++) {
//设置画线的画笔的颜色
g.setColor(new Color(r.nextInt(255), r.nextInt(255), r.nextInt(255)));
//从(x1,y1)滑到(x2,y2)
g.drawLine(r.nextInt(100), r.nextInt(30), r.nextInt(100), r.nextInt(30));
}
//10.设置响应内容
response.setContentType("image.html");
OutputStream os = response.getOutputStream();
//11.把image图片写到响应中(写到网络输输出流上)
// 图片 图片格式
ImageIO.write(image, "jpeg", os);
os.flush();
os.close();
}
private String getNumber(int size) {
String str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
String number = "";
Random r = new Random();
for (int i = 0; i < size; i++) {
number += str.charAt(r.nextInt(str.length()));
}
return number;
}
- UserLoginServlet
// 获取用户输入的验证码
String validateCode = request.getParameter("validataCode");
// 从session中获取系统生成的验证码
HttpSession session = request.getSession();
String code = session.getAttribute("code").toString();
if (validateCode.equalsIgnoreCase(code)) {
//登录的操作
//如判断用户名密码是否正确以及做出相应的响应操作
}else{
request.setAttribute("messagecode", "验证码错误");
request.getRequestDispatcher("login.jsp").forward(request, response);
}