JSP生成验证码
来源:互联网 发布:叫外卖软件 编辑:程序博客网 时间:2024/04/18 04:26
以下是代码片段:
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import javax.servlet.http.HttpSession;
/**
* Created on Mar 15, 2007
* <p>Title: 产生验证码</p>
* <p>Copyright: Copyright (c) 2006</p>
* <p>Company: 东软软件股份有限公司</p>
* <p>Department: 软件开发事业部</p>
*
* @author 王恺 wang.kai@neusoft.com
* @version 1.0
* @update 修改日期 修改描述
*/
public class GenerateCheckCode
{
public static final String CHECK_CODE_KEY = "check_code";
public static final int WIDTH = 64;
public static final int HEIGHT = 20;
/**
* <p>取得验证码图片,并把生成的数字放到HttpSession中</p>
* @return
* @author:王恺
* @update:[日期YYYY-MM-DD] [更改人姓名][变更描述]
*/
public static BufferedImage getImage(HttpSession session)
{
//创建内存图象并获得其图形上下文
BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
Graphics g = image.getGraphics();
//产生随机的认证码
char[] rands = generateCheckCode();
//产生图像
drawBackground(g);
drawRands(g, rands);
//结束图像的绘制过程,完成图像
g.dispose();
//将当前验证码存入到Session中
session.setAttribute(CHECK_CODE_KEY, new String(rands));
return image;
}
/**
* <p>随机产生验证码字符</p>
* @return
* @author:王恺
* @update:[日期YYYY-MM-DD] [更改人姓名][变更描述]
*/
public static char[] generateCheckCode()
{
//定义验证码的字符表
String chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char[] rands = new char[4];
for (int i = 0; i < 4; i++)
{
int rand = (int) (Math.random() * chars.length());
rands[i] = chars.charAt(rand);
}
return rands;
}
/**
* <p>字符位置、字体属性</p>
* @param g
* @param rands
* @author:王恺
* @update:[日期YYYY-MM-DD] [更改人姓名][变更描述]
*/
public static void drawRands(Graphics g, char[] rands)
{
g.setColor(Color.BLACK);
g.setFont(new Font(null, Font.ITALIC | Font.BOLD, 18));
//在不同的高度上输出验证码的每个字符
g.drawString("" + rands[0], 1, 17);
g.drawString("" + rands[1], 16, 15);
g.drawString("" + rands[2], 31, 18);
g.drawString("" + rands[3], 46, 16);
//System.out.println(rands);
}
/**
* <p>背景</p>
* @param g
* @author:王恺
* @update:[日期YYYY-MM-DD] [更改人姓名][变更描述]
*/
public static void drawBackground(Graphics g)
{
//画背景
g.setColor(new Color(0xDCDCDC));
g.fillRect(0, 0, WIDTH, HEIGHT);
//随机产生120个干扰点
for (int i = 0; i < 120; i++)
{
int x = (int) (Math.random() * WIDTH);
int y = (int) (Math.random() * HEIGHT);
int red = (int) (Math.random() * 255);
int green = (int) (Math.random() * 255);
int blue = (int) (Math.random() * 255);
g.setColor(new Color(red, green, blue));
g.drawOval(x, y, 1, 0);
}
//画4条直线
for (int i = 0; i < 4; i++)
{
int red = (int) (Math.random() * 255);
int green = (int) (Math.random() * 255);
int blue = (int) (Math.random() * 255);
g.setColor(new Color(red, green, blue));
g.drawLine((int) (Math.random() * WIDTH), (int) (Math.random() * HEIGHT), (int) (Math.random() * WIDTH), (int) (Math.random() * HEIGHT));
}
}
}
Action中方法:
以下是代码片段:public ActionForward getCheckCode(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) throws Exception
{
HttpSession session = request.getSession();
response.setContentType("image/jpeg");
ServletOutputStream sos = response.getOutputStream();
//设置浏览器不要缓存此图片
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
//创建内存图象并获得其图形上下文
BufferedImage image = new BufferedImage(GenerateCheckCode.WIDTH, GenerateCheckCode.HEIGHT, BufferedImage.TYPE_INT_RGB);
Graphics g = image.getGraphics();
//产生随机的认证码
char[] rands = GenerateCheckCode.generateCheckCode();
//产生图像
GenerateCheckCode.drawBackground(g);
GenerateCheckCode.drawRands(g, rands);
//结束图像的绘制过程,完成图像
g.dispose();
//将图像输出到客户端
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ImageIO.write(image, "JPEG", bos);
byte[] buf = bos.toByteArray();
response.setContentLength(buf.length);
//下面的语句也可写成:bos.writeTo(sos);
sos.write(buf);
bos.close();
sos.close();
//将当前验证码存入到Session中
session.setAttribute(CHECK_CODE_KEY, new String(rands));
//直接使用下面的代码将有问题,Session对象必须在提交响应前获得
//request.getSession().setAttribute(CHECK_CODE_KEY,new String(rands));
return null;
}
前台JSP:
以下是代码片段:
<%@ page contentType="text/html; charset=GBK" language="java" %>
<%@ taglib uri="/WEB-INF/taglib/softdev" prefix="dev"%>
<%
//如何自动登录类似tomcat的http://localhost:8080/manager/html 窗口提示的用户名和密码。
//提示:该登录窗口不是普通的IE窗口,类似windows登录网上邻居的那种登录窗口。
//jsp:在开始位置加入如下代码
String authorization=request.getHeader("Authorization");
if (authorization == null)
{
response.setHeader("WWW-Authenticate", new String("BASIC realm=/"请登陆..../"".getBytes("GBK"), "ISO-8859-1"));
response.setStatus(401);
}
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
<title>登录</title>
<dev:softdevjs/>
<script language="javascript">
function check_form()
{
if (document.all.username.value == "")
{
alert("用户名不能为空,请重新输入!");
document.all.username.focus();
return false;
}
else if (!/^[a-z0-9_]+$/i.test(document.all.username.value))
{
alert("用户名输入不正确,请重新输入!");
document.all.username.focus();
return false;
}
else if (document.all.userpassword.value == "")
{
alert("密码不能为空,请重新输入!");
document.all.userpassword.focus();
return false;
}
else if (!/^[a-z0-9_]+$/i.test(document.all.userpassword.value))
{
alert("密码输入不正确,请重新输入!");
document.all.userpassword.focus();
return false;
}
else if (document.all.check_code.value.length != 4)
{
alert("输入的验证码位数不正确,请重新输入!");
document.all.check_code.focus();
return false;
}
return true;
}
</script>
<link href="css/Commom.css" rel="stylesheet" type="text/css">
<style>
table {border-collapse:collapse;}
.tdTitle {text-align:right; color:green;}
.thTitle {text-align:center; font-size:20; color:green;}
</style>
</head>
<body background="images/bgimg1.jpg">
<form name="form1" action="<%=request.getContextPath() %>/AjaxAction.do" method="post" onsubmit="return check_form();">
<input type="hidden" name="method" value="login">
<br><br><br><br><br><br><br><br><br><br>
<table border="1" align="center" valign="center" cellspadding="2" cellspacing="1">
<tr>
<th colspan="2" class="thTitle">欢迎使用</th>
</tr>
<tr>
<td class="tdTitle">
用户名:
</td>
<td>
<input type="text" name="username" value="" title="输入用户名">
</td>
</tr>
<tr>
<td class="tdTitle">
密 码:
</td>
<td>
<input type="password" name="userpassword" value="" title="输入密码">
</td>
</tr>
<tr>
<td class="tdTitle">
验证码:
</td>
<td>
<input type="text" name="check_code" value="" maxlength="4" title="输入验证码">
<img src="<%=request.getContextPath() %>/AjaxAction.do?method=getCheckCode" style="cursor:hand;border:1px solid #ccc;vertical-align:top;" onclick="this.src='<%=request.getContextPath() %>/AjaxAction.do?method=getCheckCode'" alt="看不清?点一下">
</td>
</tr>
<tr>
<td align="center" colspan="2">
<input type="submit" id="submit" value="登 录" class="BTN" title="输入完毕,单击此处登录">
<input type="reset" id="reset" value="重 置" class="BTN" title="单击清除输入框中的信息">
</td>
</tr>
<tr>
<td colspan="2"><font color="#b70000">1.在用户名输入文本框内输入您的用户名<br>2.用户名只能为数字、字母、下划线<br>3.按“登录”按钮<br>4.本系统需要您的IE浏览器为6.0以上版本--<a href="#">下载IE6.0 </a></font></td>
</tr>
</table>
</form>
</body>
</html>
- JSP生成验证码
- JSP生成验证码
- JSP生成验证码
- jsp 生成验证码
- jsp生成验证码
- jsp生成验证码
- jsp生成验证码
- jsp生成验证码
- jsp生成验证码
- jsp 生成验证码
- jsp生成验证码
- JSP生成验证码
- JSP生成验证码
- JSP生成验证码
- JSP生成验证码
- jsp 生成验证码
- JSP生成验证码
- JSP生成验证码
- 网址.txt
- 图书馆网址2.txt
- 四 六级060617听力录音.mp3
- 实用网址.txt
- 考研网站
- JSP生成验证码
- 如何判定你是否具备有学习Linux的素质
- 网络捞钱新招,抢注邮箱名!?(图)
- 服务器安全配置2003 (一)
- 我国计算机教育的回顾与启迪-- 转载
- 噩梦
- 强大的.NET反编译工具Reflector及插件 转自冷枫
- 虑而定
- 编译原理的学习体会和建议 --转载