【问题标题】:Session start in struts 2.0会话在 struts 2.0 中开始
【发布时间】:2013-05-05 18:41:14
【问题描述】:

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

【问题讨论】:

    标签: jsp struts2


    【解决方案1】:

    不在 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】:

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

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

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

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-11-09
          • 2013-05-30
          • 2012-06-21
          • 2011-11-08
          • 1970-01-01
          • 1970-01-01
          • 2019-06-17
          • 1970-01-01
          相关资源
          最近更新 更多