这是示例servlet
public class XYZServlet extends HttpServlet {
public static final long serialVersionUID = 1L;
protected long a = -1;
protected String str = null;
protected responseJSON = null;
public XYZServlet() {
super();
}
protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
//initialization of global variables goes here
this.a = request.getParameter("serial_number");
this.str = this.utilMethod();
//and the rest of the code goes here
PrintWriter pout = new PrintWriter();
pout.write("Success!");
}
protected String utilMethod () {
//this returns some string after executiion
}
}
- 我们在将变量声明为受保护而非公开方面有什么好处?
- 在servlet中使用this.variable访问变量的目的是什么?
- 创建从中调用父构造函数的非参数化构造函数的目的是什么?有什么特别的原因或 这背后的结构逻辑?
醇>
因为当一个servlet被Web服务器初始化时,它会被一个默认构造函数初始化,通过调用类似于上面显示的类似的super()来调用它的父构造函数 - 默认情况下。
4.有没有更好的方法在上面的servlet中初始化这些全局变量?
上述servlet中的全局变量包含
之类的值请求参数值和
值
答案 0 :(得分:2)
正如已经评论过的,servlet中字段的使用是错误的;并发访问,servlet重用等。
一种重用的解决方案是提供一个可以在servlet中重用的简单POJO(普通的旧java对象)。该对象可以包含这些字段,并在doPost / doGet上创建。
class Util {
long a = -1;
String str = null;
responseJSON = null;
String someMethod();
}
protected void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
//initialization of pojo goes here
Util pojo = new Util();
pojo .a = request.getParameter("serial_number");
pojo .str = this.utilMethod();
.... pojo.someMethod();
//and the rest of the code goes here
PrintWriter pout = new PrintWriter();
pout.write("Success!");
}
protected String utilMethod () {
//this returns some string after executiion
}
答案 1 :(得分:1)
public
变量可以在任何地方访问,protected
可以在同一个包中访问,或者如果你移出包,那么只能在子类中访问。
this
指当前对象。如果方法中的实例变量和局部变量具有相同的名称,则this.variable将指向实例变量。在您的代码中,您没有相同的变量名称,因此您可以在那里使用this
省略。
由于构造函数中没有任何代码行,因此可以省略它。编译器会自动添加它。
当您从请求的参数初始化变量时,您必须使用doPost
或doGet
方法执行此操作。