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

<?xml version="1.0" encoding="UTF-8"?>
<!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文件的内容,直接复制下面内容替换原来的即可。

<?xml version="1.0" encoding="UTF-8"?>
<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

<%@ page language="java" pageEncoding="GB18030"%>
<%@ 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
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<%
    
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

package ajayumi.Struts2;

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(
1this.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文件,并且编写其内容:

<?xml version="1.0" encoding="UTF-8" ?>
<!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中进行数据库操作毕竟不是适当的方案。

posted @ 2008-10-21 00:52  ajayumi  阅读(8370)  评论(10)    收藏  举报