相关疑难解决方法(0)

如何在会话对象被销毁之前调用方法?

在开发JSP应用程序时,可以定义会话超时值,比如30分钟.

超时后,会话对象被销毁.此外,我可以通过编程方式使会话调用session.invalidate()无效.

由于我在HTTP会话中保存了一个复杂的Java对象,在使会话无效或让tomcat app服务器过期之前,我需要调用一个保存的对象方法来释放一些内存.当然,当用户单击注销按钮时,我可以以编程方式执行此操作.

我想要做的是拦截Tomcat应用服务器,当它要销毁所有过期的会话(30分钟或自定义)时,这样我就可以预处理保存在会话中的Java对象,调用特定的方法来释放内存.

可能吗?

java tomcat servlets

18
推荐指数
1
解决办法
2万
查看次数

如何在Java中访问HTTP会话

如何以优雅的方式通过id或Web应用程序(Java 2 EE)中所有当前活动的http会话获取任何http会话?

目前我有一个WebSessionListener和一次创建会话我把它放进去ConcurrentHashMap() (map.put(sessionId, sessionObj)),一切都好,我可以随时通过会话ID从该地图检索HTTP会话,但看起来HttpSession对象永远不会完成...甚至会话无效地图仍然参考无效的会话对象...我也读过这篇文章,看起来WeakHashMap在我的情况下是不可接受的......

换句话说,我需要有可能查看任何HttpSession甚至获取当前所有活动HttpSession并从那里检索一些属性...

请告诉别人:)

更新

我需要访问HttpSession对象,因为以下原因:

有时用户会做一些可能影响另一个并发用户工作的操作/请求,例如管理员应该禁用用户帐户但该用户当前正在使用该系统,在这种情况下我需要向管理员显示一条消息,例如"用户XXX当前使用系统"因此我需要检查是否有任何持有用户XXX凭据的HttpSession已存在且处于活动状态.所以这就是我需要这样的可能性来获得任何http会话甚至所有会话.

我当前的实现是:SessionManager知道所有会话(ConcurrentMap)和HttpSessionListener,它们将会话/删除会话放入SessionManager.

我担心可能出现的内存问题,我想与某人讨论这个问题,但目前我清楚地看到一切都应该正常工作,因为当调用sessionDestroyed()方法时,所有无效的会话都将从地图中删除...

非常感谢您的重播,但现在我明白这个问题只是想象力:)

java session servlets

6
推荐指数
2
解决办法
9379
查看次数

在绑定/无限制到HTTP会话时获取通知

当我的Object被绑定/无界限到HTTP的会话对象时,我如何得到通知.

session notifications servlets

6
推荐指数
1
解决办法
3332
查看次数

关闭JSP时调用操作

我是java网络世界的新手,所以如果我说一些愚蠢的话,请原谅我.

我正在使用struts 2,我需要在关闭jsp时删除一个文件(位于服务器上).

有没有人知道怎么做?

提前致谢.

java jsp

4
推荐指数
1
解决办法
1948
查看次数

实现HttpSessionListener

我遇到了类似的问题,并且已经知道我的侦听器类将在读取web.xml时被实例化.我在侦听器类中使用的函数很少,主servlet的doPost(它与数据库(mysql)交互以读取/写入有关用户的数据.)以及HttpSessionListener的方法.那么是什么阻止了容器加载监听器类.我收到404错误.

片段:

public class EntryServlet extends HttpServlet{
public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {


    PlayersList playa = new PlayersList(); //listener class

    if(!playa.isExisting(params[3])){
        if(params[1].equals("Register")){           
            playa.addPlayer(params);
        }
    }       
    else
        out.println("Username already exists");


    if(playa.isExisting(params[argUName],params[argUPwd])){
        HttpSession session = request.getSession(true);     
        session.setMaxInactiveInterval(600);            
        HashMap playersMap = playa.getActivePlayers();
        //code . .
    }
    else
        out.println("Couldn't locate player Name!");    
        out.println(playa.getIn());         
}
Run Code Online (Sandbox Code Playgroud)

听众课程:

public class PlayersList implements HttpSessionListener{
private Connection cn;
private Statement st;

PlayersList(){
    try{
        Class.forName("com.mysql.jdbc.Driver");
        cn =  DriverManager.getConnection("jdbc:mysql://localhost/homeDbse\'","root","");
        st = cn.createStatement();
    }
    catch(ClassNotFoundException ce){} …
Run Code Online (Sandbox Code Playgroud)

java web.xml servlets httpsession servlet-listeners

2
推荐指数
1
解决办法
5152
查看次数

会话侦听器 - 不调用valueBound或valueUnbound

我刚刚尝试在我的测试Web应用程序中添加会话侦听器HttpSessionBindingListenerHttpSessionAttributeListener ; 它们都在我的测试对象中实现为:

public class MySessionListener implements HttpSessionBindingListener,HttpSessionAttributeListener 
{
//implemented methods...
}
Run Code Online (Sandbox Code Playgroud)

事情是...

我试过像一个代码

session.setAttribute("name",new TestValue());
Run Code Online (Sandbox Code Playgroud)

因此,我希望调用HttpSessionBindingListener事件,valueBound(...)但我只调用了HttpSessionAttributeListener一个attributeAdded(...):(

而且,关于valueUnbound(...)方法态度与我提到的完全相同,我使用的代码就像

session.removeAttribute("name");
Run Code Online (Sandbox Code Playgroud)

...但我attributeRemoved(...)只是被称为同一个:S

我想尝试putValue()方法,但现在我正在观看HttpSession文档,其中说"putValue已弃用.从版本2.2开始,此方法被setAttribute(java.lang.String,java.lang.Object)取代"

所以我不知道为什么调用valueBound(...)valueUnbound(...)不调用以及如何调用它们?

谢谢

servlets java-ee httpsession

2
推荐指数
1
解决办法
2544
查看次数