Chinaunix首页 | 论坛 | 博客
  • 博客访问: 14490253
  • 博文数量: 5645
  • 博客积分: 9880
  • 博客等级: 中将
  • 技术积分: 68081
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-28 13:35
文章分类

全部博文(5645)

文章存档

2008年(5645)

我的朋友

分类:

2008-04-28 21:39:04

下载本文示例代码
  做过JAVA编程的都知道,在JAVA中有一种垃圾收集器的机制,当它运行时(通常在系统内存低到一定限度时自动运行),会回收不再使用的对象所占用的内存,所以,在JAVA程序中,我们通常只考虑创建对象,而从不关心对象的清除。Finalize()是JAVA为类提供的一种特殊方法。垃圾收集器的工作过程大致是这样的:一旦垃圾收集器准备好释放无用对象占用的存储空间,它首先调用那些对象的finalize()方法,然后才真正回收对象的内存。通过使用finalize(),就可以在垃圾收集器运行期间进行一些特殊的工作。下面一例就说明了finalize()的一种巧妙用法。  现在的商业应用系统越来越多的采用WEB形式。在WEB形式应用中,每一次页面访问是独立的,前后不相关联,哪怕多个用户在同一时刻访问应用的同一个页面,用户相互之间也是不知道的。如果想要检查当前有哪些用户正在使用系统(如准备恢复数据备份或进行系统升级时,系统管理员都很希望知道这些信息),该怎么办呢? 基于Servlet、Jsp技术的WEB服务器提供了隐含的Session、Application对象,利用它可以帮开发者实现一些信息的持续保存和共享。当用户访问一个WEB应用时,WEB服务器会自动创建一个Session对象,该对象可以供用户在会话期内在应用的所有页面中共享数据; Application是WEB应用的一个全局对象。利用Session、Application对象,可以达到跟踪所有用户信息的目的。  当用户打开浏览器开始请求WEB应用的登录页面时,WEB服务即为该客户创建一个session,此后,在session的timeout时间内,该客户都使用这个session(timeout时间可设置,如Tomcat服务器是在各应用的web.xml文件中设置)。如果使用IE浏览器,Session与客户IP地址、客户程序进程ID所共同标识的连接有对应关系,相同IP地址、相同进程的窗口(如通过IE-文件-新建-窗口 打开的新窗口)具有同一个session,所以session可用于标识各个独立的客户应用连接。  下面是一个样例  为了方便处理,先建一个简单类(user)用来表达用户信息及存放sessionId: package com;public class user {public String name="";public String sessionId="";}  另一个类(testSession)用于处理用户的login、logout等动作信息,使系统可以跟踪当前连接的用户信息。 package com;import java.util.Vector;import com.user;public class testSession {public user User;private Vector vsid;public testSession(){User=new user();} public boolean verify(String username,String password) throws Exception //验证用户/密码{return true;}public void setSessionVar(String sesid,Vector sid) {this.User.sessionId=sesid;this.vsid=sid;}private static synchronized void addappses(user puser,Vector pvsid) { //记录一个新连接的用户int pos=-1;user l_user;if (puser==null || pvsid==null)return;for(int i=0;i<pvsid.size();i ){l_user=(user)pvsid.get(i);if(l_user.sessionId.equals(puser.sessionId)){pos=i;break;}}if(pos==-1){pvsid.add(puser);}else{pvsid.set(pos,puser);}}private static synchronized void removeappses(user puser,Vector pvsid) { //移除一个退出的用户int pos=-1;user l_user;if (puser==null || pvsid==null)return;for(int i=0;i<pvsid.size();i ){l_user=(user)pvsid.get(i);if(l_user.sessionId.equals(puser.sessionId)){pos=i;break;}}if(pos!=-1){pvsid.remove(pos);}}protected void finalize() { this.removeappses(this.User,this.vsid);}public boolean login(String username) throws Exception{ //处理登录this.User.name=username;this.addappses(this.User,this.vsid);return true;}public boolean logout() throws Exception{ //处理注销this. finalize();this.User=null;this.vsid=null;return true;}}共3页。 1 2 3 :   做过JAVA编程的都知道,在JAVA中有一种垃圾收集器的机制,当它运行时(通常在系统内存低到一定限度时自动运行),会回收不再使用的对象所占用的内存,所以,在JAVA程序中,我们通常只考虑创建对象,而从不关心对象的清除。Finalize()是JAVA为类提供的一种特殊方法。垃圾收集器的工作过程大致是这样的:一旦垃圾收集器准备好释放无用对象占用的存储空间,它首先调用那些对象的finalize()方法,然后才真正回收对象的内存。通过使用finalize(),就可以在垃圾收集器运行期间进行一些特殊的工作。下面一例就说明了finalize()的一种巧妙用法。  现在的商业应用系统越来越多的采用WEB形式。在WEB形式应用中,每一次页面访问是独立的,前后不相关联,哪怕多个用户在同一时刻访问应用的同一个页面,用户相互之间也是不知道的。如果想要检查当前有哪些用户正在使用系统(如准备恢复数据备份或进行系统升级时,系统管理员都很希望知道这些信息),该怎么办呢? 基于Servlet、Jsp技术的WEB服务器提供了隐含的Session、Application对象,利用它可以帮开发者实现一些信息的持续保存和共享。当用户访问一个WEB应用时,WEB服务器会自动创建一个Session对象,该对象可以供用户在会话期内在应用的所有页面中共享数据; Application是WEB应用的一个全局对象。利用Session、Application对象,可以达到跟踪所有用户信息的目的。  当用户打开浏览器开始请求WEB应用的登录页面时,WEB服务即为该客户创建一个session,此后,在session的timeout时间内,该客户都使用这个session(timeout时间可设置,如Tomcat服务器是在各应用的web.xml文件中设置)。如果使用IE浏览器,Session与客户IP地址、客户程序进程ID所共同标识的连接有对应关系,相同IP地址、相同进程的窗口(如通过IE-文件-新建-窗口 打开的新窗口)具有同一个session,所以session可用于标识各个独立的客户应用连接。  下面是一个样例  为了方便处理,先建一个简单类(user)用来表达用户信息及存放sessionId: package com;public class user {public String name="";public String sessionId="";}  另一个类(testSession)用于处理用户的login、logout等动作信息,使系统可以跟踪当前连接的用户信息。 package com;import java.util.Vector;import com.user;public class testSession {public user User;private Vector vsid;public testSession(){User=new user();} public boolean verify(String username,String password) throws Exception //验证用户/密码{return true;}public void setSessionVar(String sesid,Vector sid) {this.User.sessionId=sesid;this.vsid=sid;}private static synchronized void addappses(user puser,Vector pvsid) { //记录一个新连接的用户int pos=-1;user l_user;if (puser==null || pvsid==null)return;for(int i=0;i<pvsid.size();i ){l_user=(user)pvsid.get(i);if(l_user.sessionId.equals(puser.sessionId)){pos=i;break;}}if(pos==-1){pvsid.add(puser);}else{pvsid.set(pos,puser);}}private static synchronized void removeappses(user puser,Vector pvsid) { //移除一个退出的用户int pos=-1;user l_user;if (puser==null || pvsid==null)return;for(int i=0;i<pvsid.size();i ){l_user=(user)pvsid.get(i);if(l_user.sessionId.equals(puser.sessionId)){pos=i;break;}}if(pos!=-1){pvsid.remove(pos);}}protected void finalize() { this.removeappses(this.User,this.vsid);}public boolean login(String username) throws Exception{ //处理登录this.User.name=username;this.addappses(this.User,this.vsid);return true;}public boolean logout() throws Exception{ //处理注销this. finalize();this.User=null;this.vsid=null;return true;}}共3页。 1 2 3 : 下载本文示例代码


Java中finalize()的另类用法Java中finalize()的另类用法Java中finalize()的另类用法Java中finalize()的另类用法Java中finalize()的另类用法Java中finalize()的另类用法Java中finalize()的另类用法Java中finalize()的另类用法Java中finalize()的另类用法Java中finalize()的另类用法Java中finalize()的另类用法Java中finalize()的另类用法Java中finalize()的另类用法Java中finalize()的另类用法Java中finalize()的另类用法
阅读(138) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~