首 页 网络编程
网页制作 图形图象 操作系统 冲浪宝典
软件教学 认证考试

网络安全 网络办公 行业资讯 评测对比
您当前位置:站长天空 -> 网络编程-> Shell教程
Jsp & Servlet 会话控制-JSP教程,Jsp/Servlet
作者:网友供稿 点击:313
推荐
西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!可在线rar解压,自动数据恢复设置虚拟目录等.免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金
站内搜索
文章页数:[1] 
jsp & servlet 会话控制

作者:guipei

前言
作为j2ee的重要组成部分的jsp和servlet规范中,会话(session)处理占有非常重要的位置。目前,很多资料都非常详细的讲解了会话跟踪如何处理。但是,针对会话控制却很少有人涉及,原本在servlet规范中,servlet提供了httpsessioncontext接口处理会话控制功能,但是,在servlet api 2.1以后,这个功能被取消了,参考原文(as of java(tm) servlet api 2.1 for security reasons, with no replacement. this interface will be removed in a future version of this api.)。

在本文中,作者会给你介绍一种会话控制的方法,采用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 实现web application的监听功能,它实现了httpsessionlistener接口,可以监听sessioncreated(httpsessionevent se)和sessiondestroyed(httpsessionevent se) 方法,因此我们可以很容易的在session的创建和销毁事件过程中处理session的控制。

在此类中,我们创建一个静态实例变量hashtable ht,采用hashtable的一个好处是它是线程安全的集合类,无须我们再多做线程处理。采用这个collection类保存我们所要控制的session对象。在监听事件中容易的处理相关任务。

参看全部代码:



package com.guipei.listener;



import java.util.hashtable;

import java.util.iterator;



import javax.servlet.http.httpsession;

import javax.servlet.http.httpsessionevent;

import javax.servlet.http.httpsessionlistener;



public class sessionlistener implements httpsessionlistener {



// 集合对象,保存session 对象的引用

static hashtable ht = new hashtable();



// 实现httpsessionlistener接口,完成session创建事件控制

public void sessioncreated(httpsessionevent arg0) {

httpsession session = arg0.getsession();

ht.put(session.getid(), session );

system.out.println("create session :" + session.getid() );

}



// 实现httpsessionlistener接口,完成session销毁事件控制

public void sessiondestroyed(httpsessionevent arg0) {

httpsession session = arg0.getsession();

system.out.println("destory session :" + session.getid() );

ht.remove(session.getid());

}



// 返回全部session对象集合

static public iterator getset( ){

return ht.values().iterator();

}



// 依据session id返回指定的session对象

static public httpsession getsession(string sessionid){

return (httpsession)ht.get(sessionid);

}

}






页面index.jsp 处理用户登陆,创建新的会话的功能。在完成验证后,跳转到display.jsp页面上。

<%@ page contenttype="text/html; charset=gb2312" %>

<!-- copyright (c) 2002 by objectlearn. all rights reserved. -->

<%

string strname = null;

string strthing = null;

try {

strname = request.getparameter("name");

strthing = request.getparameter("thing");

if ((strname == null) || (strname.length()==0)){

throw new exception("null strname");

}

if ((strthing == null) || (strthing.length()==0))

throw new exception("null strthing");



// add session

session.setattribute("name",strname);

session.setattribute("thing",strthing);

response.sendredirect("display.jsp");



} catch (exception e) {

}

%>

<html>

<head>

<title>welcome</title>

</head>

<body>

<center>welcome</center>



<form method=post >

<table align=center>

<tr>

<td>name:</td>

<td> <input name=name type=input/> </td>

</tr>

<tr>

<td>thing:</td>

<td> <input name=thing type=input/> </td>

</tr>

<tr>

<td align=right> </td>

<td align=right>

<button type=submit>submit</button>

<button type=reset>reset</button>

</td>

</tr>

</table>

</form>

</body>

</html>






页面display.jsp用于用户登陆后的显示功能,如果用户没有进行过登陆请求,会自动转发到index.jsp页面,保证用户登陆。

<%@ page language="java" pageencoding="gb2312" %>

<!doctype html public "-//w3c//dtd html 4.0 transitional//en">

<html>

<head>

<title>lomboz jsp</title>

</head>

<body bgcolor="#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("session id: " + session.getid() + "<br>");

out.println("create time: " + session.getcreationtime() );



%>



</body>

</html>




页面logout.jsp用于用户退出登陆,采用主动方式销毁session。

<%@ page language="java" pageencoding="gb2312" %>

<!doctype html public "-//w3c//dtd html 4.0 transitional//en">

<html>

<head>

<title>lomboz jsp</title>

</head>

<body bgcolor="#ffffff">

<%

if(session.isnew()!=true){

session.invalidate();

}

response.sendredirect("index.jsp");

%>

</body>

</html>




页面session.jsp列出当前会话用户,并提供一个连接到kill.jsp,可以用作销毁指定的会话操作。

<%@ page language="java" pageencoding="gb2312" %>

<%@ page import= com.guipei.listener.*,java.util.*%>

<!doctype html public "-//w3c//dtd html 4.0 transitional//en">

<html>

<head>

<title>lomboz jsp</title>

</head>

<body bgcolor="#ffffff">



list session object

<br>

<table border=1>

<tr bgcolor=yellow>

<td>session id</td>

<td>user name </td>

<td>what thing </td>

<td>create time </td>

<td>operate</td>

</tr>



<%

iterator iterator = sessionlistener.getset();

while(iterator.hasnext()){

try{

httpsession session1 = (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> <a href=kill.jsp?sessionid=" + session1.getid() +

">kill </a> </td>" );



out.println("</tr>");

system.out.println("list " + session1.getid());

}catch(exception ex){

ex.printstacktrace();

return;

}

}

%>

</table>

</body>

</html>




页面kill.jsp实现销毁指定会话的功能,接收一个session id参数,从我们保存的session对象集合中取得对应的session对象,调用invalidate方法,销毁对象。

<%@ page language="java" pageencoding="gb2312" %>

<%@ page import="com.guipei.listener.*"%>

<!doctype html public "-//w3c//dtd html 4.0 transitional//en">

<html>

<head>

<title>lomboz jsp</title>

</head>

<body bgcolor="#ffffff">

<%

// kill the session

try {

string strsid = request.getparameter("sessionid");

httpsession session1 = sessionlistener.getsession(strsid);

if (session1!=null){

session1.invalidate();

}

} catch (exception e) {

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接口。让我们可以方便的进行会话操作。




文章整理:站长天空 网址:http://www.z6688.com/
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

文章页数:[1] 


放大字体显示 缩小字体显示 打印文章 推荐给朋友
热门文章
·jsp设置页面过期-JSP教程,Jsp/Servlet
·用SqlDataAdapter更新数据库的方法介绍-.NET教程,数据库应用
·用java关闭IE窗口-JSP教程,Java技巧及代码
·ADO.NET 2.0 Feature Matrix-ASP教程,ASP应用
·Jsp & Servlet 会话控制-JSP教程,Jsp/Servlet
·xmlhttp 乱码 的解决方法 (UTF8,GB2312 编码 解码)-ASP教程,XML相关
·使用C#编写Ice应用程序-.NET教程,C#语言
·用PHP实现WEB动态网页静态-PHP教程,PHP应用
·DataGrid基于Access的快速分页法-.NET教程,数据库应用
·HTML文档中小meta的大作用-ASP教程,XML相关
最新文章
·photoshop打造数码照片“像素块”特效_photoshop教程
·css中如何正确的使用id和class_css教程
·保证让新手轻松月挣500以上_网赚技巧
·记住10个关键词让你作一名成功的站长_站长心得
·对新人站长得一些善意得提醒_站长心得
·在windows vista中安装telnet客户端_windows vista
·怎样提高你的google adsense收入_站长心得
·googleadsense新手指南及常见问题整理_google推广
·高网站访问量的必胜之道:访google adwords经理(上)_google推广
·成功经验谈:运营blog的21个具体方法_网络编辑
相关主题
西部数码虚拟主机

友情链接
CNNIC 西部数码
万网 自助建站
虚拟主机 asp空间
域名注册 域名
域名申请 主页空间
论坛空间 网站空间
国际域名 虚拟空间
空间租用 DDOS防火墙
成都主机托管 四川主机托管
主机租用 服务器租用
网站目录 自助建站
虚拟主机 网址大全
软件下载
自助链接
虚拟主机资讯 特价虚拟主机
版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
关于我们:站长天空:专业提供最新的站长资讯、在线教程、虚拟主机权威评测、虚拟主机性能对比、网站制作教程,开发教程,站长工具。包括网页制作教程、冲浪宝典、编程参考、操作系统、软件教学、行业动态等。
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
发表评论 打印  刷新     关闭