Struts2+ajax验证注册用户
今天老师给教我们在J2EE中使用AJAX技术,很显然要在我们项目中加入ajax技术,是一件非常容易的事,课后老师让我们完成一个作业,内容如下:
已知数据库中有若干用户,当用户输入注册信息时,一旦用户完成了用户名的输入,系统可以立即提示该用户名是否可用,而不是等到用户提交注册请求时才判断用户名是否可用。
要实现找个功能其实非常简单,只有在我们的xxxaction.java类文件中实现validate()方法,完成相应的验证代码即可。下面我将介绍一下整个过程,希望能对大家有帮助。这里只介绍功能,所以一切页面效果从简。(本来想直接将整个项目上传,让大家下载的,但是看了一下压缩包大小,居然12MB,实在太庞大了,所以就只有麻烦我了!)
开发环境:MyEclipse 6.5+tomcat 6.0+MySQL 5.0+Struts2
下面给出项目结构图:

项目使用的数据库备份文件在DB_File文件夹中,请先恢复。
项目中使用到的类库,请大家自行导入吧!包括Struts2最小类库集合(如果不知道是哪几个库文件,请参照上图)、AJAX库文件、MySQL连接库文件。
完成了上面的基本操作后,我们可以开始进行主题啦!
首先在WEB-INF文件夹下添加 dwr.xml 文件,这个文件可以直接从其他地方复制过来,但是考虑到有些人可以找不到,所以我就给出该文件的内容,大家可以新建一个名为 dwr.xml 的XML文件,然后将下面内容复制替换即可。
dwr.xml
<!DOCTYPE dwr PUBLIC
"-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN"
"http://www.getahead.ltd.uk/dwr/dwr10.dtd">
<dwr>
<allow>
<create creator="new" javascript="validator">
<param name="class" value="org.apache.struts2.validators.DWRValidator"/>
</create>
<convert converter="bean" match="com.opensymphony.xwork2.ValidationAwareSupport"/>
</allow>
<signatures>
<![CDATA[
import java.util.Map;
import org.apache.struts2.validators.DWRValidator;
DWRValidator.doPost(String, String, Map<String, String>);
]]>
</signatures>
</dwr>
需要修改web.xml文件的内容,直接复制下面内容替换原来的即可。
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>dwr</servlet-name>
<servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>dwr</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
</web-app>
然后就是新建两个页面Regist.jsp(注册页面)、Success.jsp(注册成功提示页面),下面给出页面代码:
Regist.jsp
<%@ taglib prefix="s" uri="/struts-tags"%>
<s:head theme="ajax" />
<%
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>用户注册</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">
</head>
<body>
<s:form action="Regist" theme="ajax" validate="true">
<s:textfield name="userName" label="用户名"></s:textfield>
<s:textfield name="userPwd" label="密码"></s:textfield>
<s:submit label="注册" theme="xhtml"></s:submit>
</s:form>
</body>
</html>
Success.jsp
<%
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>注册成功提示</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">
</head>
<body>
用户名:${requestScope.userName }注册成功!
但是没有写入数据库……
</body>
</html>
下面我们来创建RegistAction.java类文件,实现用户验证,代码如下:
RegistAction.java
import java.sql.*;
import com.opensymphony.xwork2.ActionSupport;
public class RegistAction extends ActionSupport {
public RegistAction() {
try {
Class.forName("com.mysql.jdbc.Driver"); // 显式地加载 JDBC 驱动程序
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void validate() {
// TODO Auto-generated method stub
if (this.getUserName() == null || this.getUserName().trim().equals("")) {
addFieldError("userName", "用户名不能为空!");
} else {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
conn = DriverManager.getConnection(
"jdbc:mysql://localhost:9001/ajtest", "root",
"ajayumi123");
ps = conn
.prepareStatement("SELECT * FROM tb_User WHERE userName=?");
ps.setString(1, this.getUserName());
rs = ps.executeQuery();
if (rs.next())
addFieldError("userName", this.getUserName() + " 该用户已存在!");
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
conn.close();
ps.close();
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
conn = null;
ps = null;
rs = null;
}
}
}
public String execute() throws Exception {
// TODO Auto-generated method stub
return SUCCESS;
}
private Integer id;
private String userName;
private String userPwd;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserPwd() {
return userPwd;
}
public void setUserPwd(String userPwd) {
this.userPwd = userPwd;
}
}
注意一下里面的数据库连接配置,conn = DriverManager.getConnection("jdbc:mysql://localhost:9001/ajtest", "root","ajayumi123"); 这里需要更改为你自己的。不给肯定会出现访问数据库失败问题。
创建struts.xml文件,并且编写其内容:
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="RegistStruts" extends="struts-default">
<action name="Regist" class="ajayumi.Struts2.RegistAction">
<result name="input">/Regist.jsp</result>
<result name="success">/Success.jsp</result>
</action>
</package>
</struts>
到这里,整个项目就完成了,下面只有将项目配置到Tomcat中,然后运行就OK啦!
有了Ajax的类库包,在很大程度上简化了我们的工作量,而且基本实现我们想要的效果。稍后有空将结合Hibernate3.2来实现,在Struts2中进行数据库操作毕竟不是适当的方案。

浙公网安备 33010602011771号