http协议本身是一种无状态的协议,也就是客户端连续发送的多个请求之间没有联系,下一次请求不关心上一次请求的状态。

而实际运用中却希望服务器能记住客户端请求的状态,比如在网上购物系统中,服务器端应该能够识别并跟踪每个登录到系统中的用户挑选并购买商品的整个流程 。为此,web服务器必须采用一种机制来唯一地标识一个用户,同时记录该用户的状态,这就要用到会话跟踪技术。
Java Web使用Session来跟踪会话和管理会话内的状态。
Session对象是一个jsp内置对象,它在第一个jsp页面被装载时自动创建,完成会话期管理。
从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个服务器结束,被称为一个会话。当一个客户访问一个服务器时,可能会在这个服务器的几个页面之间反复连接,反复刷新一个页面,服务器应当通过某种办法知道这是同一个客户,这就需要session对象。
当发生以下四种情形其中之一时,session对象中的数据便会清空 :
用户关闭目前正在使用的浏览器程序。
关闭网页服务器。
用户未向服务器提出请求超过预设的时间,Tomcat服务器预设为30分钟。
运行程序结束session。
1.建立session变量
在JSP中不需要特别设置程序代码来建立用户session,当程序使用了session对象时,便会自动建立session,而下面这行语句便是在session中新增变量数据的方式:
session.setAttribute(“变量名称”,变量内容)
变量内容可为字符串或者其他对象类型,接着让我们来看看如何使用这个方法在session中设置变量数据:
<% session.setAttribute(“id”,”编号”); //设置字符串 session.setAttribute(“expire”,new Date(86400*10)); //设置日期 session.setAttribute(“level”,new Integer(3)); //设置整数 %>
2.返回session中的变量
在session中设置了变量数据后,在其他的各个网页中便可使用getAttribute读取其中的内容,此方法所返回的数据类型为对象(Object)类型,语法如下:
session.getAttribute(“变量名称”)
3.返回所有session中的变量名称
getAttributeNames()方法可以取出session中所有变量的名称,其结果为一个枚举类的实例。语法为:
session.getAttributeNames()
4.清除session中的变量
removeAttribute()方法可以清除session中的变量数据,使用语法如下:
session.removeAttribute(“变量名称”)
5.结束session
对于已经建立的session,可使用invalidate()方法将其结束,使用语法为:
session.invalidate()
其他的一些可能会用到的方法:
现在写一个实例:通过session来记录客户的登录状态:
index.jsp登录界面:
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>$Title$</title> </head> <body> <form action="process_login.jsp" method="post"> 用户名:<input type="text" name="username"> 密码:<input type="text" name="password"> <input type="submit" value="submit"> <input type="reset" value="reset"> </form> <a href="page1.jsp" rel="external nofollow" rel="external nofollow" >1</a> <a href="page2.jsp" rel="external nofollow" rel="external nofollow" >2</a> <a href="page3.jsp" rel="external nofollow" rel="external nofollow" >3</a> </body> </html>
process_login.jsp处理登录数据,这里知道输入密码是123都可以登录成功:
session.getAttribute()将会告诉page1.jsp文件这个用户是否登录成功了
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
String username=request.getParameter("username");
String password=request.getParameter("password");
if (password.equals("123")){
session.setAttribute("username",username);
}
response.sendRedirect("page1.jsp");
%>
logout.jsp登出
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
session.invalidate();
response.sendRedirect("index.jsp");
%>
page1.jsp, page2.jsp, page3.jsp大同小异显示不同的页面,用于验证登录状态的记录(这里仅以page1.jsp为例):
注意这里的判断逻辑是一种很有趣的写法,把jsp代码和html代码完全融合起来了,不过我觉得这样写还是比较乱,宁愿只用一个jsp代码段,里面用out.println()在html中来实现显示不同的内容
这里主要是靠判断session.username是否为空来判断是否登录过了,并且传递相关的参数信息
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
这里是Page1<br>
<%if (session.getAttribute("username")==null){%>
用户还没有登录
<%}else {%>
已登录,用户名:<%= session.getAttribute("username")%>
<%}%>
<br>
<a href="page1.jsp" rel="external nofollow" rel="external nofollow" >page1</a>
<a href="page2.jsp" rel="external nofollow" rel="external nofollow" >page2</a>
<a href="page3.jsp" rel="external nofollow" rel="external nofollow" >page3</a>
<a href="index.jsp" rel="external nofollow" >login</a>
<a href="logout.jsp" rel="external nofollow" >logout </a>
</body>
</html>
可以看到,登录以后,不管跳转到哪个页面,用户的登录状态都没有丢失
一旦logout登出以后,session.invalidate()方法被调用,session被销毁,就跟踪不到用户的登录信息了
同时,如果我采用另一个浏览器访问同样的页面,以“2号用户”为username登录,也会一直记录到这个用户的登录信息(不过如果是同一种浏览器的话就不行了)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# JSP
# session
# 登录
# jsp cookie+session实现简易自动登录
# JSP登录中Session的用法实例详解
# jsp如何获取Session中的值
# jsp中存取session值简单介绍
# JSP 中Session的详解及原理分析
# JSP Session超时设置的实现方法
# JSP 开发之 releaseSession的实例详解
# jsp session.setAttribute()和session.getAttribute()用
# 是一种
# 其他的
# 这就
# 便会
# 客户端
# 是一个
# 这是
# 几个
# 还没有
# 也会
# 在这个
# 我觉得
# 过了
# 第一个
# 让我们
# 多个
# 将会
# 将其
# 便可
# 要用
相关文章:
婚礼视频制作网站,学习*后期制作的网站有哪些?
如何使用Golang安装API文档生成工具_快速生成接口文档
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
北京企业网站设计制作公司,北京铁路集团官方网站?
无锡营销型网站制作公司,无锡网选车牌流程?
如何在企业微信快速生成手机电脑官网?
如何在云服务器上快速搭建个人网站?
制作充值网站的软件,做人力招聘为什么要自己交端口钱?
网站制作软件有哪些,制图软件有哪些?
如何高效配置香港服务器实现快速建站?
临沂网站制作公司有哪些,临沂第四中学官网?
建站之星安全性能如何?防护体系能否抵御黑客入侵?
定制建站方案优化指南:企业官网开发与建站费用解析
Avalonia如何实现跨窗口通信 Avalonia窗口间数据传递
详解jQuery中基本的动画方法
教程网站设计制作软件,怎么创建自己的一个网站?
如何快速搭建二级域名独立网站?
如何在阿里云通过域名搭建网站?
常州自助建站:操作简便模板丰富,企业个人快速搭建网站
零服务器AI建站解决方案:快速部署与云端平台低成本实践
如何打造高效商业网站?建站目的决定转化率
建站168自助建站系统:快速模板定制与SEO优化指南
建站之星如何防范黑客攻击与数据泄露?
建站之星客服服务时间及联系方式如何?
建站之星会员如何解锁更多建站功能?
高防服务器租用指南:配置选择与快速部署攻略
专业制作网站的公司哪家好,建立一个公司网站的费用.有哪些部分,分别要多少钱?
如何基于PHP生成高效IDC网络公司建站源码?
学校为何禁止电信移动建设网站?
非常酷的网站设计制作软件,酷培ai教育官方网站?
网站网页制作专业公司,怎样制作自己的网页?
如何在建站宝盒中设置产品搜索功能?
建站主机选择指南:服务器配置与SEO优化实战技巧
建站之星3.0如何解决常见操作问题?
详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?
网站制作需要会哪些技术,建立一个网站要花费多少?
免费网站制作模板下载,除了易企秀之外还有什么H5平台可以制作H5长页面,最好是免费的?
网站制作大概多少钱一个,做一个平台网站大概多少钱?
小米网站链接制作教程,请问miui新增网页链接调用服务有什么用啊?
如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?
c# F# 的 MailboxProcessor 和 C# 的 Actor 模型
如何高效利用亚马逊云主机搭建企业网站?
网站制作的步骤包括,正确网址格式怎么写?
如何通过商城免费建站系统源码自定义网站主题?
如何在腾讯云服务器快速搭建个人网站?
网站制作大概要多少钱一个,做一个平台网站大概多少钱?
如何用IIS7快速搭建并优化网站站点?
免费制作海报的网站,哪位做平面的朋友告诉我用什么软件做海报比较好?ps还是cd还是ai这几个软件我都会些我是做网页的?
成都品牌网站制作公司,成都营业执照年报网上怎么办理?
*请认真填写需求信息,我们会在24小时内与您取得联系。