ajax+hibernate 实现及时刷新检测用户名

来源:互联网 发布:2017淘宝双11红包 编辑:程序博客网 时间:2024/06/05 05:32

    自己写了个登录/注册功能的程序,需要用ajax来检测用户名是否被占用。之前在书上学ajax的时候,书里面的例子是直接定义一个String[] 然后用从注册页传得的用户名value与其比较,但是实际应用中我们需要把此value和数据库中的数据进行比较。这里我用的是hibernate技术。先贴上代码

持久化类

public class Info {
   public Integer Id;
   public String username;
   public String password;
   public String email;
   public Integer phone;
public Integer getId() {
return Id;
}
public void setId(Integer id) {
Id = id;
}
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;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Integer getPhone() {
return phone;
}
public void setPhone(Integer phone) {
this.phone = phone;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String sex;
}


ajax的业务逻辑

<body>
<%
request.setCharacterEncoding("UTF-8");  
response.setCharacterEncoding("UTF-8");  
response.setContentType("text/html; charset=UTF-8");   //设置编码格式为UTF-8
Session session1=null;
session1=HibernateGo.getSession(); //HibernateGO为我定义的hibernate类,用来配置sessionFactory ,获取session
String name=request.getParameter("user");//user为注册页 用户名的value
String hql="select count(*) from Info info";// 获得Info表的行数
Query query=session1.createQuery(hql);//执行此hql,并将返回一个Object对象

int count = ((Number)query.uniqueResult()).intValue();  //Object转Number 转int
int j=0;
for(int i=1;i<=count;i++){
Info info=(Info)session1.get(Info.class, new Integer(i));  //此info即一行数据的集合
System.out.println(info.getUsername().toString()); //打印出每行数据的username属性
if(name.equals(info.getUsername().toString())){
j++;
out.println("此用户名已经被注册");
}
}
if(j==0){
out.println("此用户名可以注册");
}

%>
</body>


因为request.responseText 传的是中文字符,所以需要把编码定义成UTF-8。然后用HQL获得数据库表单的总行数,在对数据库表单的数据进行遍历,每行数据都相当于一个对象。将注册页传来的name与每个对象的username属性进行比较。这里要定义一个全局变量j,如果有一个表单中的username属性与注册页传来的name内容一样,则j+1。等遍历完后如果j还是为0,则表明此name为被占用可以注册,如果不为0则表明此name已经被占用。


当然这段代码也有不足的地方,第一,用户名的name只能用英文。如果用中文字符,则与数据库表单中的数据比较时不好比较。而且这里ajax机制只会启动一次,即你用一个为被注册的name注册后再用此name注册还是会被显示可以注册,唯一办法是重启ide(我也不知道为什么重启服务器不行)。之前在网上查了是因为网址缓存的原因,按网友的方法改了几次还是不行。

    0 0
    原创粉丝点击