struts2用jquery进行验证码传递以及验证

首先在jsp中导入jquey.js包  博主用的1.91版本

login.jsp:

  <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"
    contentType="text/html; charset=utf-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>


<title>My JSP 'loginForm.jsp' starting page</title>

<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<script type="text/javascript" src="../js/jquery-1.9.1.js"></script>
<script type="text/javascript">
        function validateForm(){
            var b=false;
            var value=$("#varifycode").val();
            var name=$("#varifycode").attr("name");
            $.ajax({url:"validate.action?"+name+"="+value,
                    dataType:"json",
                    async:false,
                    success:function(data){
                        if(data){
                        
                            $("#verifycode_msg").text("");
                            b=true;
                        }
                        else{
                            $("#verifycode_msg").text("验证码错误");
                        }
                    }
                        
            });
            return b;
        }
        
        $(function(){
            $("#submit").click(function(){
                    var b=validateForm();
            if(b){
                $("#loginform").submit();
            }
            });
        
        });
    </script>
</head>

<body>
    <s:debug />
    <form id="loginform" action="login" method="post">
        <table>
            <tr>
                <td>用户名:</td>
                <td><input type="text" name="admin.adminCode" /></td>
            </tr>
            <tr>
                <td>密码</td>
                <td><input type="password" name="admin.password" /></td>
            </tr>
            <tr>
                <td>验证码:</td>
                <td><input type="text" id="varifycode" name="checkCode" /></td>
            </tr>
            <tr>
                <td><img src="checkCode" alt="验证码"
                    onclick="this.src='checkCode.action?#'+Math.random()" /></td>
                <td><span id="verifycode_msg"></span></td>
            </tr>
            <tr>
                <td><a id="submit" href="javascript:"> <img
                        src="../img/login_btn.jpg" />
                </a></td>
                <td><span ><s:property value="errorMsg"></s:property></span></td>
            </tr>
        </table>
    </form>
</body>
</html>

产生验证码的java类

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Random;

import com.sun.image.codec.jpeg.ImageFormatException;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

public class CheckCodeUtils {
    private String number;
    private byte[]codeArr;
    
    public byte[] getCode(int width,int height,int length) throws ImageFormatException, IOException{
        BufferedImage image=new BufferedImage(width,height,BufferedImage.TYPE_INT_BGR);
        Graphics g=image.getGraphics();
        Random r=new Random();
        g.setColor(new Color(r.nextInt(255),r.nextInt(255),r.nextInt(255)));
        g.fillRect(0, 0, width, height);
         number="";
        for(int i=0;i<length;i++){
            int h=(int)(15+15*r.nextDouble());
            g.setColor(new Color(r.nextInt(255),r.nextInt(255),r.nextInt(255)));
            String ch=getNumber(1);
            number+=ch;
            g.setFont(new Font(null,Font.BOLD|Font.ITALIC,h));
            g.drawString(ch, (width/length)*i, h);
        }
        System.out.println(number);
        for(int i=0;i<10;i++){
            g.setColor(new Color(r.nextInt(255),r.nextInt(255),r.nextInt(255)));
            g.drawLine(r.nextInt(80), r.nextInt(30), r.nextInt(80), r.nextInt(30));
        }
        
        ByteArrayOutputStream baos=new ByteArrayOutputStream();
        JPEGImageEncoder encoder=JPEGCodec.createJPEGEncoder(baos);
        
        encoder.encode(image);
        codeArr=baos.toByteArray();
        return codeArr;
    }
    public String getNumber(){
        return number;
    }
    
    private String getNumber(int length){
        char[] ch={'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
                'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
        Random r=new Random();
        StringBuffer buffer=new StringBuffer();
        for(int i=0;i<length;i++){
            buffer.append(ch[r.nextInt(36)]);
            }
        return buffer.toString();
        }
}

检验验证码的Action类

import java.io.ByteArrayInputStream;
import java.io.InputStream;

import com.zzk.netctoss.utils.CheckCodeUtils;

public class CheckCodeAction extends BaseAction  {
    private InputStream codeInputStream;
    private String checkCode;
    private boolean ok;

    public InputStream getCodeInputStream() {
        return codeInputStream;
    }
    
    public void setCodeInputStream(InputStream codeInputStream) {
        this.codeInputStream = codeInputStream;
    }

    public String getCheckCode() {
        return checkCode;
    }

    public void setCheckCode(String checkCode) {
        this.checkCode = checkCode;
    }

    public boolean getOk() {
        return ok;
    }

    public void setOk(boolean ok) {
        this.ok = ok;
    }

    public String code() throws Exception{
        CheckCodeUtils ccu=new CheckCodeUtils();
        byte[]codeArr=ccu.getCode(60, 30, 4);
        session.put("checkCode", ccu.getNumber());
        codeInputStream=new ByteArrayInputStream(codeArr);
        return "success";        
    }
    
    public String validate(){
        System.out.println("验证码验证");
        ok=false;
        if(checkCode.equalsIgnoreCase((String) session.get("checkCode"))){
            ok=true;
            System.out.println("验证码正确");
        }
        return "success";
    }
}

struts.xml 文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
   
    <package name="login"  namespace="/login" extends="json-default" >
        <action name="loginForm">
            <result >/WEB-INF/jsp/loginForm.jsp</result>
        </action>
        <action name="checkCode" class="com.zzk.netctoss.action.CheckCodeAction" method="code" >
            <result name="success" type="stream">
                <param name="inputName">codeInputStream</param>
                <param name="contentType">image/jpg</param>
            </result>
        </action>
        <action name="validate" class="com.zzk.netctoss.action.CheckCodeAction" method="validate">
            <result name="success" type="json">
                <param name="root">ok</param>
            </result>
        </action>
    </package>
</struts>    

 

posted @ 2015-09-04 13:28  棍子上的萝卜头  阅读(192)  评论(0编辑  收藏  举报