这是基于ssm框架,简单的登录功能实现
1、前端登陆页面
<form action="/login">
<div id="r1" align="center">
<img src="/imgs/w.jpg" alt="hhhh" width="200" height="200">
<div>
用户名:<input type="text" name="name"><br><br>
密 码:<input type="password" name="password"><br><br>
<button id="loginButton" type="button" class="btn btn-primary btn-block"><i class="fa fa-sign-in fa-lg fa-fw"></i>登陆</button>
<a href="/userupdate.jsp">注册</a>
</div>
</div>
</form>
<script type="text/javascript">
function login(){
$("#loginForm").ajaxSubmit({//获取表单数据,并执行表单中设置的路径
success:function(msg){//后端返回是一个对象
if(msg.success){
location.href="/system/index";
}else{
alert(msg.error)
}
}
})
}
</script>
表单数据会提交到from属性中action对应的路径中,上面设置的路径为"/login",所以我们应该在controller层中有一个对应的方法路径,后端接收的参数需要设置与表单<input>中name属性值一样,要求类型与名字相同,否则会报数据类型不匹配(400)。
2、controller层接收代码:
@RequestMapping(value="/login",method=RequestMethod.POST)
@ResponseBody
public LoginResult gologin(String name,String password){//与表单一致
try {
User dbuser = userservice.findByuser(name,password);
return new LoginResult();
} catch (Exception e) {
e.printStackTrace();
return new LoginResult(false,e.getMessage());
}
}
返回类型可以设置为一个对象,里面放置两个字段,分别是判断是否成功和接收异常信息,下面为返回类型的定义:
public class LoginResult {
private Boolean success = true;
private String error;
controller层接收到参数后调用service层中的方法,此方法的作用是通过前端传过来的参数(用户名)查询数据库中受否有这条数据,如果没有则返回用户名不存在,反之如果数据库中存在,则拿前端传过来的password与数据库中查出来的password字段作二次判断,两个密码相等则登录成功。
3.service层代码部分
public User findByuser(String name,String password) {
User dbuser = usermapper.findByusername(name);
if(dbuser==null){
throw new RuntimeException("用户名不存在");
}else{
if(!dbuser.getPassword().equals(password)){
throw new RuntimeException("密码错误");
}else{
return dbuser;
}
}
}
调用mapper层,查询数据库的数据,返回一个对象。小伙伴们看到这可能会疑惑throw new RuntimeException("异常信息"),这是抛异常信息,那会到哪里去呢,如果疑惑可以往上翻controller层中的代码,返回对象LoginResult(false,e.getMessage());中的e.getMessage()可以获取异常信息,这样,就可以完美地返回给前端啦。
补充:数据库中的表的数据一般会对应一个实体类(放在domain),里面的字段与表的列属性对应,一张表会对应一个Xxxmapper接口,接口里面写处理数据的方法(比如这里的通过用户名查询数据),然后在映射文件(文件名:Xxxmapper.xml)中写相应的sql语句实现功能,至于如何将接口和映射文件相关联,以及如何在Xxxmapper.xml里面写sql,就等下次更新吧。