登陆界面

<%@ page pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>带图形验证码登录</title>
</head>
<body>
<form name="form1" method="post">
用户名:<input type="text" name="userid" onclick="mes.innerHTML=''" value="${param.userid }"><br/>
密码:<input type="password" name="userpwd" value="${param.userpwd }"><br/>
验证码:<input type="text" name="checkcode"/>
<input type="submit" value="换一张" onclick="form1.action='/servlet/changecheckcode'"/><br/> <input type="submit" value="登陆" onclick="form1action='/servlet/logincheck'"/>
<input type="reset" value="重置"/>
<div id="mes">${info}</div>
</form>
</body>
</html>

验证码的写入

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.awt.*;
import java.awt.image.*;
import java.util.*;
import javax.imageio.*; public class AuthImg extends HttpServlet
{
private Font mFont = new Font("Arial Black", Font.PLAIN, 16);
public void init() throws ServletException
{
super.init();
}
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);
} public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);
response.setContentType("image/jpeg"); int width=100, height=18;
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(1, 1, width-1, height-1);
g.setColor(new Color(102,102,102));
g.drawRect(0, 0, width-1, height-1);
g.setFont(mFont); g.setColor(getRandColor(160,200));
for (int i=0;i<155;i++)
{
int x = random.nextInt(width - 1);
int y = random.nextInt(height - 1);
int xl = random.nextInt(6) + 1;
int yl = random.nextInt(12) + 1;
g.drawLine(x,y,x + xl,y + yl);
}
for (int i = 0;i < 70;i++)
{
int x = random.nextInt(width - 1);
int y = random.nextInt(height - 1);
int xl = random.nextInt(12) + 1;
int yl = random.nextInt(6) + 1;
g.drawLine(x,y,x - xl,y - yl);
} String sRand="";
for (int i=0;i<6;i++)
{
String tmp = getRandomChar();
sRand += tmp;
g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));
g.drawString(tmp,15*i+10,15);
} HttpSession session = request.getSession(true);
session.setAttribute("rand",sRand);
g.dispose();
ImageIO.write(image, "JPEG", response.getOutputStream());
}
private String getRandomChar()
{
int rand = (int)Math.round(Math.random() * 2);
long itmp = 0;
char ctmp = '\u0000';
switch (rand)
{
case 1:
itmp = Math.round(Math.random() * 25 + 65);
ctmp = (char)itmp;
return String.valueOf(ctmp);
case 2:
itmp = Math.round(Math.random() * 25 + 97);
ctmp = (char)itmp;
return String.valueOf(ctmp);
default :
itmp = Math.round(Math.random() * 9);
return String.valueOf(itmp);
}
}
}

其中这是加了干扰线的了,并且用session来保存验证码了,

在登陆的jsp页面中,应该这样设置

验证码如图:

<img src="authImg" id="authImg"/>看不清?<a href="#" onClick="refresh()">单击此处刷新</a>

然后refesh()函数如下写

<script>
function refresh()
{
document.getElementById("authImg").src='authImg?now=' + new Date();
}
</script>

之所以在最后加now,是防止浏览器的缓存

最后再在web.xml里配置下servlet

<servlet>
<servlet-name>img</servlet-name>
<servlet-class>org.yeeku.web.AuthImg</servlet-class>
</servlet> <servlet-mapping>
<servlet-name>img</servlet-name>
<url-pattern>/authImg</url-pattern>
</servlet-mapping>

最新文章

  1. windows平台eclipse for C++开发环境搭建
  2. JavaScript Patterns 4.8 Function Properties - A Memoization Pattern
  3. 如何准备PMP考试?
  4. QT与JavaScript互调 - 虹的日志 - 网易博客
  5. 【IOS实例小计】今日开贴,记录我的ios学习生涯,留下点滴,留下快乐,成荫后人。
  6. 向多个会话窗口发送命令 -SecureCRT
  7. A*搜寻算法(A星算法)
  8. Css的学习之旅-css的选择器(2)
  9. PE知识复习之PE的节表
  10. java实现http请求
  11. Java中对Array数组的常用操作
  12. 获取sd卡空间大小和获取sd卡目录
  13. python-mysql驱动64位
  14. luogu3233 世界树 (虚树)
  15. Confluence 6 在初始化配置时候的问题
  16. Socket端口复用
  17. 响铃:蜗牛读书“文”、网易云信“武”:游戏之外网易的AB面
  18. linux(centos6)搭建ftp服务器 -摘自网络
  19. Eclipse------使用Maven install出错:编码GBK的不可映射字符
  20. CCO2017 Vera and Trail Building 构造+图论

热门文章

  1. linux中mysql,mongodb,redis,hbase数据库操作
  2. centeros 6.5 网络设置
  3. Substring Frequency (II) LightOJ - 1427 AC自动机
  4. CAD安装失败怎样卸载CAD 2015?错误提示某些产品无法安装
  5. UGUI [TextArea]
  6. 深入学习hbase:表,列族,列标识,版本和cell
  7. Video 视频播放防作弊和禁止下载
  8. 第一次尝试用Open Live Writer写日志
  9. poj 2378 删点最大分支不超过一半
  10. autofac学习