Java 如何在init和doget之间共享变量?
在servlet中,我想在init和doget之间共享一个变量 我想知道我是应该用静态的还是普通的来声明这个变量Java 如何在init和doget之间共享变量?,java,jakarta-ee,servlets,Java,Jakarta Ee,Servlets,在servlet中,我想在init和doget之间共享一个变量 我想知道我是应该用静态的还是普通的来声明这个变量 (static?) int small; init() { small = 5: } doGet(final HttpServletRequest request, final HttpServletResponse response) { small } 没关系。Javaservlet规范将创建Servlet的单个实例,并调用init一次。无论您将该值
(static?) int small;
init()
{
small = 5:
}
doGet(final HttpServletRequest request, final HttpServletResponse response) {
small
}
没关系。Javaservlet规范将创建Servlet的单个实例,并调用init一次。无论您将该值放在静态变量还是非静态变量中,在该servlet上执行doGet请求的所有线程都可以使用该值
我倾向于使用静态,因为它有助于让程序员清楚地知道,所有调用都有一个单一副本,而静态显然不是给定请求的唯一副本。此外,如果您有任何需要,静态代码更容易从代码的其他部分(servlet类本身之外)访问。这取决于您希望如何更好地设计代码。我建议使用非静态,因为考虑通过多个子类扩展这个类 将其作为成员变量将允许您对不同的子类具有不同的值。然而,你不能
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
是否希望
small
在servlet的所有用户之间共享?或者您希望每个请求都有一个small
的实例吗?我想确保我理解这两种情况servlet规范说明在第一个请求之前调用init
方法。servlet的同一实例在所有请求中共享。除非您在web.xml中多次声明了servlet,否则变量是否为static不会有什么区别