`
ch0431
  • 浏览: 43724 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

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;


public void setLoginuser(String loginuser) {
this.loginuser = loginuser;
}


public void setLoginpass(String loginpass) {
this.loginpass = loginpass;
}


public String execute()throws Exception{
HttpServletRequest request = (HttpServletRequest) ActionContext.getContext().get(ServletActionContext.HTTP_REQUEST);//获取request
HttpServletResponse response = (HttpServletResponse) ActionContext.getContext().get(ServletActionContext.HTTP_RESPONSE);
PrintWriter out = response.getWriter();
out.print("true");
out.flush();
out.close();
IUser user = new UserImpl();
String password = user.getPass(loginuser);
System.out.println("============================="+loginuser);
if(!"".equals(loginpass)&&loginpass.equals(password)){
return "success";
}else{
return null;
}
}


}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics