@WebServlet注释无法识别; init不运行

我正在努力学习注释。 我目前有一个在Tomcat中启动应用程序时运行init()的webapp。

以下代码有效……

web.xml中:

   MainServlet com.company.Main 1   

Main.java:

 import java.io.IOException; import javax.servlet.*; import javax.servlet.annotation.WebServlet; //@WebServlet(name="MainServlet", value="/main.jsp", loadOnStartup=1) public class Main extends GenericServlet { public Main() { } @Override public void init() { System.out.println("Hello!"); } @Override public void destroy() { System.out.println("Bye!"); } @Override public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { } } 

但是,当我取消注释@WebServlet注释并注释掉web.xml中的servlet条目时,init方法不会运行。

我错过了一些明显的东西吗

如果这会有帮助,这是我的pom.xml:

  4.0.0 ... ... war 1.0-SNAPSHOT Name http://maven.apache.org    org.apache.maven.plugins maven-compiler-plugin 2.0.2  1.6 1.6       junit junit 3.8.1 test   org.springframework spring-core 3.0.5.RELEASE   org.springframework spring-tx 3.0.5.RELEASE   org.hibernate hibernate-core 3.6.6.Final   org.hibernate hibernate-annotations 3.5.6-Final   javax javaee-web-api 6.0 provided    

确保您在servlet 3.0容器中运行 – 例如tomcat 7(tomcat 6不支持servlet 3.0)

然后尝试指定 – 默认情况下它应该为false,但请尝试一下。

您的应用程序可能具有旧格式的web.xml,从而使JBoss忽略任何带注释的类。 所以如果你的web.xml看起来像:

   Archetype Created Web Application  

然后将其更改为:

  Archetype Created Web Application  

这将确保JBoss再次作为servlet 3.0处理战争。

根据Servlet 3.0规范 ,使用@WebServlet注释的类必须扩展HttpServlet 。 这可能意味着您的GenericServlet不会这样做。