1

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

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

(static?) int small;

init()
{
    small = 5:    
}

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

2 回答 2

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
于 2013-04-01T07:06:04.827 回答
0

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

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

于 2013-04-01T00:34:49.453 回答