session(会话)是一个非常非常好用的东西
应用1:用户信息的展示
在验证登录成功后,将用户体存放在会话中
HttpSession session = request.getSession(); session.setAttribute("user", user);//在会话中存入用户体
Jsp页面就可以从会话中拿到用户体,可用于昵称展示(这里昵称为放羊人):
可用于显示用户中心信息:
应用2:开发游客访问功能
若在首页中,用户没有登录,但点击了“随便逛逛”功能,则进入了游客访问的功能。
在主页面中会提示“未登录”的字样。
游客点击“个人中心”,提示“请先登录”。
实现非常地简单,只需在Jsp页面中判断一下会话中是否存在用户体,然后根据是否存在用户体来显示不同的内容。
<!--显示昵称问好的实现-->
<dvi class="helloBlock">
<%if (session.getAttribute("user") != null) { %><!--如果user属性不为空,说明已登录,显示昵称问好-->
<%=((User)session.getAttribute("user")).getNickName()%>,你好😁
<%} else {%><!--否则,显示未登录-->
未登录😡<br><a href="login.jsp">去登录</a>
<%} %>
</dvi>
<!--游客点击个人中心部分的实现,同理-->
<%if (session.getAttribute("user") == null) { %>
<div onclick="(alert('请先登录'))" class="personalInfomation">
<i class="fa fa-user-circle-o"></i>个人中心
</div>
<%} else {%>
<a href="userCenter.jsp">
<div class="personalInfomation">
<i class="fa fa-user-circle-o"></i>个人中心
</div>
</a>
<%} %>
应用3:统计在线人数
这实际上已经是属于监听者的应用了,不过这里监听的是会话,所以就放在一起说了。
打开一个浏览器,显示浏览人数1;打开另一个浏览器,则显示浏览人数2。
监听者类代码如下(别忘了去xml注册):
public class CountUsersNumber implements HttpSessionListener{
public void sessionCreated(HttpSessionEvent se) {//若会话创建
ServletContext context = se.getSession().getServletContext();//得到上下文对象
Integer num = (Integer)context.getAttribute("num");//从上下文中拿到num属性
if (num == null) {//如果上下文中没有num属性,则将在线人数设为1(会话开始创建,说明肯定有人在线)
context.setAttribute("num", 1);
} else {//已存在num属性,则人数加1
num++;
context.setAttribute("num", num);
}
}
public void sessionDestroyed(HttpSessionEvent se) {//若会话销毁,代码同理
ServletContext context = se.getSession().getServletContext();
Integer num = (Integer)context.getAttribute("num");
if (num == null) {
context.setAttribute("num", 1);
} else {
num--;
context.setAttribute("num", num);
}
}
}
注意,用户一访问Jsp页面,会话就会被创建,所以这里统计的是浏览该网站的人数。如果要统计成功登录的人数,则要在游客能访问到的Jsp页面中,加入<%@ page session=“false”%>,阻止Jsp页面创建会话。