我在启动时在Glassfish 3.1上收到以下严重错误:
servlet' MyInheritingServlet'有实施 ' com.mycompany.MyInheritingServlet'在xml中。确实如此 与' com.mycompany.MyBaseServlet'不匹配 来自注释@WebServlet。
这是我代码中的一个片段:
@WebServlet(name = "MyInheritingServlet", urlPatterns = "/MyInheritingServlet")
public class MyInheritingServlet extends MyBaseServlet {
// implementation & overrides here ....
}
@WebServlet(name = "MyBaseServlet", urlPatterns = "/MyBaseServlet")
public class MyBaseServlet extends HttpServlet {
// implementation & overrides here ....
}
有人可以解释为什么Glassfish会发出此错误吗?
谢谢!
答案 0 :(得分:0)
问题是您的MyInheritingServlet
正在延长MyBaseServlet
。
由于MyInheritingServlet
继承了所有内容,因此它还会从@WebServlet
继承MyBaseServlet
注释。所以它看起来类似于:
@WebServlet(name = "MyInheritingServlet", urlPatterns = "/MyInheritingServlet")
@WebServlet(name = "MyBaseServlet", urlPatterns = "/MyBaseServlet")
public class MyInheritingServlet extends MyBaseServlet {
// implementation & overrides here ....
}
这似乎混淆了Glassfish 3.1中的实现。但它似乎没有Glassfish 4.1中的错误消息。
来自The Java EE 6 Tutorial - Chapter 10 Java Servlet Technology:
使用@WebServlet注释的类必须扩展 javax.servlet.http.HttpServlet类。