您的位置:首页 > 其它

项目总结二:登录模块

2016-05-24 15:33 375 查看

一、业务逻辑分析



二、原型图



三、实现过程

  1、表单校验

  同注册一样需要做前端表单校验。(详细见注册模块:http://www.cnblogs.com/xujian2014/p/5520732.html)

  2、记住用户名

  在用户名文本框中显示cookie中保存的loginname,当用户登录成功后,会把当前用户的名称保存到cookie中,当用户再次登录到页面时,会在文本框中显示用户名。

<script type="text/javascript">
$(function()
{
/*Map<String(Cookie名称),Cookie(Cookie本身)>*/
// 获取cookie中的用户名
var loginname = window.decodeURI("${cookie.loginname.value}");
if("${requestScope.user.loginname}")
{
loginname = "${requestScope.user.loginname}";
}
$("#loginname").val(loginname);
});
</script>


  3、服务器端代码

  当login.jsp通过前端表单校验后,会请求UserServlet#login()方法:

封装表单数据到User(formBean)对象中;

对formBean进行校验,如果出现错误把错误信息保存到Map中,把Map保存到request中,转发到login.jsp显示,为了回显把formBean也保存到request中;

调用UserService#login(User formBean)方法;

如果返回的user为null,那么说明用户名或密码为空,保存错误信息到request中,转发到login.jsp;

如果user.isStatus()为false,说明用户还没有激活,保存错误信息到request中,转发到login.jsp

如果返回的user不为null,说明登录成功,保存user到session中。保存当前用户名到cookie中(为了让login.jsp页面记住当前用户名)。转发到主页;

/**
* 登录功能
* @param req
* @param resp
* @return
* @throws ServletException
* @throws IOException
*/
public String login(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
/*
* 1. 封装表单数据到user
*/
User formUser = CommonUtils.toBean(req.getParameterMap(), User.class);
/*
* 2. 校验
*/
Map<String,String> errors = validateLogin(formUser, req.getSession());
if(errors.size() > 0) {
req.setAttribute("form", formUser);
req.setAttribute("errors", errors);
return "f:/jsps/login.jsp";
}
/*
* 3. 调用userService#login()方法
*/
User user = userService.login(formUser);
/*
* 4. 开始判断
*/
if(user == null) {
req.setAttribute("msg", "用户名或密码错误!");
req.setAttribute("user", formUser);
return "f:/jsps/login.jsp";
}
else
{
if(!user.isStatus())
{
req.setAttribute("msg", "您还没有激活!");
req.setAttribute("user", formUser);
return "f:/jsps/login.jsp";
}
else
{
// 保存用户到session
req.getSession().setAttribute("sessionUser", user);
// 获取用户名保存到cookie中
String loginname = user.getLoginname();
loginname = URLEncoder.encode(loginname, "utf-8");
Cookie cookie = new Cookie("loginname", loginname);
cookie.setMaxAge(60 * 60 * 24 * 10);//保存10天
resp.addCookie(cookie);
return "r:/index.jsp";//重定向到主页
}
}
}


  4、登录成功

  当用户登录成功后,会重定向到index.jsp,这是会显示所有的超链接,所以需要根据用户是否登录来显示不同的超链接。

  用户未登录时显示:登录、注册

  


  用户登录时显示:会员姓名,修改密码,菜单1,2,3...等

  


  因为用户登录成功后,当前用户已经保存到session中,所以我们只要在index.jsp中判断session中是否存在user即可分别用户是否登录。

  5、退出

  当用户登录成功后,会把当前user保存到session中。退出只需要从session中移除user即可,然后重定向到login.jsp即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: