|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
J2ME在手机游戏开发的作用也是无用质疑的。至于桌面程序,可能有人说java不行,界面不好看,但是请看看NetBeans和Eclipse吧,他们都是利用java开发的,而他们的界面是多么的华丽,所以界面决不是java的缺点。还有一个不得不提的优点就是大多java人员都挂在嘴边的java的跨平台性,目前这确实也是java优点之一。js|servlet|把持Jsp&Servlet会话把持
guipei
媒介
作为J2EE的主要构成部分的jsp和servlet标准中,会话(session)处置占据十分主要的地位。今朝,良多材料都十分具体的解说了会话跟踪怎样处置。可是,针对会话把持却很少有人触及,底本在servlet标准中,servlet供应了HttpSessionContext接口处置会话把持功效,可是,在ServletAPI2.1今后,这个功效被作废了,参考原文(AsofJava(tm)ServletAPI2.1forsecurityreasons,withnoreplacement.ThisinterfacewillberemovedinafutureversionofthisAPI.)。
在本文中,作者会给你先容一种会话把持的办法,接纳listener手艺,完成HttpSessionContext的功效交换。良多开辟职员城市在部分场所便利得利用到这个功效完成某些义务,比方:在耳目员信息检察,在耳目员把持等等功效。
剖析
本文彩用实例体例先容会话把持功效。利用多少jsp页面,和一个java类完成全部功效演示。详见下表:
组件
功效
Com.guipei.listener.SessionListener
监听组件,完成HttpSessionContext的功效
index.jsp
完成用户上岸,创立新的session
logout.jsp
完成用户加入,用户主动删除session
display.jsp
显现用户上岸信息,在用户上岸后主动转进
session.jsp
列出以后一切的session
kill.jsp
杀失落指定的会话,使这个用户毗连有效
完成
监听类com.guipei.listener.SessionListener完成webapplication的监听功效,它完成了HttpSessionListener接口,能够监听sessionCreated(HttpSessionEventse)和sessionDestroyed(HttpSessionEventse)办法,因而我们能够很简单的在session的创立和烧毁事务过程当中处置session的把持。
在此类中,我们创立一个静态实例变量Hashtableht,接纳Hashtable的一个优点是它是线程平安的汇合类,不必我们再多做线程处置。接纳这个collection类保留我们所要把持的session对象。在监听事务中简单的处置相干义务。
参看全体代码:
packagecom.guipei.listener;
importjava.util.Hashtable;
importjava.util.Iterator;
importjavax.servlet.http.HttpSession;
importjavax.servlet.http.HttpSessionEvent;
importjavax.servlet.http.HttpSessionListener;
publicclassSessionListenerimplementsHttpSessionListener{
//汇合对象,保留session对象的援用
staticHashtableht=newHashtable();
//完成HttpSessionListener接口,完成session创立事务把持
publicvoidsessionCreated(HttpSessionEventarg0){
HttpSessionsession=arg0.getSession();
ht.put(session.getId(),session);
System.out.println("createsession:"+session.getId());
}
//完成HttpSessionListener接口,完成session烧毁事务把持
publicvoidsessionDestroyed(HttpSessionEventarg0){
HttpSessionsession=arg0.getSession();
System.out.println("destorysession:"+session.getId());
ht.remove(session.getId());
}
//前往全体session对象汇合
staticpublicIteratorgetSet(){
returnht.values().iterator();
}
//根据sessionid前往指定的session对象
staticpublicHttpSessiongetSession(StringsessionId){
return(HttpSession)ht.get(sessionId);
}
}
页面index.jsp处置用户上岸,创立新的会话的功效。在完成考证后,跳转到display.jsp页面上。
<%@pagecontentType="text/html;charset=gb2312"%>
<!--Copyright(c)2002byObjectLearn.AllRightsReserved.-->
<%
StringstrName=null;
StringstrThing=null;
try{
strName=request.getParameter("name");
strThing=request.getParameter("thing");
if((strName==null)||(strName.length()==0)){
thrownewException("nullstrName");
}
if((strThing==null)||(strThing.length()==0))
thrownewException("nullstrThing");
//addsession
session.setAttribute("name",strName);
session.setAttribute("thing",strThing);
response.sendRedirect("display.jsp");
}catch(Exceptione){
}
%>
<html>
<head>
<title>Welcome</title>
</head>
<body>
<center>Welcome</center>
<formmethod=post>
<tablealign=center>
<tr>
<td>name:</td>
<td><inputname=nametype=input/></td>
</tr>
<tr>
<td>thing:</td>
<td><inputname=thingtype=input/></td>
</tr>
<tr>
<tdalign=right></td>
<tdalign=right>
<buttontype=submit>submit</button>
<buttontype=reset>reset</button>
</td>
</tr>
</table>
</form>
</body>
</html>
页面display.jsp用于用户上岸后的显现功效,假如用户没有举行过上岸哀求,会主动转发到index.jsp页面,包管用户上岸。
<%@pagelanguage="java"pageEncoding="GB2312"%>
<!DOCTYPEHTMLPUBLIC"-//w3c//dtdhtml4.0transitional//en">
<html>
<head>
<title>LombozJSP</title>
</head>
<bodybgcolor="#FFFFFF">
<%
if(session.isNew()==true){
response.sendRedirect("index.jsp");
}
out.println("name:"+session.getAttribute("name")+"<br>");
out.println("thing:"+session.getAttribute("thing")+"<br>");
out.println("sessionid:"+session.getId()+"<br>");
out.println("createtime:"+session.getCreationTime());
%>
</body>
</html>
页面logout.jsp用于用户加入上岸,接纳自动体例烧毁session。
<%@pagelanguage="java"pageEncoding="GB2312"%>
<!DOCTYPEHTMLPUBLIC"-//w3c//dtdhtml4.0transitional//en">
<html>
<head>
<title>LombozJSP</title>
</head>
<bodybgcolor="#FFFFFF">
<%
if(session.isNew()!=true){
session.invalidate();
}
response.sendRedirect("index.jsp");
%>
</body>
</html>
页面session.jsp列出以后会话用户,并供应一个毗连到kill.jsp,能够用作烧毁指定的会话操纵。
<%@pagelanguage="java"pageEncoding="GB2312"%>
<%@pageimport=com.guipei.listener.*,java.util.*%>
<!DOCTYPEHTMLPUBLIC"-//w3c//dtdhtml4.0transitional//en">
<html>
<head>
<title>LombozJSP</title>
</head>
<bodybgcolor="#FFFFFF">
Listsessionobject
<br>
<tableborder=1>
<trbgcolor=yellow>
<td>sessionid</td>
<td>username</td>
<td>whatthing</td>
<td>createtime</td>
<td>operate</td>
</tr>
<%
Iteratoriterator=SessionListener.getSet();
while(iterator.hasNext()){
try{
HttpSessionsession1=(HttpSession)iterator.next();
out.println("<tr>");
out.println("<td>"+session1.getId()+"</td>");
out.println("<td>"+session1.getAttribute("name")+"</td>");
out.println("<td>"+session1.getAttribute("thing")+"</td>");
out.println("<td>"+session1.getCreationTime()+"</td>");
out.println("<td><ahref=kill.jsp?sessionid="+session1.getId()+
">kill</a></td>");
out.println("</tr>");
System.out.println("list"+session1.getId());
}catch(Exceptionex){
ex.printStackTrace();
return;
}
}
%>
</table>
</body>
</html>
页面kill.jsp完成烧毁指定会话的功效,吸收一个sessionid参数,从我们保留的session对象汇合中获得对应的session对象,挪用invalidate办法,烧毁对象。
<%@pagelanguage="java"pageEncoding="GB2312"%>
<%@pageimport="com.guipei.listener.*"%>
<!DOCTYPEHTMLPUBLIC"-//w3c//dtdhtml4.0transitional//en">
<html>
<head>
<title>LombozJSP</title>
</head>
<bodybgcolor="#FFFFFF">
<%
//killthesession
try{
StringstrSid=request.getParameter("sessionid");
HttpSessionsession1=SessionListener.getSession(strSid);
if(session1!=null){
session1.invalidate();
}
}catch(Exceptione){
e.printStackTrace();
}
response.sendRedirect("session.jsp");
%>
</body>
</html>
完成以上代码后,还必要在web.xml形貌中增加以下元素。使得SessionListener类能够发扬监听功效。
<listener>
<listener-class>
com.guipei.listener.SessionListener
</listener-class>
</listener>
总结
作者不是很分明,servlet标准为何要作废HttpSessionContext接口,只管它声了然作废的缘故原由,可是我们仍旧能够简单的经由过程HttpSessionListener接话柄现这个功效。
但愿本文能够供应一个新的办法,交换已被servlet标准取销的HttpSessionContext接口。让我们能够便利的举行会话操纵。
令人可喜的是java现在已经开源了,所以我想我上述的想法也许有一天会实现,因为java一直都是不断创新的语言,每次创新都会给我们惊喜,这也是我喜欢java的一个原因。 |
|