琢磨一天了,想看看你们怎么配置的。
Servlet.java
public class Servlet extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
String name = request.getParameter("username");
String url = "jdbc:mysql://localhost:3306/test";
String user = "root";
String password = "root";
Connection conn = null;
PreparedStatement pst = null;
ResultSet rs = null;
response.setContentType("text/html");
response.setCharacterEncoding("UTF-8");
OutputStream os = response.getOutputStream();
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(url, user, password);
String sql = "select username from test where username=? ";
pst = conn.prepareStatement(sql);
pst.setString(1, name);
rs = pst.executeQuery();
if(rs.next()) {
System.out.println("用户名"+name+"已存在");
String message = "用户名"+name+"已存在";
os.write(message.getBytes("UTF-8"));
os.close();
return;
}
System.out.println(name+"用户名不存在");
String message = "success";
os.write(message.getBytes("UTF-8"));
os.close();
} catch (Exception e) {
e.printStackTrace();
String message = "系统异常";
os.write(message.getBytes("UTF-8"));
os.close();
} finally {
if(rs!=null) {
try {
rs.close();
rs = null;
} catch (SQLException e) {
e.printStackTrace();
}
}
if(pst!=null) {
try {
pst.close();
pst = null;
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn!=null) {
try {
conn.close();
conn = null;
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request, response);
}
}
jsp
<body>
<form id="form">
用户名:<input type="text" name="username" id="username" onblur="checkUsername(this.value)"/><br>
密码:<input type="password" name="password" id="password" /><br>
验证码:<input type="text" name="code" id="code" /><br>
</form>
<script type="text/javascript" src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
<script type="text/javascript">
function checkUsername(username) {
if($.trim(username)=="") {
alert("用户名为空");
return;
}
$.ajax({
url:"Servlet",
type:"post",
dataType:"text",
data:{
username:username
},
success:function(data){
if(data!="success") {
alert(data);
}
}
});
}
</script>
</body>
web.xml
<servlet-mapping>
<servlet-name>Servlet</servlet-name>
<url-pattern>/Servlet</url-pattern>
</servlet-mapping>
这是java层
这是servlet啊
首先需要调用您的业务层啊,业务层调用dao接口,这样查找啊
能用框架还是用框架。前端可以用个验证框架,按框架要求写验证方法,比点击按钮效果好。
后端能用框架,区分controller, service, dao层也比较。实在不行,你的把数据库连接初始化一直持有,比你这样临时连接效率高。
另外判断是否直接sql按名称查询,而不是都查出来自己比较。
sql = "select username from test where username='" + name + "'";
可以在用户输入框失去焦点时执行判断方法,进入ajax,到servlet去进行验证,可以在用户输入框后拼接是否存在,如果不是大量数据的查询还是用框架吧,方便点
当输入用户名的时候,输入完毕刚好焦点离开触发焦点时间onblur(貌似是这个方法)然后通过ajax请求controller,后面的都是三层架构了,核心问题就是采用ajax请求controller,其他的貌似都不是问题,我前两天刚做过。
jsp访问Servlet,ajax请求在xml 文件里面配置
判断用户是否存在,你可以直接修改sql,select * from test where loginName = ?.
如果返回的数据rs.hasNext()则表示账号存在。 为何不用这个?
建议在表单提交后先判断用户名是否存在,如果用户名存在再去判断密码是否正确,如果不存在就弹出用户名不存在,密码当然就不用判断了,当然,可以用前端框架,将用户名
密码,验证码全部提交到后台,然后想要什么就取什么,不要单独提交一个用户名
获取用户提交的数据,然后ajax提交,后端sql查询验证就行了
SELECT TOP 1 1 FROM 用户表 WHERE 用户名字段=传进来用户名的参数
如果返回的是 1 说明有该用户,如果返回值是空,说明没有用户