java - Glassfish 3.1 上的 @WebServlet 映射错误

标签 java jakarta-ee annotations glassfish

启动时,我在 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/

相关文章:

java - 我无法使用java中的Keylistener让这个形状移动

java - 在 Java 中生成 3 字节(0x800 到 0xffff)UTF-8 编码

jquery - 如何在网页上创建 float 搜索栏

java - 使用 Active Directory 在 Java 平台中进行单点登录 (SSO)

Java Spring有一种方法可以扩展@Scheduled来读取文件

java - BigDecimal.ROUND_UP 的问题

java - 通过标记分割字符串?

java.lang.NoClassDefFoundError : javax/el/ValueExpression in jSTL using Spring-MVC

java - 当在类上进行注释时,如何使注释在每个方法上都起作用,例如@ResponseBody

java - 如何创建单个注释在 Java 中接受多个值