仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1429|回复: 20
打印 上一主题 下一主题

[学习教程] JAVA网站制作之Servlet中怎样捕捉Session事务?

[复制链接]
金色的骷髅 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:32:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
到时我们不用学struts,不用学spring,不用学Hibernate,只要能把jsf学会了,完全可以替代所有的框架,包括AJAX,都知道AJAX并不是新技术,虽说我没深入学习jsf但我认为jsf应该已经能通过其它技术替代AJAX,实现无缝刷新。servlet|session捕捉Session事务的意义:
1、纪录网站的客户登录日记(登录,加入信息等)
2、统计在耳目数
3、等等另有良多,呵呵,本人想吧……总之挺主要的。

Session代表客户的会话历程,客户登录时,往Session中传进一个对象,便可跟踪客户的会话。在Servlet中,传进Session的对象假如是一个完成HttpSessionBindingListener接口的对象(便利起见,此对象称为监听器),则在传进的时分(即挪用HttpSession对象的setAttribute办法的时分)和移往的时分(即挪用HttpSession对象的removeAttribute办法的时分或SessionTimeout的时分)Session对象会主动挪用监听器的valueBound和valueUnbound办法(这是HttpSessionBindingListener接口中的办法)。
由此可知,登录日记也就不难完成了。
别的一个成绩是,怎样统计在耳目数,这个成绩跟完成登录日记略微有点分歧,统计在耳目数(及其信息),就是统计如今有几个Session实例存在,我们能够增添一个计数器(假如想存储更多的信息,能够用一个对象来做计数器,随后给出的实例中,复杂起见,用一个整数变量作为计数器),经由过程在valueBound办法中给计数器加1,valueUnbound办法上钩数器减1,便可完成在耳目数的统计。固然,这内里要使用到ServletContext的全局特征。(有关ServletContext的叙说请参考Servlet标准),新建一个监听器,并将实在例存进ServletContext的属性中,以包管此监听器实例的独一性,当客户登录时,先判别ServletContext的这个属性是不是为空,假如不为空,证实已创立,间接将此属性掏出放进Session中,计数器加1;假如为空则创立一个新的监听器,并存进ServletContext的属性中。

举例申明:

完成一个监听器:
//SessionListener.java

importjava.io.*;
importjava.util.*;
importjavax.servlet.http.*;

//监听登录的全部历程
publicclassSessionListenerimplementsHttpSessionBindingListener
{

publicStringprivateInfo="";//天生监听器的初始化参数字符串
privateStringlogString="";//日记纪录字符串
privateintcount=0;//登录人数计数器

publicSessionListener(Stringinfo){
this.privateInfo=info;
}

publicintgetCount(){
returncount;
}

publicvoidvalueBound(HttpSessionBindingEventevent)
{
count++;
if(privateInfo.equals("count"))
{
return;
}
try{
Calendarcalendar=newGregorianCalendar();
System.out.println("LOGIN:"+privateInfo+"TIME:"+calendar.getTime());
logString="
LOGIN:"+privateInfo+"TIME:"+calendar.getTime()+"
";
for(inti=1;i<1000;i++){
Filefile=newFile("yeeyoo.log"+i);
if(!(file.exists()))
file.createNewFile();//假如文件不存在,创立此文件
if(file.length()>1048576)//假如文件年夜于1M,从头创立一个文件
continue;
FileOutputStreamfoo=newFileOutputStream("yeeyoo.log"+i,true);//以append体例翻开创立文件
foo.write(logString.getBytes(),0,logString.length());//写进日记字符串
foo.close();
break;//加入
}
}catch(FileNotFoundExceptione){}
catch(IOExceptione){}
}

publicvoidvalueUnbound(HttpSessionBindingEventevent)
{
count--;
if(privateInfo.equals("count"))
{
return;
}
try{
Calendarcalendar=newGregorianCalendar();
System.out.println("LOGOUT:"+privateInfo+"TIME:"+calendar.getTime());
logString="
LOGOUT:"+privateInfo+"TIME:"+calendar.getTime()+"
";
for(inti=1;i<1000;i++){
Filefile=newFile("yeeyoo.log"+i);
if(!(file.exists()))
file.createNewFile();//假如文件不存在,创立此文件
if(file.length()>1048576)//假如文件年夜于1M,从头创立一个文件
continue;
FileOutputStreamfoo=newFileOutputStream("yeeyoo.log"+i,true);//以append体例翻开创立文件
foo.write(logString.getBytes(),0,logString.length());//写进日记字符串
foo.close();
break;//加入
}
}catch(FileNotFoundExceptione){}
catch(IOExceptione){}
}

}

登录日记的完成:

上面再来看看我们的登录Servlet中利用这个监听器的部分源代码:
……
HttpSessionsession=req.getSession(true);
……
///////////////////////////////////////////////////////////////////////
SessionListenersessionListener=newSessionListener("IP:"+req.getRemoteAddr());//关于每个会话历程均启动一个监听器
session.setAttribute("listener",sessionListener);//将监听器植进HttpSession,这将引发监听器挪用valueBound办法,从而纪录日记文件。
///////////////////////////////////////////////////////////////////////
当体系加入登录时,只需复杂地挪用session.removeAttribute(“listener”);便可主动挪用监听器的valueUnbound办法。大概,当SessionTimeOut的时分也会挪用此办法。


登录人数的统计:
ServletContextsession1=getServletConfig().getServletContext();//获得ServletContext对象实例
if((SessionListener)session1.getAttribute("listener1")==null)
{
SessionListenersessionListener1=newSessionListener("count");//只设置一次,分歧于下面日记文件的纪录每次会话均设置。即当第一个客户毗连到服务器时启动一个全局变量,今后一切的客户将利用不异的高低文。
session1.setAttribute("listener1",sessionListener1);//将监听器对象设置成ServletContext的属性,具有全局局限无效性,即一切的客户都可以获得它的实例。
}
session.setAttribute("listener1",(SessionListener)session1.getAttribute("listener1"));//掏出此全局对象,而且将此对象绑定到某个会话中,此举将促使监听器挪用valueBound,计数器加一。
在今后的程序中随时能够用以下代码获得以后的登录人数:
((SessionListener)session.getAttribute("listener1")).getCount()
getCount()是监听器的一个办法,即获得以后计数器的值也就是登录人数了。


主要缺点就是:速度比较慢,没有C和C++快
活着的死人 该用户已被删除
沙发
发表于 2015-1-19 21:48:21 | 只看该作者
有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)
只想知道 该用户已被删除
板凳
发表于 2015-1-24 19:10:58 | 只看该作者
是一种突破用户端机器环境和CPU
地板
发表于 2015-1-25 22:46:14 | 只看该作者
至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。
金色的骷髅 该用户已被删除
5#
 楼主| 发表于 2015-1-27 08:04:31 | 只看该作者
另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。
小妖女 该用户已被删除
6#
发表于 2015-2-2 22:07:22 | 只看该作者
不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。
谁可相欹 该用户已被删除
7#
发表于 2015-2-4 13:31:34 | 只看该作者
不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。
深爱那片海 该用户已被删除
8#
发表于 2015-2-9 23:42:55 | 只看该作者
Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。
admin 该用户已被删除
9#
发表于 2015-2-10 07:05:19 | 只看该作者
Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台
爱飞 该用户已被删除
10#
发表于 2015-2-13 19:34:46 | 只看该作者
[url]http://www.jdon.com/[/url]去下载,或到同济技术论坛的服务器[url]ftp://nro.shtdu.edu.cn[/url]去下,安装上有什么问题,可以到论坛上去提问。
透明 该用户已被删除
11#
发表于 2015-2-15 22:15:51 | 只看该作者
你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?
再见西城 该用户已被删除
12#
发表于 2015-3-2 02:11:42 | 只看该作者
你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。
老尸 该用户已被删除
13#
发表于 2015-3-8 10:54:04 | 只看该作者
在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
兰色精灵 该用户已被删除
14#
发表于 2015-3-9 13:45:39 | 只看该作者
是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言
再现理想 该用户已被删除
15#
发表于 2015-3-11 14:44:50 | 只看该作者
象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。
小女巫 该用户已被删除
16#
发表于 2015-3-18 20:16:30 | 只看该作者
象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。
变相怪杰 该用户已被删除
17#
发表于 2015-3-26 13:25:33 | 只看该作者
Java 编程语言的风格十分接近C、C++语言。
飘飘悠悠 该用户已被删除
18#
发表于 2015-4-12 11:58:22 | 只看该作者
是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能
灵魂腐蚀 该用户已被删除
19#
发表于 2015-4-17 00:52:45 | 只看该作者
Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。
海妖 该用户已被删除
20#
发表于 2015-4-24 22:22:31 | 只看该作者
一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-9-26 02:14

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表