在项目的开发过程中离不开用户名唯一的验证或者邮件唯一的验证.那通过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;
}