1,把控制层(controller)代码中处理好的数据传递到视图层(jsp),使用作用域传递:
- pageContext:用来在同一个页面的不同标签之间传递数据。
- request:在同一个请求过程中间传递数据。
- session: 同一个浏览器窗口的不同请求之间传递数据。
- application:所有用户共享的数据,并且长久频繁使用的数据。
2,jquery事件函数的用法:
选择器.click(function(){//给指定的元素添加事件
//js代码
});
选择器.click();//在指定的元素上模拟发生一次事件
3,记住密码:
访问:login.jsp---->后台:.html:如果上次记住密码,自动填上账号和密码;否则,不填。
如何判断上次是否记住密码?`
–上次登录成功,判断是否需要记住密码:如果需要记住密码,则往浏览器写cookie;否则,删除cookie。
而且cookie的值必须是该用户的loginAct和loginPwd
–下次登录时,判断该用户有没有cookie:如果有,则自动填写账号和密码;否则,不写。
而且填写的是cookie的值.
----->浏览器显示
获取cookie:
1,使用java代码获取cookie:
Cookie[] cs=request.getCookies();
for(Cookie c:cs){
if(c.getName().equals("loginAct")){
String loginAct=c.getValue();
}else if(c.getName().equals("loginPwd")){
String loginPwd=c.getValue();
}
}
2,使用EL表达式获取cookie:
${cookie.loginAct.value}
${cookie.loginPwd.value}
登录页面
<div style="position: absolute; top: 120px; right: 100px;width:450px;height:400px;border:1px solid #D5D5D5">
<div style="position: absolute; top: 0px; right: 60px;">
<div class="page-header">
<h1>登录</h1>
</div>
<form class="form-horizontal" role="form">
<div class="form-group form-group-lg">
<div style="width: 350px;">
<!--用el表达式获取记住密码登录的用户信息-->
<input class="form-control" id="loginAct" value="${cookie.loginAct.value}" type="text" placeholder="用户名">
</div>
<div style="width: 350px; position: relative;top: 20px;">
<input class="form-control" id="loginPwd" value="${cookie.loginPwd.value}" type="password" placeholder="密码">
</div>
<div class="checkbox" style="position: relative;top: 30px; left: 10px;">
<label>
<c:if test="${not empty cookie.loginAct and not empty cookie.loginPwd}">
<input type="checkbox" id="isRemPwd" checked> 十天内免登录
</c:if>
<c:if test="${empty cookie.loginAct or empty cookie.loginPwd}">
<input type="checkbox" id="isRemPwd">
</c:if>
十天内免登录
</label>
<span style="color: red" id="msg"></span>
</div>
<button type="button" id="loginBtn" class="btn btn-primary btn-lg btn-block" style="width: 350px; position: relative;top: 45px;">登录</button>
</div>
</form>
</div>
</div>
登录Controller
/**
*
* @param loginAct
* @param loginPwd
* @param isRemPwd
* @return
*/
@RequestMapping("/settings/qx/user/login.do")
@ResponseBody
public Object login(String loginAct,
String loginPwd,
String isRemPwd,
HttpServletRequest request,
HttpSession session,
HttpServletResponse response){
Map<String,Object> map = new HashMap<>();
map.put("loginAct",loginAct);
map.put("loginPwd",loginPwd);
System.out.println("==================迭代器遍历Map====================");
Iterator<Map.Entry<String, Object>> iterator = map.entrySet().iterator();
while (iterator.hasNext()){
Map.Entry entry = (Map.Entry)iterator.next();
Object key = entry.getKey();
Object value = entry.getValue();
System.out.println("遍历UserControler的login方法:");
System.out.println("key="+key+";value="+value);
}
User user = userService.queryUserByLoginActAndPwd(map);
//根据查询结果,生成响应信息
ReturnObject returnObject = new ReturnObject();
if(user==null){
//登录失败,用户名或者密码错误
returnObject.setCode(Contants.RETURN_OBJECT_FAIL);
returnObject.setMessage("用户名或者密码错误!");
}else {//进一步判断账号是否合法
//比较当前时间和账号过期时间
//user.getExpireTime() =>2019-10-20
//new Date() =>2020-09-10
String newStr = DateUtils.formateDateTime(new Date());
if(newStr.compareTo(user.getExpireTime())>0){
//登录失败:账号已过期
returnObject.setCode(Contants.RETURN_OBJECT_FAIL);
returnObject.setMessage("账号已过期!");
}else if("0".equals(user.getLockState())){
//登录失败:状态被锁定
returnObject.setCode(Contants.RETURN_OBJECT_FAIL);
returnObject.setMessage("状态被锁定!");
}else if(!user.getAllowIps().contains(request.getRemoteAddr())){
//登录失败:ip受限
returnObject.setCode(Contants.RETURN_OBJECT_FAIL);
returnObject.setMessage("ip受限!");
}else {
//登录成功
returnObject.setCode(Contants.RETURN_OBJECT_SUCCESS);
//把user保存到session域中
session.setAttribute(Contants.SESSION_USER,user);
System.out.println("isRemPwd="+isRemPwd);
/**
* 如果需要记住密码,则往外写cookie
* 点击登录发送请求到后台,后台接收用户名loginAct和密码loginPwd以及记住密码复选框值isRmPwd
* 判断isRemPwd为true则记住密码,把该登录用户信息保存到cookie域里,然后在登录页面获取域中的值
* 分别赋值给用户名loginAct和密码loginPwd以及记住密码复选框值isRmPwd
* PS:退出登录的时候要清空cookie
* (需要考虑密码安全问题,)
*/
if("true".equals(isRemPwd)){
//把用户账号写入cookie
Cookie c1 = new Cookie("loginAct", user.getLoginAct());
c1.setMaxAge(10*24*60*60);//cookie保存十天
response.addCookie(c1);
//把用户密码写入cookie
Cookie c2 = new Cookie("loginPwd", user.getLoginPwd());
c2.setMaxAge(10*24*60*60);
//把cookie响应给浏览器
response.addCookie(c2);
System.out.println("记住密码,账户:"+loginAct+";密码:"+loginPwd+";isRemPwd:"+isRemPwd);
}else {
//如果没有记住密码,则把没有过期的cookie删除
Cookie c1 = new Cookie("loginAct", "1");
c1.setMaxAge(0);
response.addCookie(c1);
Cookie c2 = new Cookie("loginPwd", "1");
c2.setMaxAge(0);
response.addCookie(c2);
}
}
}
return returnObject;
}