cn.tedu.store.mapper
中新建 UserMapper.java
接口
验证用户名是否存在,其中返回的是用户对象,这个在前面的注册已经定义过了,是 User selectUserByUserName(String userName)
cn.tedu.store.service
创建 IUserService
接口和实现类 UserServiceImpl
用户名
和 密码
用户名
和 密码
,登录不成功无非是是两种可能 User login(String userName,String passWord
)` selectUserByUserName
返回user对象 user
是否为 null
user=null
,抛出 UserNotFoundException
异常 user!=null
,那么验证其中的密码是否正确 PassWordNotMatchException
异常 user
对象 cn.tedu.store.service.ex
中新建两个异常类 UserNotFoundException
,继承 Exception
,重写父类的 构造方法
PasswordNotMatchException
,继承 Exception
,重写父类的 构造方法
IUserService
接口中定义 /** * 实现登录的业务 * @param userName 用户名 * @param passWord 密码 * @return User对象 * @throws UserNotFoundException 用户不存在的异常 * @throws PassWordNotMatchException 密码不匹配的异常 */ Userlogin(String userName,String passWord)throws UserNotFoundException, PassWordNotMatchException;
UserServiceImpl
实现类实现方法 /** * 登录方法 * 1. 通过selectUserByUserName返回user对象 * 2.判断user是否为null * 3.如果user=null,抛出UserNotFoundException异常 * 4.如果user!=null,那么验证其中的密码是否正确 * 5.如果密码不匹配,抛出PassWordNotMatchException异常 * 6. 如果密码匹配,那么返回user对象 * @throws UserNotFoundException * @throws PassWordNotMatchException */ public User login(String userName, String passWord)throws UserNotFoundException, PassWordNotMatchException { User user=userMapper.selectUserByUserName(userName); //根据用户名查询,返回user对象 if (user==null) { //user为null,表示用户名不存在 throw new UserNotFoundException("用户名不存在"); }else { //如果用户名存在,验证密码 if (passWord.equals(user.getPassword())) { //如果密码匹配 return user; //返回user对象即可 }else { //如果密码不相同,那么直接抛出密码不匹配的异常即可 throw new PassWordNotMatchException("密码不匹配"); } } }
TestUser
中测试 @Test public void testLoginService(){ // 加载Spring的配置文件,测试的业务层,因此需要spring-dao.xml和spring-service.xml配置文件 AbstractApplicationContext ac = new ClassPathXmlApplicationContext( "spring-dao.xml", "spring-service.xml"); IUserService userService = ac.getBean("userServiceImpl", IUserService.class); String username="陈加兵"; String password="123456"; try { User user=userService.login(username, password); System.out.println("用户登录成功"); } catch (UserNotFoundException e) { System.out.println(e.getMessage()); } catch (PassWordNotMatchException e) { System.out.println(e.getMessage()); } }
cn.tedu.store.controller
中新建 UserController
/user/showLogin.do
/user/login.do
userName
和 password
POST
ResposneBody
/** * 显示登录视图 login.jsp * @return */ @RequestMapping("/showLogin.do") public String showLogin(){ return "login"; // 直接返回一个视图名称即可 }
/** * 点击登录按钮处理异步请求的方法 * @param username 用户名 * @param password 密码 * @param session session域 * @return 返回处理结果 */ @RequestMapping("/login.do") @ResponseBody public ResponseResult<Void> login(String username,String password,HttpSession session){ ResponseResult<Void> result=new ResponseResult<Void>(); //新建返回结果对象 try { User user=userservice.login(username, password); //调用service的login方法登录 result.setState(1); //设置响应状态码 result.setMessage("登录成功"); //设置提示信息 session.setAttribute("user",user); //将user对象存放在session中 } catch (UserNotFoundException e) { //用户名不存在的异常 result.setState(0); //设置响应状态码 result.setMessage(e.getMessage()); //设置提示信息 } catch (PassWordNotMatchException e) { //密码不匹配的异常 result.setState(0); //设置响应状态码 result.setMessage(e.getMessage()); //设置提示信息 } return result; //返回结果 }
login.jsp
页面中添加异步请求 //点击登录按钮的方法 $('#bt-login').click(function(){ var username=$("#username").val(); //用户名 var password=$("#password").val(); //密码 var d={"username":username,"password":password}; //封装请求数据 var url="<%=request.getContextPath()%>/user/login.do"; //请求地址 //异步提交请求,进行验证 $.post(url,d,function(data,status,xhr){ //如果响应成功 if(status=="success"){ $("#showResult").text(data.message); //显示提示信息 //如果登录成功 if(data.state==1){ Save(); //调用save方法保存用户名和密码,保证后面自动登录 //跳转到首页index.jsp window.location.href="<%=request.getContextPath()%>/main/showIndex.do"; }else{ //登录没有成功 $("#showResult").css("color","red"); //设置提示信息的文本颜色为红色 } } }); }); $(document).ready(function (){ if ($.cookie("rmbUser") == "true") { $("#ck_rmbUser").attr("checked", true); $("#username").val($.cookie("username")); $("#password").val($.cookie("password")); } }); //记住用户名密码,保存在cookie中 function Save(){ if ($("#ck_rmbUser").prop("checked")) { var str_username = $("#username").val(); var str_password = $("#password").val(); $.cookie("rmbUser", "true", { expires: 7 }); //存储一个带7天期限的cookie $.cookie("username", str_username, { expires: 7 }); $.cookie("password", str_password, { expires: 7 }); } else { $.cookie("rmbUser", "false", { expire: -1 }); $.cookie("username", "", { expires: -1 }); $.cookie("password", "", { expires: -1 }); } };