HOWTO使用jetty-servlets' Tomcat webapp中的GZipFilter

时间:2014-03-31 19:13:14

标签: java maven tomcat jetty servlet-filters

我正在尝试使用GZipFilter lib中提供的jetty-servlets servlet。我的网络应用程序在Tomcat而不是Jetty上运行。我知道Jetty是另一个servlet引擎,但我应该可以使用单个组件。

我使用maven来构建我的应用程序。每当我在我的pom中包含jetty-servlets时,我的网络应用程序就会拒绝启动,在GzipFilter中声明web.xml时失败。

错误如下,

Mar 31, 2014 3:03:32 PM org.apache.catalina.core.StandardContext filterStart SEVERE: Exception starting filter GzipFilter java.lang.NoClassDefFoundError: javax/servlet/AsyncListener at java.lang.Class.getDeclaredConstructors0(Native Method) at java.lang.Class.privateGetDeclaredConstructors(Class.java:2493) at java.lang.Class.getConstructor0(Class.java:2803) at java.lang.Class.newInstance(Class.java:345) at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:275)

我知道Jetty-Servlets依赖于servlets-api,因此我将其从maven中的依赖项中排除。

我的pom.xml片段看起来像,

<dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-servlets</artifactId> <version>9.1.0.M0</version> <exclusions> <exclusion> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> </exclusion> </exclusions> </dependency>

我的web.xml片段看起来像,

<filter> <filter-name>GzipFilter</filter-name> <filter-class>org.eclipse.jetty.servlets.GzipFilter</filter-class> <init-param> <param-name>mimeTypes</param-name> <param-value>text/html,text/plain,text/xml,application/xhtml+xml,text/css,application/javascript,image/svg+xml</param-value> </init-param> </filter> <filter-mapping> <filter-name>GzipFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>

1 个答案:

答案 0 :(得分:2)

缺少的javax.servlet.AsyncListener课程是Servlet Spec 3.0的一部分,这是有道理的,因为Jetty 9.0.x follows that spec。 也许您使用的是旧版Tomcat? Tomcat版本prior to 7.0.x没有实现这一点,在这种情况下你遇到了问题。

另见this question