2011-08-11 4 views
7

주석을 배우려고합니다. 현재 Tomcat에서 응용 프로그램을 시작할 때 init()을 실행하는 webapp가 있습니다.@WebServlet 주석이 인식되지 않습니다. 초기화가 실행되지 않습니다.

다음 코드는 작동 ...

의 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 { } 
} 

, 나는 @WebServlet 주석의 주석과 주석 때 web.xml의 서블릿 항목에서 init 메소드가 실행되지 않습니다.

나는 분명한 뭔가를 놓치고 있습니까?

이 도움이 될 경우,이 내 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> 
+0

'/ main.jsp'로 이동할 때'init()'메소드가 실행됩니까? – axtavt

+1

아니요, 서블릿을 컨테이너에 등록하지 않았습니다. 나는 HttpServlet을 확장하는 몇 가지 다른 서블릿을 가지고 있으며, 내용을 가지고있는 서비스 메소드도 실행되지 않는다. – Custard

답변

16

당신은 서블릿 3.0 컨테이너에서 실행하고 있는지 확인 - 톰캣 (7), (예를 들어, 바람둥이 6 서블릿을 지원하지 않습니다 3.0)

그런 다음 <web-app metadata-complete="false" />을 지정하십시오. 기본적으로 false 여야하지만 시도하십시오.

+0

감사 Bozho는, 지금 일하고있어 :) 나는 또한 최대 절전 모드가 포함되는 여러 버전을 중지하는 데 몇 종속성을 변경했다 : 이 추가 ... : org.springframework 스프링 웹 .. .and이 : org.springframework 봄 ORM 제거 : org.hibernate 최대 절전 모드 - 주석 Custard

+0

정확히 무엇이 문제였습니까? 서블릿 컨테이너 또는 메타 데이터 - 완료? – Bozho

+0

NetBeans의 이전 버전과 번들로 묶인 Tomcat 6을 사용하고있었습니다. 나는 이제 NB 7.0.1/Tomcat 7을 가지고있다. 당신이 말했듯이, 3.0 서블릿 컨테이너를 가지고있다. 필자는 메타 데이터 완성 값을 지정할 필요가 없었습니다. – Custard

0

Servlet 3.0 spec에 따르면 @WebServlet 주석을 사용하는 클래스는 HttpServlet까지 확장되어야합니다. 즉, 귀하의 GenericServlet은 그럴 수 없습니다.

8

애플리케이션에 이전 형식의 web.xml이있을 수 있으므로 JBoss는 주석이 달린 클래스를 무시합니다. 당신의 web.xml의 모습한다면이 확실히 보스 다시 서블릿 3.0과 전쟁을 처리 할 것입니다

<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"> 
    <display-name>Archetype Created Web Application</display-name> 
</web-app> 

:

<!DOCTYPE web-app PUBLIC 
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 
"http://java.sun.com/dtd/web-app_2_3.dtd" > 
<web-app> 
    <display-name>Archetype Created Web Application</display-name> 
</web-app> 

다음으로 변경합니다.

관련 문제