1.前台js:
var name = $("#name").val();
var pwd = $("#pwd").val();
$.ajax({
url:"login?name="+name+"&pwd="+pwd+"",
type:"post",
success:function(result){
if(result=="false"){
$("#error_msg").html("用户名或密码输入有误");
$('#error_msg').show();
return false;
}
if(result=="true"){
document.loginform.submit();
}
}
});
2.Controller:
@RequestMapping(value = "/login")
public String Verification(HttpServletRequest request,HttpServletResponse response) throws IOException {
PrintWriter out = response.getWriter();
String name = request.getParameter("name");
String pwd = request.getParameter("pwd");
User us = userService.findUserByname(name, pwd);
if (us.getName() == null && us.getPassword() == null){
out.print("false");
return null;
}else {
session.setAttribute("us", us);
out.print("true");
return null;
}
}
3. 后台service
public User findUserByname(String name, String pwd) {
String sql = "select * from user where name=? and password = ?";
User us = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<User>(User.class), name,pwd);
return us;
}
注: 意思大家代码一看都明白了,就只是登陆ajax验证了。 问题在第3步,我输入的用户名密码错误,执行sql查不到数据就报错,可以怎样改一下,执行完第3步都返回到Controller,在第2步进行判断返回页面呢?(是不是我的方法有错呢,勿喷,学习Sping mvc ing.....)
使用前判断一下: User us = userService.findUserByname(name, pwd);
if(us == null)
{
return"";
}
if (us.getName() == null && us.getPassword() == null){
out.print("false");
return null;
}else {
session.setAttribute("us", us);
out.print("true");
return null;
}
使用前判断一下: User us = userService.findUserByname(name, pwd);
if(us == null)
{
return"";
}
if (us.getName() == null && us.getPassword() == null){
out.print("false");
return null;
}else {
session.setAttribute("us", us);
out.print("true");
return null;
}
那个,问题在第3步了,当输入错误的用户名或密码,执行玩sql就直接报错
User us = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<User>(User.class), name,pwd);
报错:
org.springframework.dao.EmptyResultDataAccessException: Incorrect result size: expected 1, actual 0
at org.springframework.dao.support.DataAccessUtils.requiredSingleResult(DataAccessUtils.java:71)
at org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:734)
at net.hsf.dao.imp.UserDaoImpl.findUserByname(UserDaoImpl.java:77)
at net.hsf.service.UserService.findUserByname(UserService.java:69)
at net.hsf.controller.HelloController.Verification(HelloController.java:98)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
返回不到第2步,所以.......
public int findUserByname(final String name, final String pwd) {
int count = 0;
String sql = "select * from user where name=? and password = ?";
Object[] args ={name,pwd};
count = jdbcTemplate.queryForInt(sql,args);
return count;
}
action层根据返回的count值判断是否正确
######如果想友好提示登录就不是这么个逻辑了
Countroller伪码:
登录验证(){ User user=service.queryByEmail(email); if(user==null){ 账号不存在 } if(user.getStatus()==冻结){ 账号被冻结了 } if(user.getPwd()!=pwd){ 密码错误 }######
public int findUserByname(final String name, final String pwd) {
int count = 0;
String sql = "select * from user where name=? and password = ?";
Object[] args ={name,pwd};
count = jdbcTemplate.queryForInt(sql,args);
return count;
}
action层根据返回的count值判断是否正确
如果想友好提示登录就不是这么个逻辑了
Countroller伪码:
登录验证(){ User user=service.queryByEmail(email); if(user==null){ 账号不存在 } if(user.getStatus()==冻结){ 账号被冻结了 } if(user.getPwd()!=pwd){ 密码错误 }
$.ajax({ url:"login?name="+name+"&pwd="+pwd+"", type:"post", success:function(result){ if(result == "false"){ $("#error_msg").html("用户名或密码输入有误"); $('#error_msg').show(); return false; } if(result=="true"){ document.loginform.submit(); } } });
校验成功后,还会再一次提交form。
if(result=="true"){ document.loginform.submit(); }
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。