在客户端无法检测注册用户名是否被占用,这需要查询数据库,所以是服务器端负责这块。
实现思路大致描述:
注册表单中添加自动检测用户名是否被占用的功能,其实就是利用 ajax 向服务器发送请求,并带着用户输入的用户名过去,在服务器端可以调用 DAO 的 findUser(String userName)方法,去数据库查询获取数据,如果可以取到说明已经被占用了,如果无法取到则说明没有被占用。不过 ajax 的功能只是获取到服务器发送回来的 json 字符串而已,这个字符串会自动转换成 js 对象,该对象其中一个属性是布尔类型的,如果是 true 说明没有被占用,false 说明被占用,就看 DAO 的方法返回的是哪个了。
实现思路具体描述:
在 DAO 的 findUser(String userName) 方法中通过客户输入的用户名去数据库查询,在 findUser 方法中有下面这样的查询结果的代码
ResultSet rs = stmt.executeQuery();
如果用户名存在就一定会获取到数据,即 ResultSet 对象中就含有数据,执行 rs.next() 则会返回 true,所以如果是 true 则表示用户名被占用了;如果是 false 则表示 ResultSet 对象里面没有数据,即表示用户名没有被占用。最后我们只要 return !rs.next() 就 OK 了。
注意:如果用户名不存在则获取不到数据,但是返回的仍然是一个结果集对象,只是这个对象里面没有数据罢了。
那么rs就是1个结果集对象,可以rs.next()下,然后取出全部的字段值封装成1个user对象返回。其实注册用户名的检测根本无需去封装成user对象返回。因为这个对象根本没有用到。
扩展:
客户端验证即表单 JS 验证只是用来检测用户输入的数据是否符合一定的规范。不过大家要知道,JS 表单检测的代码是可以被用户修改掉的,也就是说用户可以避过表单验证去访问服务器中的应用,因此在服务器端也要进行同样的检测才行。如果是在 struts2 的应用中,Action 组件接收到参数后在调用 DAO 前就要对参数的格式进行必要的检测了。