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

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" οnblur="registerCheck()" οnfοcus="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");
}
效果:
表中记录:






  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值