启动时,我在 Glassfish 3.1 上遇到以下严重错误:
The servlet 'MyInheritingServlet' has implementation 'com.mycompany.MyInheritingServlet' in xml. It does not match with 'com.mycompany.MyBaseServlet' from annotation @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 会发出此错误吗?
谢谢!
最佳答案
问题在于您的 MyInheritingServlet
正在扩展 MyBaseServlet
。
因为MyInheritingServlet
继承了一切,所以它也继承了MyBaseServlet
的@WebServlet
注释。所以它看起来类似于:
@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 :
Classes annotated with @WebServlet must extend the javax.servlet.http.HttpServlet class.
关于java - Glassfish 3.1 上的 @WebServlet 映射错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28928275/