posts - 37, comments - 8, trackbacks - 0, articles - 0

response之图形验证码

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><href="register.jsp">用户注册</a></td>
  
</tr>
  
<tr>
    
<td>密码:</td>
    
<td><input  type="password" name="password"/></td>
    
<td><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>


 


只有注册用户登录后才能发表评论。


网站导航: