有一个监听这个事件的类,继承一下重写,然后在web.xml中设置
jb里面有帮助
jb里面有帮助
解决方案 »
- web 开发jsp问题!!!!
- struts标签 的 textfield 如何获取request里的对象的属性值??
- Oracle和tomcat一起搞怪
- JSP连接数据库问题.用JDBC-ODBC桥时候出现了问题
- java.lang.NoClassDefFoundError: org/aspectj/lang/Signature这是什么错误?
- 帮我看看正则这个证表达式有没有写错?
- 请问用jsp开发网站,最常用的连接数据库的方式??
- 有关于resin的连接池问题
- 诸位大侠,本人刚由ASP转向JSP,发现在ASP中的VBSCRIPT脚本在JSP中也可以用,请问诸位,在JSP中脚本应该用什么?(ASP是用VBSCRIPT,JAVASCRIPT)
- java 如何创建 mysql 数据库?有30张表
- 统计时间
- 如何打开一个页面而关闭自己?
public void sessionCreated( HttpSessionEvent se )
{
}// 当session过期"之前",系统自动调用该方法
public void sessionDestroyed( HttpSessionEvent se )
{
HttpSession session = se.getSession();
// todo:你的数据库操作
}
在web.xml中加:<listener>
<listener-class><实现接口的类全名></listener-class>
</listener>
<%
session.setAttribute(String name,obj name);
session.getAttribute(String name)
%>
也是把信息写进数据库的
不知道你说的撤消是不是指这个session结束或失效
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;public class SessionBindings extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
res.setContentType("text/plain");
PrintWriter out = res.getWriter(); // Get the current session object, create one if necessary
HttpSession session = req.getSession(); // Add a CustomBindingListener
session.setAttribute("bindings.listener",
new CustomBindingListener(getServletContext())); out.println("This page intentionally left blank");
}
}class CustomBindingListener implements HttpSessionBindingListener { // Save a ServletContext to be used for its log() method
ServletContext context; public CustomBindingListener(ServletContext context) {
this.context = context;
} public void valueBound(HttpSessionBindingEvent event) {
context.log("[" + new Date() + "] BOUND as " + event.getName() +
" to " + event.getSession().getId());
} public void valueUnbound(HttpSessionBindingEvent event) {
context.log("[" + new Date() + "] UNBOUND as " + event.getName() +
" from " + event.getSession().getId());
}
}
撤销的代码:session.removeAttribute(String name);
生命周期事件
Servlet API 2.3第二个意义重大的改变是增加了应用程序生命周期事件,即当servlet contexts和sessions被初始化或释放时,当向context或session上添加或删除属性的时候,通知"listener"对象.Servlet生命周期事件与Swing的事件机制类似。对ServletContext生命周期进行观察的监听器必须实现 ServletContextListener接口。这个接口有两个方法:
• void contextInitialized(ServletContextEvent e):当Web application第一次准备处理requests的时候(例如:Web server启动并且context被加载和重新加载时)。 本方法返回之前不开始处理Requests
• void contextDestroyed(ServletContextEvent e):在Web application要被关闭的时候(例如:当Web server关闭或当一个context被移去或重新加载的时候)。本方法调用时Request处理已经停止.传入这些方法的ServletContextEvent类只有一个返回被初始化或被移去的context的getServletContext()方法。对ServletContext属性生命周期进行观察的监听器必须实现ServletContextAttributesListener接口,这个接口有三个方法:
• void attributeAdded(ServletContextAttributeEvent e):当属性被加到servlet context上时调用
• void attributeRemoved(ServletContextAttributeEvent e):当属性被从servlet context上移走时调用
• void attributeReplaced(ServletContextAttributeEvent e):当servlet context上的属性被另一个属性所代替的时候调用继承于ServletContextEvent的ServletContextAttributeEvent类,增加了getName()和getValue()方法,这两个方法使监听器得到正在被改变的属性的相关信息。现在对于需要同步应用程序状态(context属性)的应用程序来说,如数据库处理,能够方便的在这个地方进行统一的处理。session listener model与context listener model类似。在session事件模型中, 有一个拥有两个方法的HttpSessionListener接口:
• void sessionCreated(HttpSessionEvent e):当session创建时被调用
• void sessionDestroyed(HttpSessionEvent e):当session被释放时或无效时被调用这些方法接受一个拥有返回被创建或被释放的session的getSession()方法的HttpSessionEvent类实例。可以使用这些方法实现一个对Web application中所有的活动用户进行跟踪的管理者接口。session事件模型还有一个HttpSessionAttributesListener接口,这个接口有三个方法。这些方法告诉监听器属性何时改变,何时能够被使用:
• void attributeAdded(HttpSessionBindingEvent e):当属性被加到session上时调用
• void attributeRemoved(HttpSessionBindingEvent e):当属性被从session上移去时调用
• void attributeReplaced(HttpSessionBindingEvent e):当session上的属性被另一个属性所代替的时候调用与你所猜想的一样, HttpSessionBindingEvent类继承于HttpSessionEvent接口,并且加入了getName()和getValue()方法. 唯一一点不一样的地方是事件类的名字是HttpSessionBindingEvent,而不是 HttpSessionAttributeEvent。合理的解释是:原有的API已经存在了一个名为HttpSessionBindingEvent的事件类, 因此这个事件类被重用。 生命周期事件的一个实际应用由context监听器管理共享数据库连接。在web.xml中如下定义监听器:<listener>
<listener-class>com.acme.MyConnectionManager</listener-class>
</listener>
server创建监听器的实例接受事件并自动判断实现监听器接口的类型。要记住的是由于监听器是配置在deployment descriptor中,所以不需要改变任何代码就可以添加新的监听器。监听器的例子如下:public class MyConnectionManager implements ServletContextListener { public void contextInitialized(ServletContextEvent e) {
Connection con = // create connection
e.getServletContext().setAttribute("con", con);
} public void contextDestroyed(ServletContextEvent e) {
Connection con = (Connection) e.getServletContext().getAttribute("con");
try { con.close(); } catch (SQLException ignored) { } // close connection
}
}监听器保证每新生成一个servlet context都会有一个可用的数据库连接,并且所有的连接对会在context关闭的时候 随之关闭。API 2.3新增的HttpSessionActivationListener监听器接口的目的是处理在server之间传送的session。实现HttpSessionActivationListener的监听器在session要被钝化(移动)和session在其它的主机上要被激活(开始活动)的时候被通知。使用这个接口可以在JVM之间长久保存没有进行序列化的数据,或者是在移动session前后对序列化的对象执行一些附加的操作。这个接口有两个方法:
• void sessionWillPassivate(HttpSessionEvent e):session将被钝化。 此时session已经超出了service的管理范围
• void sessionDidActivate(HttpSessionEvent e):session已经被激活。此时session还没有进入service的管理范围这个监听器接口与其他的监听器接口在原理上类似。然而与其它监听器不同的是,钝化和激活的调用很有可能发生在两个不同的server中!
这个还是去问SUN的工程师比较好