response之图形验证码

通过设置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 >


 

你可能感兴趣的:(response之图形验证码)