HOWTO использовать GZipFilter из Jetty-сервлетов в веб-приложении Tomcat

1

Я пытаюсь использовать сервлет GZipFilter, предоставленный в libts jetty-servlets lib. Мое веб-приложение работает на Tomcat, а не на Jetty. Я знаю, что Jetty - это еще один механизм сервлетов, но я должен использовать отдельные компоненты.

Я использую maven для создания своего приложения. Всякий раз, когда я включаю 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>

Теги:
maven
tomcat
jetty
servlet-filters

1 ответ

2
Лучший ответ

Отсутствующий класс javax.servlet.AsyncListener является частью Servlet Spec 3.0, что имеет смысл, потому что Jetty 9.0.x следует этой спецификации. Возможно, вы используете более старую версию Tomcat? Версия Tomcat до 7.0.x не реализует это, и в этом случае у вас есть проблема.

См. Также этот вопрос.

  • 0
    О хорошо Я действительно использую Tomcat 6.0. Так нет ли способа, которым я могу использовать сервлеты в tomcat 6?
  • 0
    Вы можете использовать более старую версию Jetty, такую как 7.x. Я никогда не пробовал это все же. Ошибка, о которой вы сообщили, должна исчезнуть, но вы можете столкнуться с другой.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню