如何在init和doget之间共享变量?

时间:2013-03-31 23:23:11

标签: java java-ee servlets

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

我想知道我是否应该使用静态或正常

声明此变量
(static?) int small;

init()
{
    small = 5:    
}

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

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

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

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