我发现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
}