11级_Java_曹建波 03.13 Struts2&ajax实现用户名唯一验证案例
在项目的开发过程中离不开用户名唯一的验证或者邮件唯一的验证.那通过struts2技术是怎么实现,下面以用户名唯一验证案例讲解。
实现效果:
当用户名输入框失去焦点的时候,能够实现用户名唯一的验证
步骤:
1、设计界面代码
并且引入js文件
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib uri="/struts-tags" prefix="s" %><%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>My JSP 'index.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"><!--<link rel="stylesheet" type="text/css" href="styles.css">--><script type="text/javascript" src="${pageContext.request.contextPath }/js/utils.js"></script><script type="text/javascript" src="${pageContext.request.contextPath }/js/regUser.js"></script> </head> <body> <div align="center"> <h3>注册页面</h3> <s:form action="regUser" namespace="/csdn" theme="simple"> 用户名:<s:textfield name="username" id="uname"/><span id="cname"></span> <br> 密码:<s:password name="userpass" id="ipass" /> <br> 邮箱:<s:textfield name="useremail" id="uemail" /> <br> <s:submit value="注册"/> </s:form> </div> </body></html>
2、在util.js文件中封装
1、通过id获取dom对象的方法
2、创建XMLHTTPRequest对象的方法
regUser.js
window.onload = function() {var unameDom=$("uname");unameDom.onblur=function(){var content="name="+unameDom.value;var url="./csdn/UserAction_checkName.action?time="+new Date().getTime();var xhr=createXHR();xhr.onreadystatechange=function(){if(xhr.readyState==4){if(xhr.status==200||xhr.status==304){$("cname").innerHTML=xhr.responseText;}}}xhr.open("POST",url,true);xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");xhr.send(content);}}
utils.js
function $(id){return document.getElementById(id);}function createXHR(){var xhr;var aVersion=["MSXML2.XMLHttp.5.0","MSXML2.XMLHttp.4.0","MSXML2.XMLHttp.3.0","MSXML2.XMLHttp","Microsoft.XMLHttp"];try{xhr=new XMLHttpRequest();}catch(ex){for(var i=0;i<aVersion.length;i++){try{xmlHttpRequest=new ActiveXObject(aVersion[i]);return xmlHttpRequest;}catch(exx){continue;}}}return xhr;}
3、创建Action
说明:1、封装的name属性是接受 ajax请求传递的name参数
2、checkName方法就是处理用户名唯一验证的方法. 此方法是在struts.xml文件中通过通配符配置的(详见struts.xml文件)。
package www.csdn.ajax_struts2.action;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.http.HttpServletResponse;import org.apache.struts2.ServletActionContext;import www.csdn.ajax_struts2.dao.UserDao;import www.csdn.ajax_struts2.dao.UserDaoImpl;public class UserAction {private String name;private UserDao ud=new UserDaoImpl();public String getName() {return name;}public void setName(String name) {this.name = name;}public String checkName(){HttpServletResponse response=ServletActionContext.getResponse();response.setContentType("text/html;charset=utf-8");PrintWriter out=null;try {out=response.getWriter();} catch (IOException e) {e.printStackTrace();}boolean flag=ud.checkName(name);if(flag){out.print("用户名已存在");}else{out.print("用户名可以使用");}out.flush();out.close();return "reg";}}
4、配置struts.xml文件
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN""http://struts.apache.org/dtds/struts-2.3.dtd"><struts><!-- 配置常量 --><include file="struts_constant.xml"/><package name="test" namespace="/csdn" extends="struts-default"><action name="UserAction_*" class="www.csdn.ajax_struts2.action.UserAction" method="{1}"><result name="reg"><param name="location">/sc.jsp</param><param name="charset">utf-8</param></result></action></package></struts>
5、数据库连接部分
public boolean checkName(String username) {boolean flag = false;User user=null;try {Query query = getSession().createQuery("from User u where u.name=:username").setParameter("username", username);user=(User) query.uniqueResult();if(user!=null){flag = true;}} catch (Exception e) {throw new RuntimeException(e);}return flag;}