代码之家  ›  专栏  ›  技术社区  ›  xain

在Struts1操作类中只加载一次变量

  •  0
  • xain  · 技术社区  · 15 年前

    我有一个structs action对象实例,它从属性文件中加载一个变量。我希望它只在第一次调用该操作时发生,以便在进一步执行时从内存中读取它。有什么提示吗?谢谢。

    1 回复  |  直到 15 年前
        1
  •  0
  •   user159088 user159088    15 年前

    1-从属性文件中读取值,并将其作为静态字段存储在操作类中。静态初始值设定项应该用于加载包和读取值。当您的动作类被JVM加载时,您将得到您的值,然后从那里使用它。

    public class YourAction extends Action {
      private static String value;
      static {
        // value = load code here
      }
      ...
    }
    

    由于在加载Struts时,您无法访问它的功能,因此我认为您必须使用以下内容来读取您的值:

    ResourceBundle.getBundle("com/some/package/bundle").getString("some_key")
    

    2-在Action实例上设置值并用构造函数加载,然后使用它:

    public class YourAction extends Action {
      private String value;
      public YourAction() {
        super();
        //value = load code here
      }
      ...
    }
    

    这将起作用,因为Struts使用一个动作实例来服务所有请求,所以所有请求都将看到您的值(即Struts动作类不是线程安全的,它们的行为类似于servlet)。