gpt4 book ai didi

java - 如何在扩展 HttpServlet 的类中实例化对象?

转载 作者:行者123 更新时间:2023-12-01 17:30:30 26 4
gpt4 key购买 nike

我有一个扩展 HttpServlet 类的类。我知道 Java 是多线程的,不同的线程(阅读:HTTP 请求)可以使用同一个实例。我想在第一个请求时实例化一个对象并使用它直到 session 结束。

我应该如何进行?

例如:我想在第一个请求时打开一个文件,并在 session 结束时关闭它。

最佳答案

您可以自己在 servlet 的 doXxx() 方法之一中实例化它,具体取决于它在 session 中的存在

SomeObject someObject = (SomeObject) request.getSession().getAttribute("someObject");

if (someObject == null) {
someObject = new SomeObject();
request.getSession().setAttribute("someObject", someObject);
}

// Use someObject.

或者您可以在 HttpSessionListener 中自己实例化它

@WebListener
public class SomeObjectInitializer implements HttpSessionListener {

@Override
public void sessionCreated(HttpSessionEvent event) {
event.getSession().setAttribute("someObject", new SomeObject());
}

@Override
public void sessionDestroyed(HttpSessionEvent event) {
// NOOP.
}

}

无论哪种方式,SomeObject 本身都可以实现 HttpSessionBindingListener以便您可以在绑定(bind)和取消绑定(bind) session 期间执行一些逻辑。

public class SomeObject implements HttpSessionBindingListener {

@Override
public void valueBound(HttpSessionBindingEvent event) {
// Perform job during adding to the session.
}

@Override
public void valueUnbound(HttpSessionBindingEvent event) {
// Perform job during removal from the session.
}

}

关于java - 如何在扩展 HttpServlet 的类中实例化对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11529134/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com