在我的servlet中使用this.variable访问全局变量的目的是什么?

时间:2016-04-13 07:04:41

标签: java jsp oop servlets

这是示例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
 }
}
  
      
  1. 我们在将变量声明为受保护而非公开方面有什么好处?
  2.   
  3. 在servlet中使用this.variable访问变量的目的是什么?
  4.   
  5. 创建从中调用父构造函数的非参数化构造函数的目的是什么?有什么特别的原因或   这背后的结构逻辑?
  6.   

因为当一个servlet被Web服务器初始化时,它会被一个默认构造函数初始化,通过调用类似于上面显示的类似的super()来调用它的父构造函数 - 默认情况下。

  

4.有没有更好的方法在上面的servlet中初始化这些全局变量?

上述servlet中的全局变量包含

之类的值
  • 请求参数值和

  • 来自此servlet中的util方法的

2 个答案:

答案 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)

  1. public变量可以在任何地方访问,protected可以在同一个包中访问,或者如果你移出包,那么只能在子类中访问。

  2. this指当前对象。如果方法中的实例变量和局部变量具有相同的名称,则this.variable将指向实例变量。在您的代码中,您没有相同的变量名称,因此您可以在那里使用this省略。

  3. 由于构造函数中没有任何代码行,因此可以省略它。编译器会自动添加它。

  4. 当您从请求的参数初始化变量时,您必须使用doPostdoGet方法执行此操作。