0

Tomcat 7.0.29 で実行されている JSF 2.0 Web アプリケーションがあり、Servlet 3.0 アノテーションを使用しようとしましたが、init() メソッドに書き込まれたログが表示されないため、サーブレットは機能しませんでした。

同じ問題について多くの回答を読みましたが、まだ成功していません。

これは私のファイルがどのように見えるかです:

web.xml :

<?xml version="1.0" encoding="UTF-8"?>
<web-app metadata-complete="false"
    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>GestionCongesFeki</display-name>
  <welcome-file-list>
    <welcome-file>index.xhtml</welcome-file>
  </welcome-file-list>
  <servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.xhtml</url-pattern>
  </servlet-mapping>


<!--   <servlet> -->
<!--     <servlet-name>AjaxRelaisServlet</servlet-name> -->
<!--     <servlet-class>utils.AjaxRelaisServlet</servlet-class> -->
<!--     <load-on-startup>2</load-on-startup> -->
<!-- </servlet> -->
<!-- <servlet-mapping> -->
<!--     <servlet-name>AjaxRelaisServlet</servlet-name> -->
<!--     <url-pattern>/AjaxRelaisServlet/*</url-pattern> -->
<!-- </servlet-mapping> -->

</web-app>

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>esprit.pfe2013</groupId>
  <artifactId>GestionCongesFeki</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>GestionCongesFeki Maven Webapp</name>
  <url>http://maven.apache.org</url>

<repositories>
        <repository>
            <id>central</id>
            <name>Maven Repository Switchboard</name>
            <layout>default</layout>
            <url>http://repo1.maven.org/maven2</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>       
        <repository>
            <id>prime-repo</id>
            <name>Prime Repo</name>
            <url>http://repository.primefaces.org</url>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>central</id>
            <name>Maven Plugin Repository</name>
            <url>http://repo1.maven.org/maven2</url>
            <layout>default</layout>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
            <releases>
                <updatePolicy>never</updatePolicy>
            </releases>
        </pluginRepository>
    </pluginRepositories>

<!--   <repositories> -->
<!-- <repository> -->
<!--            <id>central</id> -->
<!--            <name>Central Repository</name> -->
<!--            <url>http://repo.maven.apache.org/maven2</url> -->
<!--            <layout>default</layout> -->
<!--            <snapshots> -->
<!--                <enabled>false</enabled> -->
<!--            </snapshots> -->
<!--        </repository> -->


<!--    </repositories> -->

    <dependencies>

         <dependency>
           <groupId>javax.servlet</groupId>
           <artifactId>javax.servlet-api</artifactId>
           <version>3.0.1</version>        
         </dependency>



        <!-- PrimeFaces -->
        <dependency>
            <groupId>org.primefaces</groupId>
            <artifactId>primefaces</artifactId>
            <version>3.4.1</version>
        </dependency>


        <!-- JSF 2 -->
        <dependency>
            <groupId>com.sun.faces</groupId>
            <artifactId>jsf-api</artifactId>
            <version>2.1.11</version>
        </dependency>
        <dependency>
            <groupId>com.sun.faces</groupId>
            <artifactId>jsf-impl</artifactId>
            <version>2.1.11</version>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
        <dependency>
            <groupId>taglibs</groupId>
            <artifactId>standard</artifactId>
            <version>1.1.2</version>
        </dependency>




        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.13</version>
        </dependency>


        <dependency>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-resources-plugin</artifactId>
    <version>2.4.3</version>
</dependency>






    </dependencies>
    <build>
    <finalName>GestionCongesFeki</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3.2</version>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                </configuration>
            </plugin>
        </plugins>
    </build>  

</project>

そしてサーブレット:

package utils;

import java.io.IOException;

import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class AjaxRelaisServlet
 */
@WebServlet("/AjaxRelaisServlet") 
public class AjaxRelaisServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public AjaxRelaisServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see Servlet#init(ServletConfig)
     */
    public void init(ServletConfig config) throws ServletException {
        System.out.println("This is AjaxRelaisServlet initialisaton !!!");
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
    }

}

実際、web.xml(コメント化されたコード)でサーブレットを宣言していたときは正常に機能していましたが、注釈を使用したときはそうではありませんでした。ところで、この問題が解決されたときに web.xml を取り除けるかどうか知りたいのですが、それなしで JSF サーブレットを宣言する方法がわかりません。

手伝ってくれてありがとう!

4

1 に答える 1

6

loadOnStartup=1この属性を@WebServletアノテーションに追加して、アプリの起動時にサーブレットが読み込まれるようにします。この属性は、 web.xml<load-on-startup/>にある要素に似ています。

    @WebServlet(name="AjaxRelaisServlet",loadOnStartup=1,urlPatterns={"/AjaxRelaisServlet"})

ハンマーを持っていると、すべての問題が釘のように見えます。

web.xmlを完全に置き換えるという問題については、注釈ベースのモデルでは現在実現できないことがいくつかあることに注意してください。たとえば、フィルターの順序付けは、注釈のみでは実現できません (AFAIK)。また、具体的な構成ドキュメントは自己文書化されていることに注意してください。システムのメンテナーは、web.xml を一目見ただけで、アプリで何が起こっているかを構成的に把握できます。注釈のみのアーキテクチャとは対照的です。システムのすべての部分の配線を理解するのは骨の折れる作業です。

于 2013-03-29T16:41:51.290 に答える