@WebServlet标注不认可; init不会运行 [英] @WebServlet annotation not recognized; init doesn't run
问题描述
我想学习的注解。我现在有一个运行的init()当应用程序在Tomcat中启动web应用程序。
以下code工作...
web.xml中:
<?XML版本=1.0编码=UTF-8&GT?;
< web应用程序的xmlns =http://java.sun.com/xml/ns/javaee
XMLNS:XSI =http://www.w3.org/2001/XMLSchema-instance
XSI:的schemaLocation =http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd
版本=3.0> <&servlet的GT;
< servlet的名称>&MainServlet LT; / servlet的名称>
<的servlet类> com.company.Main< / servlet的类>
&所述;负载上启动→1&下; /负载上启动>
< / servlet的>
< / web-app的>
Main.java
进口java.io.IOException异常;
导入的javax.servlet。*;
进口javax.servlet.annotation.WebServlet;// @ WebServlet(NAME =MainServlet,值=/ main.jsp中,loadOnStartup = 1)
公共类主要扩展GenericServlet的{ 公众的Main(){} @覆盖
公共无效的init(){
的System.out.println(你好!);
} @覆盖
公共无效的destroy(){
的System.out.println(再见!);
} @覆盖
公共无效服务(ServletRequest中REQ,ServletResponse的RES)抛出了ServletException,IOException异常{}
}
然而,当我取消@WebServlet标注并注释掉在web.xml中的servlet条目,init方法将不能运行。
我失去了一些东西明显?
在情况下,这将帮助,这是我的pom.xml:
<项目的xmlns =http://maven.apache.org/POM/4.0.0的xmlns:XSI =http://www.w3.org/2001 / XML模式实例
XSI:的schemaLocation =http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd\">
< modelVersion> 4.0.0< / modelVersion>
<&的groupId GT; ...< /的groupId>
<&的artifactId GT; ...< / artifactId的>
<包装和GT;战争与LT; /包装>
<&版GT; 1.0-SNAPSHOT< /版本>
<名称>名称和LT; /名称>
&LT; URL&GT; HTTP://maven.apache.org< / URL&GT;
&LT;建立&GT;
&LT;&插件GT;
&LT;&插件GT;
&LT;&的groupId GT; org.apache.maven.plugins&LT; /的groupId&GT;
&LT;&的artifactId GT; Maven的编译器插件&LT; / artifactId的&GT;
&LT;&版GT; 2.0.2&LT; /版本&GT;
&LT;结构&gt;
&lt;信源&GT; 1.6 LT; /源&GT;
&lt;目标&GT; 1.6 LT; /目标与GT;
&LT; /结构&gt;
&LT; /插件&GT;
&LT; /插件&GT;
&LT; /构建&GT;
&LT;依赖和GT;
&LT;&依赖性GT;
&LT;&的groupId GT;的JUnit&LT; /的groupId&GT;
&LT;&的artifactId GT;的JUnit&LT; / artifactId的&GT;
&LT;&版GT; 3.8.1&LT; /版本&GT;
&LT;&范围GT;试验&LT; /&范围GT;
&LT; /依赖性&GT; &LT;&依赖性GT;
&LT;&的groupId GT; org.springframework&LT; /的groupId&GT;
&LT;&的artifactId GT;弹簧芯LT; / artifactId的&GT;
&LT;&版GT; 3.0.5.RELEASE&LT; /版本&GT;
&LT; /依赖性&GT; &LT;&依赖性GT;
&LT;&的groupId GT; org.springframework&LT; /的groupId&GT;
&LT;&的artifactId GT;春-TX&LT; / artifactId的&GT;
&LT;&版GT; 3.0.5.RELEASE&LT; /版本&GT;
&LT; /依赖性&GT; &LT;&依赖性GT;
&LT;&的groupId GT;&org.hibernate作为LT; /的groupId&GT;
&LT;&的artifactId GT;休眠芯&LT; / artifactId的&GT;
&LT;&版GT; 3.6.6.Final&LT; /版本&GT;
&LT; /依赖性&GT; &LT;&依赖性GT;
&LT;&的groupId GT;&org.hibernate作为LT; /的groupId&GT;
&LT;&的artifactId GT;休眠的注解和LT; / artifactId的&GT;
&LT;&版GT; 3.5.6决赛&LT; /版本&GT;
&LT; /依赖性&GT; &LT;&依赖性GT;
&LT;&的groupId GT;&的javax LT; /的groupId&GT;
&LT;&的artifactId GT;的JavaEE的web-API&LT; / artifactId的&GT;
&LT;&版GT; 6.0&LT; /版本&GT;
&LT;&范围GT;及提供LT; /&范围GT;
&LT; /依赖性&GT;
&LT; /依赖和GT;
&LT; /项目&GT;
请确保你是在一个Servlet 3.0容器运行 - Tomcat 7的,例如(Tomcat的6不支持的servlet 3.0)
然后尝试指定&LT; web应用程序的元数据完成=FALSE/&GT;
- 它应该是默认为false,但尝试
I'm trying to learn annotations. I currently have a webapp that runs an init() when the app is started in Tomcat.
The following code works...
web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<servlet>
<servlet-name>MainServlet</servlet-name>
<servlet-class>com.company.Main</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
</web-app>
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 { }
}
However, when I uncomment the @WebServlet annotation and comment out the servlet entry in web.xml, the init method doesn't run.
Am I missing something obvious?
In case this will help, this is my pom.xml:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>...</groupId>
<artifactId>...</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>Name</name>
<url>http://maven.apache.org</url>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.0.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>3.0.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>3.0.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>3.6.6.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-annotations</artifactId>
<version>3.5.6-Final</version>
</dependency>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-web-api</artifactId>
<version>6.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
</project>
Make sure you are running in a servlet 3.0 container - tomcat 7, for example (tomcat 6 does not support servlet 3.0)
Then try specifying <web-app metadata-complete="false" />
- it should be false by default, but try it.
这篇关于@WebServlet标注不认可; init不会运行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!