我正在尝试使用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>
答案 0 :(得分:2)
缺少的javax.servlet.AsyncListener
课程是Servlet Spec 3.0的一部分,这是有道理的,因为Jetty 9.0.x follows that spec。
也许您使用的是旧版Tomcat? Tomcat版本prior to 7.0.x没有实现这一点,在这种情况下你遇到了问题。