您的位置:首页 > 编程语言 > Java开发

ajax+struts2实现验证用户名是否已经被注册

2017-06-23 17:52 218 查看

1.数据库相关操作没有使用hibernate框架(还没看完),使用了最基础的代码,但是运用了DAO设计模式。

在这个模式中DAO主要完成数据的操作,客户端依靠DAO接口进行操作,服务端要将接口进行具体实现。DAO的主要组成由以下几个部分组成。

        1、DatabaseConnection:专门负责数据库打开与关闭操作的类。

        2、VO:主要由属性、setter、getter方法,VO类中的属性与数据表中的字段相对应。每一个VO对象相当于表中的一条记录。

        3、DAO接口:主要定义数据库操作的接口,定义数据库的原子性操作,如增删改,按ID查询。

        4、Impl:DAO的具体实现类,完成具体的数据库操作,但是不负责数据库的打开和关闭,接口类的名称首字母用“I”,表示其是一个接口。

        5、Proxy:代理实现类。主要完成数据库的打开和关闭,并调用Impl类对象(真实对象类)的操作,之所以增加代理类是为了以后的拓展,如果一个程序可以A-B,那么中间最好加一个过渡,使用A-C-B的形式,可以有效减少程序的耦合度,使开发结构更加清晰。

        6、Factory:工厂类,通过工厂类取得一个DAO的实例化对象,编写工厂类也是为了降低代码的耦合度,工厂类产生实例的方法通常是静态函 数,这样一来就可以通过工厂类名直接生成实例。



具体代码就不予展示了,展示实现验证用户名是否存在的核心代码核心代码:


User:

package com.bpf.test.vo;

public class User {
private String username;
private String password;
private String sex;
private String email;
private String phoneNumber;

public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPhoneNumber() {
return phoneNumber;
}
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}

}


UserDAOImpl:
存在返回ture

package com.bpf.test.impl;
import java.sql.*;

import com.bpf.test.dao.*;
import com.bpf.test.vo.*;

public class UserDAOImpl implements UserDAO {
private Connection conn = null;
private PreparedStatement pstmt = null;

public UserDAOImpl(Connection conn) {
// TODO Auto-generated constructor stub
this.conn = conn;
}
@Override
public boolean hasRegistered(User user) throws Exception {
// TODO Auto-generated method stub
String username = user.getUsername();
boolean hasRegisteredFlag = false;
String sql = "SELECT * FROM userinfo Where username = '"+username+"'";
this.pstmt = this.conn.prepareStatement(sql);//预编译
ResultSet rs = pstmt.executeQuery();
if(rs.next()){
hasRegisteredFlag = true;
}
this.pstmt.close();
return hasRegisteredFlag;
}

}


UserDAOProxy:

package com.bpf.test.proxy;
import com.bpf.test.dao.*;
import com.bpf.test.dbconn.*;
import com.bpf.test.impl.*;
import com.bpf.test.vo.*;

public class UserDAOProxy implements UserDAO {
private DataBaseConnection dbc = null;
private UserDAO userDAOImpl = null;

public UserDAOProxy() throws Exception {
// TODO Auto-generated constructor stub
this.dbc = new DataBaseConnection();
this.userDAOImpl = new UserDAOImpl(this.dbc.getConnection());//实例化真实类
}
@Override
public boolean hasRegistered(User user) throws Exception {
// TODO Auto-generated method stub
boolean flag = false;
try{
flag = userDAOImpl.hasRegistered(user);
}catch(Exception e){
throw e;
}finally{
dbc.close();
}
return flag;
}
}


UserDAOFactory:

package com.bpf.test.factory;
import com.bpf.test.dao.*;
import com.bpf.test.proxy.*;

public class DAOFactory {
public static UserDAO getUserDAOInstance() throws Exception { //取得DAO接口实例
return new UserDAOProxy(); //取得代理类的实例
}
}


Check(action):

使用模型驱动可以直接把用户表单封装到实体类中,用户名存在就返回ture到ajax
package com.bpf.checked;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;

import com.bpf.test.dao.UserDAO;
import com.bpf.test.factory.DAOFactory;
import com.bpf.test.vo.User;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

public class Check extends ActionSupport implements ModelDriven<User> {
private HttpServletRequest request = ServletActionContext.getRequest();
private HttpServletResponse response = ServletActionContext.getResponse();
private HttpSession session = request.getSession();
private UserDAO userDAOProxy = null;
private User user = new User();
@Override
public User getModel() {
// TODO Auto-generated method stub
return user;
}

//验证用户名是否已经被注册
public String registerCheck() throws IOException{
PrintWriter out = response.getWriter();
try{
userDAOProxy = DAOFactory.getUserDAOInstance();
}catch(Exception e){
e.printStackTrace();
}
try{
boolean flag = userDAOProxy.hasRegistered(user);
out.print(String.valueOf(flag));
}catch(Exception e){
e.printStackTrace();
}
return NONE;
}
}


struts.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!-- 引入DTD约束 -->
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<constant name="struts.i18n.encoding" value="UTF-8"></constant>
<package name="myProject" extends="struts-default" namespace="/">
<action name="check_*" class="com.bpf.checked.Check" method="{1}">
</action>
</package>
</struts>


注册页面部分代码:

使用了bootstrap相应式框架
<div class="form-group" id="div1">
<label class="sr-only" for="form-first-name">First name</label>
<input type="text" name="username" placeholder="用户名..." class="form-first-name form-control" id="username"
aria-describedby="inputSuccess2Status" onblur="registerCheck()" onfocus="remove()">
</div>


ajax代码:

若存在则为div1添加一个类:has-error 效果是会产生一个警示红框 输入框失去焦点时验证,获得焦点时移除该效果
function registerCheck() {
http_request = new XMLHttpRequest();
var url = "check_registerCheck?username=" + $("#username").val();
http_request.onreadystatechange = function () {
if (http_request.readyState == 4 && http_request.status == 200) {
var s = http_request.responseText;
if (s == "true") {
$("#div1").addClass("has-error");
}
}

}
http_request.open("POST", url, true);
http_request.send();

}
function remove() {
$("#div1").removeClass("has-error");
}


效果:


表中记录:



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: