@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
不会这样做。