Java 引用HttpSessionListener实例而不使用单例或静态

Java 引用HttpSessionListener实例而不使用单例或静态,java,jakarta-ee,Java,Jakarta Ee,我已经在我的web.xml中注册了一个HttpSessionListener,它工作正常,但是我需要从其他区域(例如servlet)访问对象实例,并且不希望使用旧的公共静态HttpSessionListener obj=this(伪)模式 有没有办法通过J2ee API访问此对象?我不知道为什么要从servlet访问会话侦听器 听起来您真正想要做的是从会话侦听器重构一个对象,并通过ServletContext访问它。然后可以从servlet和侦听器访问它 有关作用域属性的更多信息,请参阅。我不确

我已经在我的
web.xml
中注册了一个
HttpSessionListener
,它工作正常,但是我需要从其他区域(例如servlet)访问对象实例,并且不希望使用旧的
公共静态HttpSessionListener obj=this(伪)模式


有没有办法通过J2ee API访问此对象?

我不知道为什么要从servlet访问会话侦听器

听起来您真正想要做的是从会话侦听器重构一个对象,并通过
ServletContext
访问它。然后可以从servlet和侦听器访问它


有关作用域属性的更多信息,请参阅。

我不确定您为什么要从servlet访问会话侦听器

听起来您真正想要做的是从会话侦听器重构一个对象,并通过
ServletContext
访问它。然后可以从servlet和侦听器访问它


有关作用域属性的更多信息,请参阅。

为了澄清,您建议我创建一个对象作为
ServletContext
的属性,并从
HttpSessionListener
中管理它?那就行了。@pstanton:这就是这个建议听起来的样子。无论您将其存储在何处以供访问,听起来您肯定需要将公共功能提取到共享对象。@pstanton-是的,我就是这么说的。真正的问题是“为什么servlet关心会话侦听器?”我能想到的唯一原因是您有一个监视servlet,也许是为了跟踪活动会话的数量。在这种情况下,您应该共享数据,并且可以通过应用程序上下文共享数据。如果您的用例不同,请详细说明。@parsifal您的回答有点误导,因为它谈到了“应用程序上下文”,但没有提到
ServletContext
。一个好的答案没有任何解释。@pstanton-很抱歉,当我想输入“范围”时,我输入了“上下文”。术语“应用范围”是JSP程序员熟悉的
JSP:useBean
的参数,尽管官方教程(我在上面链接)现在似乎称之为“web上下文”。为了澄清,您建议我创建一个对象作为
ServletContext
的属性,并从
HttpSessionListener
中管理它?那就行了。@pstanton:这就是这个建议听起来的样子。无论您将其存储在何处以供访问,听起来您肯定需要将公共功能提取到共享对象。@pstanton-是的,我就是这么说的。真正的问题是“为什么servlet关心会话侦听器?”我能想到的唯一原因是您有一个监视servlet,也许是为了跟踪活动会话的数量。在这种情况下,您应该共享数据,并且可以通过应用程序上下文共享数据。如果您的用例不同,请详细说明。@parsifal您的回答有点误导,因为它谈到了“应用程序上下文”,但没有提到
ServletContext
。很抱歉,当我想输入“范围”时,我输入了“上下文”。JSP程序员熟悉术语“应用范围”作为
JSP:useBean
的参数,尽管官方教程(我在上面链接)现在似乎称之为“web上下文”