java - 即使 session 失效后,Action 类对象如何仍然可用?

标签 java session instance struts

我正在使用 Struts 1.2,我需要有关 Action 类的说明。

我的 Action 类有一个实例变量 count 和一个带有 SOP 语句的实例初始化 block ,该语句将打印 count 的递增值(递增 1)。然后我为应用程序中的屏幕配置了这个 Action 类。现在,当我点击这个屏幕时,我的 Action 类就会被执行。

我从两个不同的浏览器访问此屏幕,发现实例初始化 block 内的 SOP 仅执行一次,得出的结论是仅为两个用户创建了一个对象。

现在,当我从两个浏览器注销并再次登录以访问同一屏幕时,实例初始化 block 内的 SOP 未执行(因此 Action 类对象仍然可用)。但是当我从正在运行的服务器中删除我的项目并再次发布时,SOP 被执行了。

所以我认为 Action 类对象与 session 无关,如果不是,那么它存储在哪里,以便即使在 session 失效后 Action 类对象仍然可用?

示例 Action 类代码:-

public class SampleAction  extends DispatchAction {
   private int count;

   {
         System.out.println(++count + " object(s) created");
   }
   /* other methods */
}

最佳答案

I think the Action class object is not related with session and if it is not, then where it is getting stored so that even after session gets invalidated Action class object is available ?

是的,ActionServletAction 类对象是由 servlet 容器创建和维护的,它们是单例对象(默认情况下),即,只有这些类的一个实例与您的 FormBean 对象不同,它是为整个 Web 应用程序维护的。

因此,ActionServletAction 类对象在加载后(无论是在启动期间还是在第一个请求到达容器时)都存在于容器中,直到应用程序被销毁为止用户 session 的数量。

另外,请注意 Action 类对象与 FormBean 类对象完全不同(例如 ProductFormBeanEmployeeFormBean等...),即 FormBean 对象绑定(bind)到每个 JSP 页面,并且当用户发出请求时,它们将被实例化(将创建一个对象)并填充(使用 JSP 字段数据)。

关于java - 即使 session 失效后,Action 类对象如何仍然可用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40839367/

相关文章:

Python google appengine session 使用 webapp2_extras 混淆

android - 私有(private)调度TouchEvent?

Java网络发现

java - SLF4J 按标记过滤日志消息

java - 是否可以从内部方法返回外部方法?

asp.net - 在负载均衡器上启用粘性 session

jsp - 为什么 tomcat 为每个请求创建一个 session cookie?

java - 哪些操作保持顺序

node.js - Nodejs : single AWS instance or one per request

java - 忽略新实例