【发布时间】:2014-03-31 19:13:13
【问题描述】:
我正在尝试使用jetty-servlets 库中提供的GZipFilter servlet。我的网络应用程序在 Tomcat 而不是 Jetty 上运行。我知道 Jetty 是另一个 servlet 引擎,但我应该能够使用单个组件。
我使用maven 来构建我的应用程序。每当我在 pom 中包含 jetty-servlets 时,我的 Web 应用程序都会拒绝启动,在 web.xml 中声明 GzipFilter 时失败。
报错如下,
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 我的 sn-p 看起来像,
<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 我的 sn-p 看起来像,
<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>
【问题讨论】:
-
如果你没有列出
exclusion会发生什么?每当我使用 Maven 构建 servlet 时,我都会为servlet-api使用<scope>provided</scope>选项。见stackoverflow.com/questions/1979957/… 和stackoverflow.com/questions/2846673/…
标签: java maven tomcat jetty servlet-filters