Java Web 网络商城案例演示七(自动登录,记住用户名,抽取公共页面)
自动登录
1、在login.jsp上的自动登录的位置上命名
<label> <input type="checkbox" name="autoLogin">自动登录
2、在servlet里面获取到login.jsp关于自动登录的按钮的值
String autoLogin = request.getParameter("autoLogin");
3、用户登录成功将对应Cookie的数据发送到客户端
if (autoLogin != null) {
Cookie cookie = new Cookie("autoLoginCookie", user02.getUsername()+"@"+user02.getPassword());
cookie.setPath("/");
cookie.setMaxAge(60*60);
response.addCookie(cookie);
}
4、在EncodingFilter验证 session 中是否存在此用户
5、验证是否包含自动登陆的cookie
// 检测自动登录
// 验证session当中是否存在此用户
User loginUser = (User) request.getSession().getAttribute("loginUser");
if (loginUser != null) {
chain.doFilter(request, response);
return;
}
// 验证是否包含自动登陆的cookie
Cookie[] allCookie = request.getCookies();
Cookie userCookie = null;
if (allCookie != null) {
for (Cookie c : allCookie) {
if ("autoLoginCookie".equals(c.getName())) {
userCookie = c;
break;
}
}
}
if (userCookie == null) {
chain.doFilter(request, response);
return;
}
// 验证cookie中信息是否正确
String[] u = userCookie.getValue().split("@");
String username = u[0];
String password = u[1];
User user = new User();
user.setUsername(username);
user.setPassword(password);
UserService service = new UserServiceImpl();
try {
loginUser = service.userLogin(user);
} catch (SQLException e) {
e.printStackTrace();
}
if (loginUser == null) {
chain.doFilter(request, response);
return;
}
记住密码
<% String flag = (String)session.getAttribute("flag")==null?"":(String)session.getAttribute("flag");
String name = "";
String password = "";
try{
Cookie[] cookies=request.getCookies();
if(cookies!=null){
for(int i=0;i<cookies.length;i++){
if(cookies[i].getName().equals("cookie_user")){
String value = cookies[i].getValue();
if(value!=null&&!"".equals(value)){
name=cookies[i].getValue().split("-")[0];
if(cookies[i].getValue().split("-")[1]!=null && !cookies[i].getValue().split("-")[1].equals("null")){
password=cookies[i].getValue().split("-")[1];
}
}
}
request.setAttribute("name",name);
request.setAttribute("passward",password);
}
}
}catch(Exception e){
e.printStackTrace();
}
%>
<body>
<div id="logo"><img src="<%=request.getContextPath() %>/frontsite/Images/Logo.jpg" width="244" height="44" alt="" /></div>
<div id="loginfrm">
<form action="<%=request.getContextPath() %>/frontsite/login.do?method=login" method="post" id="forms" onsubmit="checkForm();return false;">
<div class="frm">
<ul>
<li class="l1">用户名:</li>
<li class="l2"><input name="login_id" type="text" id="login_id" class="input" value="<%=name %>"/></li>
<li class="l3">* 最大限度为20字节</li>
<li class="l1">密码:</li>
<li class="l2"><input name="login_pwd" type="password" id="login_pwd" class="input" value="<%=password %>"/></li>
<li class="l3">* 最大限度为20字节</li>
<li class="l1">验证码:
<li class="l2" style="width: 180px;"><input name="checkImg" id="checkImg" type="text" class="input" style="width: 60px;" size="10" />
<img src="<%=request.getContextPath() %>/CheckImg_FT" width="49" height="22" /></li>
<li class="l4">
<label><input type="checkbox" name="flag" id="flag" value="1" <%if(flag!=null && flag.equals("1")){%> checked ; value ="1"; <%}else {%> value="0" <%;}%> />记住密码</label>
<label><span style="margin-left:10px; color: #F00;" ><html:errors /></span></label>
</li>
<li class="l4"><input type="image" name="imageField" id="imageField" src="<%=request.getContextPath() %>/frontsite/Images/login_bnt.jpg" /></li>
</ul>
</div>
</form>
</div>
</body>
String flag = request.getParameter("flag");
//set cookie
if(flag!=null && flag.equals("1")){
Cookie cookie = new Cookie("cookie_user", po.getLogin_id()+"-"+form.getLogin_pwd());
cookie.setMaxAge(60*60*24*30); //cookie 保存30天
response.addCookie(cookie);
}else{
Cookie cookie = new Cookie("cookie_user",po.getLogin_id()+"-"+null);
cookie.setMaxAge(60*60*24*30); //cookie 保存30天
response.addCookie(cookie);
}
抽取公共页面
新建一个header.jsp的页面将index.jsp的导航栏抽取出来
注意在header.jsp里面要<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!--
描述:菜单栏
-->
<div class="container-fluid">
<div class="col-md-4">
<img src="${pageContext.request.contextPath}/img/logo2.png" />
</div>
<div class="col-md-5">
<img src="${pageContext.request.contextPath}/img/header.png" />
</div>
<div class="col-md-3" style="padding-top:20px">
<ol class="list-inline">
<c:if test="${empty loginUser}">
<li><a href="${pageContext.request.contextPath}/UserServlet?method=loginUI">登录</a></li>
<li><a href="${pageContext.request.contextPath}/UserServlet?method=registUI">注册</a></li>
</c:if>
<c:if test="${not empty loginUser}">
<li>欢迎${loginUser.username}</li>
<li><a href="${pageContext.request.contextPath}/UserServlet?method=logOut">退出</a></li>
<li><a href="${pageContext.request.contextPath}/jsp/cart.jsp">购物车</a></li>
<li><a href="${pageContext.request.contextPath}/jsp/order_list.jsp">我的订单</a></li>
</c:if>
</ol>
</div>
</div>
<!--
描述:导航条
-->
<div class="container-fluid">
<nav class="navbar navbar-inverse">
<div class="container-fluid">
<!-- Brand and toggle get grouped for better mobile display -->
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="#">首页</a>
</div>
<!-- Collect the nav links, forms, and other content for toggling -->
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav">
<li class="active"><a href="${pageContext.request.contextPath}/jsp/product_list.jsp">手机数码<span class="sr-only">(current)</span></a></li>
<li><a href="#">电脑办公</a></li>
<li><a href="#">电脑办公</a></li>
<li><a href="#">电脑办公</a></li>
</ul>
<form class="navbar-form navbar-right" role="search">
<div class="form-group">
<input type="text" class="form-control" placeholder="Search">
</div>
<button type="submit" class="btn btn-default">Submit</button>
</form>
</div>
<!-- /.navbar-collapse -->
</div>
<!-- /.container-fluid -->
</nav>
</div>
新建一个footer.jsp将index的页脚抽取出来
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>关于我们</title>
<link rel="stylesheet"
href="${pageContext.request.contextPath}/css/bootstrap.min.css"
type="text/css" />
<script src="${pageContext.request.contextPath}/js/jquery-1.11.3.min.js"
type="text/javascript"></script>
<script src="${pageContext.request.contextPath}/js/bootstrap.min.js"
type="text/javascript"></script>
<!-- 引入自定义css文件 style.css -->
<link rel="stylesheet"
href="${pageContext.request.contextPath}/css/style.css" type="text/css" />
</head>
<body>
<div class="container-fluid">
<div style="margin-top:50px;">
<img src="${pageContext.request.contextPath}/img/footer.jpg" width="100%" height="78" alt="我们的优势" title="我们的优势" />
</div>
<div style="text-align: center;margin-top: 5px;">
<ul class="list-inline">
<li><a href="${pageContext.request.contextPath}/jsp/info.jsp">关于我们</a></li>
<li><a>联系我们</a></li>
<li><a>招贤纳士</a></li>
<li><a>法律声明</a></li>
<li><a>友情链接</a></li>
<li><a>支付方式</a></li>
<li><a>配送方式</a></li>
<li><a>服务声明</a></li>
<li><a>广告声明</a></li>
</ul>
</div>
</div>
</body>
</html>
在其他拥有导航栏和也脚的页面分别导入这两个页面,并删除旧的的
<%@ include file="/jsp/header.jsp" %>
<%@ include file="/jsp/footer.jsp" %>