您的位置:首页 > Web前端 > JQuery

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

2015-09-04 13:28 609 查看
首先在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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: