用户登陆 利用抛异常的方法在模块之间进行值传递 ,记住用户名功能的实现

service中的代码实现

==public User userLogin(User user) throws Exception {
	User user2 = ud.userLogin(user);
	==if(user2==null){
	人为抛出异常
		throw new RuntimeException("密码错误!");
	}
	if(user2.getState()==0){==
			人为抛出异常
			throw new RuntimeException("帐户未激活!");
	}else{
		return user2;
	}
}==

servlet中的代码实现(包含记住用户名功能)

public String userLogin(HttpServletRequest request, HttpServletResponse response) throws Exception {
	//获取表单数据
	Map map = request.getParameterMap();
	//创建user对象存储获取的账号密码
	User user=new User();
	//调用工具类自动完成数据的匹配与加载
	MyBeanUtils.populate(user, map);
	//获取自动登陆选择
  String aLogin=request.getParameter("aLogin");
	//获取记住用户名选择
	String rName=request.getParameter("rName");
	//获取cookies
	Cookie[] cookies = request.getCookies();
	//查找指定的cookie
	Cookie cookie = CookUtils.getCookieByName("aLogin", cookies);
	System.out.println((rName!=null));
	if(rName!=null){
		request.getSession().setAttribute("rNameSession",user.getUsername());
		System.out.println("是否选择"+rName+"================用户名:"+user.getUsername());
	}
	else{
		request.getSession().setAttribute("rNameSession",null);
		
	}
try{
	//调用service方法
	UserService us=new UserServiceImp();
	//创建user对象用来存储service查询获得到的user
	User user02=new User();
	//利用抛异常的方法分情况处理登陆的问题
	//执行service方法获得用户信息
	user02=us.userLogin(user);
	
	//将用户信息传到前台
	request.getSession().setAttribute("user",user02);
	//判断用户是否选择自动登陆按钮
		if(aLogin!=null){
			//选择自动登陆
			cookie=new Cookie("aLogin",user02.getUsername()+"#"+user02.getPassword());
			cookie.setMaxAge(60*60*24*7);//7天有效期
			//设置有效路径
			cookie.setPath("/store_07");
			//将cookie上传到前端
			response.addCookie(cookie);
		}
		response.sendRedirect("/store_07/jsp/index.jsp");
		return null;
	}catch (RuntimeException e) {
		String msg=e.getMessage();
		request.getSession().setAttribute("msg",msg);
		return "/jsp/login.jsp";
	}catch (Exception e) {
		System.out.println(e.getMessage());
	}
	return null;
}

记住用户名功能的实现思想

这个判断必须在前面执行,因为不用跳转页面,不用返回值,所以,不会影响后面的代码的执行。
在jsp页面在传值的时候也要进行判断如果,servlet传过来上次是选择记住用户名的话,就一直记住用户名。反正依然。
在java页面判断如果选择记住用户名,就将本次的用户名和传到前端。

          <input type="checkbox" name="rName" value="${user.rNameSession }" checked="checked"> 记住用户名
        </c:if>
            <c:if test="${empty rNameSession }">
          <input type="checkbox" name="rName" value="rName"> 记住用户名
			</c:if>```

猜你喜欢

转载自blog.csdn.net/qq_42799000/article/details/82830154