获取页面标记的文档对象后即可通过对象操作它的属性。例如,如果有下列HTML标记:则JS获取该标记的对象的语句如下:在IE中,也可将HTML标记的id属性的值直接作为它的对象名使用。E_29.htm:图3-21 控制页面标记的显示样式......
2025-09-30
在基于JSP的管理信息系统开发中常需要限制已经登录在线的用户不能再登录。一个简单的设计是将登录的用户信息保存在全局对象application中。用户请求登录验证时与appli-cation中的登录用户比对,若不存在,允许该用户登录并将该用户信息保存在application中,若存在则不允许登录。用户退出时再请求一个页面删除该用户信息。正常情况下没有问题,问题往往出在非正常情况下,如死机了,断电重启。用户没有正常退出,就不能向服务器端发删除请求,该用户的信息被永远保存在application中,用户也永远不能再登录了,因为每次登录都首先要去application中进行检索。解决的办法是对session对象进行监听。
JSP技术中,采用session会话跟踪的方式保存一个客户在一个网站的活动记录。如果有10个客户访问一个网站,该网站就会自动生成10个不同的会话(session)对象来保存客户的活动信息。
当客户第一次请求一个JSP页面时,JSP容器(Resin)就会自动为该客户创建一个ses-sion对象。
session对象是有时效的。所谓时效是指一时间的长度。若一个客户二次请求JSP页面之间的间隔时长超过时效,则该客户的session对象自动销毁失效。session对象封装了使ses-sion失效的方法invalidate()、设置session时效的方法setMaxInactiveInterval(int interval)等。session时效也可以在web.xml文件中配置。
javax.servlet.http包中还定义了一个接口:HttpSessionListener。该接口中封装了两个方法:
void sessionCreated(HttpSessionEvent se);//响应session对象的创建
void sessionDestroyed(HttpSessionEvent se);//响应session对象的销毁失效
下面的一组程序(SessionCounter.java、login.jsp、checkLogin.jsp、destroySession.jsp)演示了使用session监听接口控制在线用户再次登录。各程序的源码及功能说明如下:
1)“SessionCounter.java”,这是session监听程序,因为类SessionCounter实现了接口Ht-tpSessionListener。该程序中使用向量数组Vector V存储用户名。当产生session超时或产生被销毁事件时执行sessionDestroyed(HttpSessionEvent event)方法:取出与session绑定的用户名并从向量V中删除。Estimate(String newUser)方法的功能是与Vector V中存储的用户名比较,判断用户newUser是否存在。
使用“记事本”输入SessionCounter.java并存储在webapps\ROOT\WEB-INF\classes\test目录下。
SessionCounter.java:


2)配置session失效时长和session监听程序SessionCounter.java。用记事本打开webapps\ROOT\WEB-INF\web.xml文件(若不存在,创建一个),文件的内容如下:


其中“<session-timeout>5</session-timeout>”定义了session的失效时长为5 min;“<listener-class>test.SessionCounter</listener-class>”指定了监听程序是“test”目录下的“SessionCounter.class”程序。Resin服务器启动后会自动编译“test”目录下“Session-Counter.java”,生成“SessionCounter.class”文件并装载它:监听session的创建和失效。一旦监听到有session失效则执行sessionDestroyed(HttpSessionEvent event)方法。
3)“login.jsp”程序接收用户名输入并提交给“checkLogin.jsp”判定该用户是否已登录。
使用“记事本”输入“login.jsp”程序并存放在应用目录“webapps/ROOT/E43”中。
login.jsp:(https://www.chuimin.cn)

4)“checkLogin.jsp”程序获取“login.jsp”提交的用户名,调用session监听程序Ses-sionCounter的静态方法Estimate(String newUser)判定该用户是否已登录,若未登录则将用户名与session绑定,调用session监听程序SessionCounter的静态方法setUser(newUser)将newUser中的用户名保存到向量数组V中,然后进入系统,在系统的主页面显示“退出系统”按钮,若单击“退出系统”按钮关闭该页面即退出系统则请求执行destroySession.jsp使session立即失效而产生失效事件,session监听程序SessionCounter监听到失效事件而执行sessionDestroyed(HttpSessionEvent event)方法将该用户从向量数组V中删除,以便该用户能够再登录。若未单击“退出系统”按钮而退出了系统(如断电或单击浏览器窗口右上角的“×”),则只有失效时间到了session才能失效,在这之前,该用户不能再登录。若已登录在线则不能进入系统。
使用“记事本”输入“checkLogin.jsp”程序并存放在应用目录“webapps/ROOT/E43”目录中。
checkLogin.jsp:


5)“destroySession.jsp”退出系统时执行该程序,它立即使session失效:session.invalidate();。
使用“记事本”输入“destroySession.jsp”程序并存放在应用目录“webapps/ROOT/E43”目录中。
destroySession.jsp:


打开浏览器,在地址栏中输入http://192.168.2.1:8080/E43/login.jsp。在“login.jsp”页面输入一用户名“张建国”后单击“提交”按钮,正常进入系统,显示的界面如图4-11所示。

图4-11 使用session监听接口控制在线用户再次登录
在另一计算机上打开浏览器,在地址栏中输入

在“login.jsp”页面输入用户名“张建国”后单击“提交”按钮,不能进入系统,显示的界面如图4-12所示。

图4-12 使用session监听接口控制在线用户再次登录
相关文章
获取页面标记的文档对象后即可通过对象操作它的属性。例如,如果有下列HTML标记:则JS获取该标记的对象的语句如下:在IE中,也可将HTML标记的id属性的值直接作为它的对象名使用。E_29.htm:图3-21 控制页面标记的显示样式......
2025-09-30
程序“E_39_1.jsp”中,名字为“f1”的表单form以post的方式向服务器上的程序“E39_2.jsp”提交参数P1和P2,P1只有一个值,P2是多选项对应多个值。单击“提交”按钮后,执行JavaScript函数“check()”检查P1、P2是否有值,无值则在对应的位置显示红色的“*”表示该信息必填并且不提交,有值则使用JavaScript表单对象的方法submit()提交f1表单的参数。“E_39_2.jsp”接受E_39_1.jsp表单提交的数据P1和P2。E_39_1.jsp:E_39_2.jsp:图4-6 未输入参数即单击“提交”图4-7 获取HTML<form>表单提交到服务器的数据......
2025-09-30
从这个例子可以看出定义对象要定义构造函数,其中包含各个属性成员和方法成员。this表示本对象,必须使用。对象定义好后还不能直接使用,要使用对象,必须先用保留字new创建对象的实例,创建对象实例的语句如下:对象名就是构造函数名。给构造函数赋不同的实参数初值就可以构造出不同的对象实例。E_js_23.htm:图3-15 自定义对象......
2025-09-30
若不指定该属性值,则浏览器根据图像的实际尺寸显示。height指定图像高度,值为整数,单位为屏幕像素点。alt指定图像的提示标签。使用“记事本”输入如下“E_img_1.htm”程序并存放在应用目录“webapps/ROOT”下的“E11”目录中。“E_img_1.htm”中用<img>标记显示了一幅jpg图像“flower.jpg”和gif图像“welcome.gif”,“flower.jpg”和“welcome.gif”文件存在“E11”目录下的“img”目录中。“E_img_1.htm”中的<img>标记未定义属性width和height,其默认值是图像自身的长、宽。图3-3 用img标记显示图像E_img_1.htm:......
2025-09-30
通常鼠标或热键等的动作称之为事件,而由鼠标或热键等引发的一连串程序的动作,称之为事件驱动。而对事件进行处理的程序或函数,称之为事件处理程序。事件通常与函数配合使用,当事件发生时函数才会执行。将函数名赋值给事件名,一旦发生了该事件则会调用相关的函数(程序)来处理发生的事件,如:表示一旦该标记对象上发生了鼠标双击事件,则执行JS函数Select()。图3-17 事件驱动及事件处理E_js_3.htm:......
2025-09-30
基本的体部标记包括<body>、文字显示、段落控制、设置图像、超链接、列表、预定义格式等。<body>,</body>标记表明HTML文件体部的开始和结束。例如:表3-1 <body>标记属性表(续)文字显示标记的属性主要有字体、字号、颜色;段落控制标记控制显示对象的分段。建议使用块容器标记<div>进行换行。......
2025-09-30
图1-1中的计算机S配置:●硬件:可使用服务器计算机也可使用较新的PC。可用的A类网络有126个,每个网络能容纳1600多万个主机。C类网络可达209万余个,每个网络能容纳254个主机。多点广播地址用来一次寻址一组计算机,它标识共享同一协议的一组计算机。若用的C类地址的网络号为192.3.10,则该C类网内的主机IP地址就是192.3.10.1~192.3.10.254。......
2025-09-30
相关推荐