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>

时间: 2024-08-24 04:15:40

struts2用jquery进行验证码传递以及验证的相关文章

struts2+json+jquery局部刷新实现注册验证

struts2+json+jquery局部刷新实现注册验证 1.项目需要导入的jar包 在web项目的WebRoot/WEB-INF/lib目录下导入以下包 2.在src目录下建立包com.entity,里面建立java类:UserInfo.java .  MailSenderInfo.java UserInfo.java package com.entity; import java.io.Serializable; /** * 说明:用户实体类 * @author wangcunhuazi

Struts2+Jquery+实现Ajax无刷新验证用户名是否存在

小弟之前一直搞不明白Struts2+Jquery+实现Ajax无刷新验证用户名该怎么弄,后来经过努力,终于搞定了,应注意struts配置文件的内容,好了直接上代码了 页面代码 <body> <s:form action="registAction" method="post" namespace="/user"> <table> <tr> <td>UserName</td>

jquery.validation.js 表单验证

jquery.validation.js 表单验证 官网地址:http://bassistance.de/jquery-plugins/jquery-plugin-validation jQuery plugin: Validation 使用说明 一导入js库 <script src="../js/jquery.js" type="text/javascript"></script> <script src="../js/jq

jquery.validate remote 和 自定义验证方法

jquery.validate remote 和 自定义验证方法 $(function(){ var validator = $("#enterRegForm").validate({debug:false, //调试模式取消submit的默认提交功能//errorClass: "error",//默认为错误的样式类为:error//validClass: "check",//验证成功后的样式,默认字符串validfocusInvalid: tr

Struts2 整合jQuery实现Ajax功能(1)

技术领域很多东西流行,自然有流行的道理,这几天用了jQuery,深感有些人真是聪明绝顶,能将那么多技术融合的如此完美. 首先明确个概念: jQuery是什么:是使用javascript语言开发的,用于满足项目前台各种操作需要的js程序文件.也就是说,jQuery基本上就是个js程序集,基础核心是jQuery.js文件. l        当然根据不同的版本具体的表现形式: jQuery.1.6.js或者jquery-1.5.1.js 这个是版本号的不同,具体有哪些区别,还没发现. l      

基于jQuery的Validate表单验证

表单验证可以说在前端开发工作中是无处不在的~ 有数据,有登录,有表单, 都需要前端验证~~  而我工作中用到最多的就是基于基于jQuery的Validate表单验证~  就向下面这样~ 因为今天有个朋友问我要一个表单的验证,所以我就稍微整理了一下~  基本上有了这个表单验证插件,基本上一些常用的验证都可以搞定了~ 如果搞不定,没关系,我们还可以基于Validate来写一个自己的验证插件, 我把它取名为message_zh.js,我们可以在里面扩展自己需要的验证~~ 既然Validate是基于jQ

从零开始学习jQuery (十一) 实战表单验证与自动完成提示插件

原文:从零开始学习jQuery (十一) 实战表单验证与自动完成提示插件 本系列文章导航 从零开始学习jQuery (一) 开天辟地入门篇 从零开始学习jQuery (二) 万能的选择器 从零开始学习jQuery (三) 管理jQuery包装集 从零开始学习jQuery (四) 使用jQuery操作元素的属性与样式 从零开始学习jQuery (五) 事件与事件对象 从零开始学习jQuery (六) jQuery中的Ajax 从零开始学习jQuery (七) jQuery动画-让页面动起来! 从零

jquery.validate1.9.0前台验证使用

一.利用jquery.form插件提交表单方法使用jquery.validate插件 现象:当提交表单时,即使前台未验证通过,也照常提交表单. 解决办法: [php] view plaincopy $('#myForm').submit(function(){ if (!$(this).valid()) return false;//加上此句OK $('.error').html(''); $("#go").prop("disabled",true); $(this

短信验证码、图形验证码、邮件验证的自动化测试

短信验证码.图形验证码.邮件验证问题在自动化测试中是一个很常见的问题,也是一个很棘手的问题.设计的初衷其实就是为了防自动化,防止一些人利用自动工具恶意攻击网站,而很不幸的是,我们所使用的一些自动化测试工具也包含在内.聊一聊最好用的接口方法. 接口法思路: 不管短信验证码.图形验证码还是邮件验证,都需要都auth中去认证.(auth与会员进行分离,auth只负责认证).那么在auth中提供一些后面借口就可以进行自动化测试了. 如根据手机号插入一个新的短信校验,但安全问题就比较突出了,我想到的解决方