主要逻辑:
页面头部登陆前后不同状态
登陆前后主要区别体现在首页的头部:
登录前,右上角最后一个为新用户注册,下面并无登陆者信息:
登陆后,右上角最后一个为退出登录,下面同时显示登陆者信息:
jsp中实现原理:
<%
User user = (User) request.getSession().getAttribute("user");
if(null == user){
%>
| <a href="${pageContext.request.contextPath}/client/register.jsp">新用户注册</a>
<%
}else{
%>
| <a href="${pageContext.request.contextPath}/logout" onclick="javascript:return confirm_logout()">用户退出</a>
<br><br><br>欢迎您: ${
user.username}
<%
}
%>
可见骚气的if语句分开显示不同情况下的页面内容,登陆前显示新用户注册登陆后变为退出登录,onclick
属性指向一个自定义函数,弹出一个确认退出的提示,在接受到确定之后才调用LogoutServlet
后直接销毁Session
。值得注意在Session
获取User
之前,要导包,不然js中不能识别该类。
<%@ page import="cn.itcast.itcaststore.entity.User"%>
除此之外,视有无登录情况,头部我的账户
会有变化,没有登录就会跳转登录界面
,已经登陆就会重定向到账户信息页面
,除此之外,根据角色的不同,登陆后我的账户
也会有不同的目标页面,普通用户跳转至home.jsp
,超级用户跳转至myAccount.jsp
后台管理页面,这一套逻辑由web.xml
映射的MyAccountServlet
完成。
<a href="${pageContext.request.contextPath}/myAccount">我的帐户</a>
MyAccountServlet:
//在session中查找名为“user”的会话
User user = (User) request.getSession().getAttribute("user");
//如果找到没有名为“user”的会话,说明用户没有登录,此时跳转到登录页面
if (user == null) {
response.sendRedirect(request.getContextPath() + "/client/login.jsp");
return;
}
//如果是超级用户,进入到网上书城后台管理系统;否则进入到普通用户的账户信息页面
if ("超级用户".equals(user.getRole())) {
response.sendRedirect(request.getContextPath() + "/admin/login/home.jsp");
// return;
}else{
response.sendRedirect(request.getContextPath() + "/client/myAccount.jsp");
// return;
}
分类显示图书
menu