日期:2014-05-16  浏览次数:20572 次

struts2+ajax验证


今天闲着无聊就开始翻看struts2,虽然现在公司还是使用的struts1可是在时代潮流面前恐怕很快就会struts2取代;所以就开始自学一下。按照老习惯开始编写登陆程序。基本上算是顺利完成,心血来潮就想用ajax进行一下登陆验证。发现了一系列的问题。首先:想要用servlet来和ajax进行交互。登陆页面放到servlet中。这样就避开了struts2中action很多不方便的地方。可是捣鼓了好久,差了很多资料,悲哀的发现,struts2没有办法和servlet结合使用。struts2的过滤器总是会把servlet过滤掉。报的错误是404.
没办法只能想办法用struts2中的action何ajax交互。这时候就出现了一系列的问题。获取request啊,获取response啊。一堆堆的问题出现了,下面是我自己编写的代码。经过验证基本上实现了简单的ajax和struts2的结合使用。


1、编写jsp页面(有些自动生成的代码我删掉了,大家不要直接复制。有用的代码只是JavaScript和form中的内容,并且此处不解释ajax的具体含义。如果不懂得ajax先学学ajax。)
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<
%@taglib prefix="s" uri="/struts-tags" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
? <head>
??? <base href="<%=basePath%>">
???
??? <title><s:text name="loginPage"></s:text> </title>
? </head>
?
? <script type="text/javascript">
?
? var xmlHttp;
? var result = false;
? function checkuser(){
???
? var uname = document.all.loginuser.value;?
? if(uname.length<3){//判断用户名的长度,如果不写或者太短则不能验证通过。
? document.getElementById("unameMsg").innerHTML="<font color='red'>用户名太短,请重新输入!</font>";
? return false;
? }else{
??
? document.all.unameMsg.innerHTML="<font color='red'>用户名检测中...</font>";
? if(window.ActiveXObject){
??
? xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");//IE实例
?
? }else if(window.XMLHttpRequest){
??
? xmlHttp = new XMLHttpRequest();//其他浏览器实例
??
? }
??
? var uri = "login!execute?user="+uname;//此处login为配置文件中的name,execute为action中的方法。
? uri = encodeURI(uri);
? uri = encodeURI(uri);
?
? xmlHttp.open("post",uri,true);
??
? xmlHttp.onreadystatechange = function(){//回调函数判断当前状态是否是响应状态
? if(xmlHttp.readyState==4){
? if(xmlHttp.status==200){
? alert(xmlHttp.responseText)
? if(xmlHttp.responseText=="true"){
? document.all.unameMsg.innerHTML="<font color='red'>该用户名已被使用,请您重新选择用户名!</font>";
? result = false;
?
? }else{
? document.all.unameMsg.innerHTML="<font color='red'>恭喜您,该用户名可用!</font>";
? result = true ;
? }
? }
? }
?
? }
?
? xmlHttp.send(null);
? }
?
?
? }
?
?
?</script>
?
? <body>
??? <s:form action="login">
???? <s:textfield name="loginuser" key="user" onblur="checkuser()"></s:textfield>通过失去焦点事件来调用函数进行验证
???? <s:div id="unameMsg">ccccc</s:div>
???? <s:password name="loginpass" key="pass"></s:password>
???? <s:submit value="登陆"></s:submit>
??? </s:form>
?
? </body>
</html>


2、action代码
package com.chenhui.action;
import java.io.PrintWriter;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
import com.chenhui.dao.IUser;
import com.chenhui.dao.userdaoimpl.UserImpl;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;


public class LoginAction{
private String loginuser;
private String loginpass;