【问题标题】:How to share variable between init and doget?如何在 init 和 doget 之间共享变量?
【发布时间】:2013-03-31 23:23:11
【问题描述】:

在 servlet 中,我想在 init 和 doget 之间共享一个变量

我想知道我应该使用静态还是普通来声明这个变量

(static?) int small;

init()
{
    small = 5:    
}

doGet(final HttpServletRequest request, final HttpServletResponse response) {
    small
}

【问题讨论】:

  • 您希望small 在 servlet 的所有用户之间共享吗?或者您是否希望每个请求都有一个 small 实例?
  • 我想确保我理解这两种情况
  • servlet 规范说init 方法在第一个请求之前被调用。 servlet 的同一个实例在所有请求之间共享。变量是否为static 应该没有区别,除非您在 web.xml 中多次声明了 servlet

标签: java jakarta-ee servlets


【解决方案1】:

没关系。 Java Servlet 规范将创建 servlet 的单个实例,并调用一次 init。无论您将值放在静态变量还是非静态变量中,它都将可供在该 servlet 上执行 doGet 请求的所有线程使用。

我倾向于使用静态,因为它有助于让程序员清楚地知道所有调用都有一个副本,并且静态显然不是给定请求所独有的。此外,如果您有任何需要,静态更容易从代码的其他部分(servlet 类本身之外)访问。

【讨论】:

    【解决方案2】:

    这取决于您希望如何更好地设计代码。我会建议使用非静态,因为考虑通过多个子类扩展这个类。

    将其作为成员变量将允许您为不同的子类设置不同的值。然而,静态的你不能。

    public class Superclass {
    
    protected static String sVariable = "static";
    protected String mVariable = "static";
    
     public void init () {
     }
    
    
      public void print(){
      System.out.println(this.getClass().getName() + ":sVariable" + sVariable);
      System.out.println(this.getClass().getName() + ":mVariable" + mVariable);
      }
    }
    
    public class SubClass extends Superclass {
    
     public void init () {
      sVariable = "subClassSVariable";
      mVariable = "subClassMVariable";
     }
    
    
     public static void main(String a[]){
      Superclass superC = new Superclass();
      SubClass subC = new SubClass();
    
      superC.init();
      subC.init();
    
      superC.print();
      subC.print();
      }
    }
    

    上面代码的输出是:

    com.ramesh.Superclass:sVariablesubClassSVariable
    com.ramesh.Superclass:mVariablestatic
    com.ramesh.SubClass:sVariablesubClassSVariable
    com.ramesh.SubClass:mVariablesubClassMVariable
    

    【讨论】:

      猜你喜欢
      • 2020-04-08
      • 2012-10-27
      • 2018-04-25
      • 2020-09-11
      • 2011-09-14
      • 2013-07-26
      • 2016-08-15
      • 1970-01-01
      • 2021-01-27
      相关资源
      最近更新 更多