如何在webapp中使用org.eclipse.jetty.server.Request?

时间:2015-04-05 20:15:47

标签: maven jetty classpath maven-jetty-plugin jetty-9

在我的ServletFilter中,我想使用HttpServletRequest实现中公开的特定jetty API。

我是这样推出的:

final Request jettyRequest = Request.getBaseRequest(request)

如果我想避免ClassNotFoundException,我必须将jetty-server工件添加到我的maven依赖项中。但是,如果我这样做,getBaseRequest返回null,因为'request instanceof Request'返回false而不是true。

这肯定是由于jetty和应用程序类加载器之间的冲突,因为它们都加载了'org.eclipse.jetty.server.Request'类。我尝试了几种配置,但是如果没有在WEB-INF / lib中添加依赖项,我就无法将Request类暴露给我的webapp,这会导致类路径问题。

我的应用程序是使用“mvn jetty:run-forked”启动的,并且配置如下:

    <plugin>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-maven-plugin</artifactId>
        <version>${jetty-version}</version>
        <configuration>
            <webAppSourceDirectory>${project.build.directory}/${project.name}</webAppSourceDirectory>
            <systemProperties>
                <force>true</force>
            </systemProperties>
            <scanIntervalSeconds>10</scanIntervalSeconds>
            <webAppConfig>
                <contextPath>/</contextPath>
            </webAppConfig>
            <jettyXml>../jetty.xml,../jetty-ssl.xml,../jetty-https.xml</jettyXml>
            <jvmArgs>-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -Xbootclasspath/p:${settings.localRepository}/org/mortbay/jetty/alpn/alpn-boot/${alpn-version}/alpn-boot-${alpn-version}.jar</jvmArgs>
        </configuration>
    </plugin>

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

我通过添加包含以下内容的WebAppContext配置文件来修复此问题:

<Configure class="org.eclipse.jetty.webapp.WebAppContext">
    <Set name="parentLoaderPriority">true</Set>
</Configure>

该文件必须在jetty-maven-plugin中引用,如:

<contextXml>../jetty-context.xml</contextXml>