我发现this.getServletName()在构造函数中失败,但在方法中起作用。注意getServletName()由父级的父级提供。这是在Google App Engine中观察到的。 this.getServletName()采取这种方式的理由是什么?

(失败是一个空指针解引用,但我注意到this当时不为null,因此我认为null可能是JRE内部的东西。此外,正如预期的那样,排序this.myprivate = myconstructorarg;的赋值不会产生构造函数中的null取消引用。)

public class ResponderServlet extends HttpServlet
{
        public ResponderServlet()
        {
            String ss = this.getServletName();  // RUNTIME ERROR
        }

        public void doMethod(HttpServletRequest req, HttpServletResponse resp)
          throws IOException
        {
            String ss = this.getServletName();  // WORKS WELL
        }
}

最佳答案

Web容器调用getServletName()方法后,init(config)方法将起作用。您应该将初始化逻辑放在那里而不是构造函数中。例如。:

public void init(ServletConfig config) {
    super.init(config);
    String ss = this.getServletName();
    // put your logic here instead of constructor
}

10-08 02:01