3

我试图将 spring 与 JSF 集成,并在 web.xml 中添加了以下内容,

<listener>  
<listener-class>
   org.springframework.web.context.ContextLoaderListener
</listener-class>  
</listener>  

<listener> 
<listener-class>
 org.springframework.web.context.request.RequestContextListener
</listener-class>    
</listener> 

我还在 Eclipse 中的 tomcat 类路径中添加了 spring-web 和 common 日志记录

没有构建错误,但是在 tomcat 7 上运行时出现以下错误,

  java.lang.NoClassDefFoundError: javax/servlet/ServletContextListener
at java.lang.ClassLoader.findBootstrapClass(Native Method)
at java.lang.ClassLoader.findBootstrapClassOrNull(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)

   java.lang.NoClassDefFoundError: javax/servlet/ServletRequestListener
at java.lang.ClassLoader.findBootstrapClass(Native Method)
at java.lang.ClassLoader.findBootstrapClassOrNull(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)

这些是我的设置,

  • tomcat lib中有一个servlet-api jar

  • 在我的 Pom.xml 中,我给出了

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>2.5</version>
        <scope>compile</scope>
    </dependency> 
    
     and            
        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-api</artifactId>
            <version>6.0</version>
        </dependency> 
    

我也试过注释掉 pom.xml 中的条目,但也没有运气。任何帮助将不胜感激。

这是我的 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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>TimeTracker</groupId>
<artifactId>TimeTracker</artifactId>
<version>0.0.1-SNAPSHOT</version>

<repositories>
    <repository>
        <id>prime-repo</id>
        <name>PrimeFaces Maven Repository</name>
        <url>http://repository.primefaces.org</url>
    </repository>

    <repository>
<id>Java.Net</id>
<url>http://download.java.net/maven/2/</url>
 </repository>
</repositories>

<dependencies>
    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>1.3.2</version>
    </dependency>
    <dependency>
        <groupId>commons-fileupload</groupId>
        <artifactId>commons-fileupload</artifactId>
        <version>1.2.2</version>
    </dependency>

    <!-- J2ee -->

          <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-api</artifactId>
            <version>6.0</version>
             <scope>provided</scope> 
        </dependency> 

    <!-- Spring framework -->

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>3.2.3.RELEASE</version>
        <scope>provided</scope>
    </dependency> 

<!-- JSR-330 -->
     <dependency>
        <groupId>javax.inject</groupId>
        <artifactId>javax.inject</artifactId>
        <version>1</version>
    </dependency> 

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


    <!-- JSF -->
    <dependency>
        <groupId>com.sun.faces</groupId>
        <artifactId>jsf-api</artifactId>
        <version>2.1.13</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>com.sun.faces</groupId>
        <artifactId>jsf-impl</artifactId>
        <version>2.1.13</version>
        <scope>provided</scope>
    </dependency>

     <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
        <scope>provided</scope>
    </dependency> 

      <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>2.5</version>
        <scope>provided</scope>
    </dependency> 

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

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>2.5</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
        <scope>provided</scope>
    </dependency>
</dependencies>
<build>
    <sourceDirectory>src</sourceDirectory>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
            </configuration>
        </plugin>
    </plugins>
</build>

我注意到的另一件事是在部署期间复制的 jar 文件。我在 Eclipse 中的 tomcat 7 中运行该项目。这是部署程序集 /src WEB-INF/classes /WebContent / JSF 2.1 (Apache MyFaces 2.1.5) WEB-INF/lib 中的条目

可以吗?还是我还必须添加 Maven 依赖项?。但是在添加 Maven 依赖项时,项目和 Maven -> 项目更新上会出现错误标记。交叉错误和 maven 依赖项在更新时也会消失。嗯,我正在尝试将 JSF 与 spring 集成

谢谢,飞马座

4

2 回答 2

2

作为一种标准做法,您不应将任何与 servlet 相关的 jar 与您的 war 文件捆绑在一起,让您的应用服务器(在您的情况下是 tomcat)在运行时提供所需的类。

将范围更改为提供,再次捆绑您的战争文件并尝试部署。

    <scope>provided</scope>
于 2013-08-14T21:56:53.093 回答
1

servlet-api 是一个应该具有provided范围的依赖的经典示例,请参阅依赖机制简介

于 2013-08-14T18:41:01.443 回答