会话从struts 2.0开始

时间:2013-05-11 02:15:07

标签: jsp struts2

在asp.net中,global.asax可以有session_start事件。 当用户第一次访问网站时,会话开始,该事件将触发。 在struts或java中指定了类似的东西吗?

3 个答案:

答案 0 :(得分:3)

您可以实现javax.servlet.http.HttpSessionListener接口并在web.xml中注册它。实现类的方法将在会话创建/销毁等时调用。

web.xml中的条目将类似于下面的内容

<listener>
    <description>sessionListener</description>
    <listener-class>
        your.com.HttpSessionListenerImplementation
    </listener-class>
</listener>

这与struts无关,而是servlet API的一部分,可在任何servlet容器中使用

答案 1 :(得分:2)

不在Struts2中,也不是内置功能。当然,您可以使用拦截器/拦截器堆栈来解决这个问题。

在Java EE中,会话是应用程序服务器的职责。因此,我们应该能够假设我们总是至少从struts2的角度来看会话。

这个人展示了如何创建拦截器的一个非常明确的例子:http://www.mkyong.com/struts2/struts-2-creating-own-interceptor/

有关拦截器的大量详细信息,请参阅:http://struts.apache.org/release/2.1.x/docs/interceptors.html

在最后一个链接的最底部有这个链接:How do we get access to the session(来自拦截器,因为在我们使用SessionAware的动作中,虽然我们也可以这样做)。

一般来说,当有人登录时你会想要一些特别的东西,而登录动作将是你想要的东西放入Session的好地方。出于某种原因,你需要提前做一些事情,以便重申:

  1. 创建自定义SessionSetup拦截器
  2. 注册拦截器并在struts.xml中创建自定义拦截器堆栈
  3. 让你所有的包都使用这个堆栈。

答案 2 :(得分:0)

您可以使用struts 2中提供的会话范围拦截器进行会话管理。以下是它的一个很好的用法。您可以指定是否要通过“开始”参数启动会话。

<interceptor-ref name="scope">
                <param name="type">start</param>
                <param name="session">revisionList,revisionManagmentDetails</param>
                <param name="key">revisionManagementSessionKey</param>
            </interceptor-ref>