@WebServlet标注不认可; init不会运行 [英] @WebServlet annotation not recognized; init doesn't run

查看:159
本文介绍了@WebServlet标注不认可; init不会运行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想学习的注解。我现在有一个运行的init()当应用程序在Tomcat中启动web应用程序。

以下code工作...

web.xml中:

 <?XML版本=1.0编码=UTF-8&GT?;
< web应用程序的xmlns =htt​​p://java.sun.com/xml/ns/javaee
         XMLNS:XSI =htt​​p://www.w3.org/2001/XMLSchema-instance
         XSI:的schemaLocation =htt​​p://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 =htt​​p://maven.apache.org/POM/4.0.0的xmlns:XSI =htt​​p://www.w3.org/2001 / XML模式实例
  XSI:的schemaLocation =htt​​p://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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆