Posted on 2008-10-19 21:27
梦与桥 阅读(676)
评论(0) 编辑 收藏
通过设置response对象的contentType属性为image/jpeg,以图片的形式显示一个随机验证码。包括login.jsp、verifycode.jsp、checklogin.jsp与error.jsp。login.jsp为提交信息页面,verifycode.jsp生成验证码,checklogin.jsp检验验证码,error.jsp为登录出错转向的页面。
§login.jsp的code如下:
<%@ page contentType="text/html; charset=GBK" %>
<html>
<head>
<title>
用户登录页面
</title>
</head>
<body bgcolor="#ffffff">
<h1>
请输入用户登录信息
</h1>
<form name="userinfo" action="checklogin.jsp" method="POST" onsubmit="return(checkinfo())">
<table border="1">
<tr>
<td>用户名:</td>
<td><input type="text" name="username"/></td>
<td><a href="register.jsp">用户注册</a></td>
</tr>
<tr>
<td>密码:</td>
<td><input type="password" name="password"/></td>
<td><a href="forgetpassword.jsp">忘记密码了</a></td>
</tr>
<tr>
<td>验证码:</td>
<td><input type="text" name="verifycode"/></td>
<td><img alt="" src="verifycode.jsp" /></td>
</tr>
<tr>
<td><input type="submit" value="登录"/></td>
<td><input type="reset" value="重置"/></td>
<td></td>
</tr>
</table>
</form>
<script >
function checkinfo(){
var oObject = document.all.item("userinfo");
for (i = 0; i < oObject.length; i++){
if (oObject(i).value.length==0) {
alert("必填项的值不能为空");
oObject(i).focus();
return false;
}
}
return true;
}
</script>
</body>
</html>
verifycode.jsp的code如下:
<%@ page pageEncoding="gb2312" %>
<%@ page import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*" %>
<%@ page import="java.io.OutputStream" %>
<%
response.setContentType("image/jpeg");
response.addHeader("Content-Disposition","attachment;filename=verifycode.jpg" );
//定义一个整型变量用于存放生成的随机数
int icode=0;
//在内存中生成一个图片以及宽、高、类型
BufferedImage image=new BufferedImage(50,16,BufferedImage.TYPE_INT_RGB);
//生成一个2D的图形
Graphics g =image.getGraphics();
//设置图形为白色
g.setColor(Color.white);
//填充图象
g.fillRect(0,0,50,16);
//新建一个随机对象
Random random=new Random();
//取出4位整数
while(icode<=1000)
{
icode=random.nextInt(10000);
};
//把随机整数转换成字符串
String scode=icode+"";
//将生成随机校验码存入session中
session.setAttribute("verifycode",scode);
//设置图形的颜色为黑色
g.setColor(Color.BLACK);
//把生成的随机数做为字符串写到图形中
g.drawString(scode,12,12);
//从response.getOutputStream()得到一个输出流对象
ServletOutputStream os=response.getOutputStream();
//输出到页面(不知道我的理解是否正确)
ImageIO.write(image,"JPEG",os);
//关闭输出流对象
os.flush();
os.close();
%>
checklogin.jsp的code如下:
<%@ page contentType="text/html; charset=GBK" %>
<html>
<head>
<title>
responseDemo
</title>
</head>
<body bgcolor="#ffffff">
<h1>
用户登录信息
</h1>
<%
String name=request.getParameter("name");
String password=request.getParameter("password");
if (password.equalsIgnoreCase("000000")){
//从Session中取得验证码的值
String verifycode=(String)session.getAttribute("verifycode");
//从客户端取用户提交过来验证码
String verifycode1=request.getParameter("verifycode");
if (verifycode.equalsIgnoreCase(verifycode1)){
%>
用户登录成功,客户端输入验证码为:<%= verifycode1%>
<% }
}else{
response.sendRedirect("dispatcherDemo.jsp");
}
%>
</body>
</html>
error.jsp的code如下:
<%@ page contentType="text/html; charset=GBK" %>
<html>
<body bgcolor="#ffffff">
<h1>
登录出错
</h1>
</body>
</html>