проблема с развертыванием с несколькими шаблонами URL-адресов?

У меня есть приложение, развернутое на Tomcat с сервлетом версии 2.4, и оно прекрасно работает.

Когда я попытался развернуть то же приложение в websphere, развертывание не удалось. Я обнаружил, что проблема возникает из-за нескольких шаблонов URL.

пример кода: -

<filter> 
      <filter-name>ABCD</filter-name> 
      <filter-class>com.x.y.filters.ABCD</filter-class> 
</filter> 
<filter-mapping> 
      <filter-name>ABCD</filter-name>
      <url-pattern>/A/*</url-pattern> 
      <url-pattern>/B/*</url-pattern> 
      <url-pattern>/C/*</url-pattern> 
      <url-pattern>*.jsp</url-pattern> 
</filter-mapping>

Итак, мой вопрос в том, почему сервлет версии 2.4 не работает с websphere (ПРИМЕЧАНИЕ: если я использую 3.0, он работает). Насколько я понимаю, версия сервлета зависит от того, что мы развертываем.

Я использую websphere 8, который поддерживает версии сервлетов 3.0 и ниже.

Пожалуйста, помогите мне лучше понять.


person Madhuprathap    schedule 14.04.2014    source источник
comment
какую ошибку вы получаете?   -  person Angelo Immediata    schedule 14.04.2014
comment
В этом случае он не должен работать и с сервером приложений tomcat. Но это работает. Есть ли связь с сервером приложений ??   -  person Madhuprathap    schedule 14.04.2014
comment
@Madhuprathap, какую ошибку вы получаете?   -  person ᄂ ᄀ    schedule 14.04.2014


Ответы (1)


У вас должно быть индивидуальное сопоставление фильтров для каждого шаблона URL:

<filter-mapping>
   <filter-name>ABCD</filter-name>
   <url-pattern>/A/*</url-pattern>
</filter-mapping>    

<filter-mapping>
   <filter-name>ABCD</filter-name>
   <url-pattern>/B/*</url-pattern>
</filter-mapping>    

Спецификация сервлета 2.4 определяет:

  <xsd:choice>
   <xsd:element name="url-pattern"
         type="j2ee:url-patternType"/>
   <xsd:element name="servlet-name"
         type="j2ee:servlet-nameType"/>
  </xsd:choice>

В Servlet 2.5 появилась поддержка множественных повторов, поэтому он работает в сервлете 3.0 для вас.

Tomcat 6 поддерживает спецификацию сервлетов 2.5. Вопрос в том, почему в нем работает множественное отображение фильтров, когда web.xml говорит, что это приложение версии 2.4. IMHO это специфическая "доработка" производителя. Они не выполняют контракт спецификации сервлета. С другой стороны, это не так, потому что ваш web.xml недействителен. Решили проигнорировать указанную версию. WebSphere делает то, что должен - отклоняет ваш недействительный web.xml.

person Leos Literak    schedule 14.04.2014
comment
В этом случае он не должен работать и с сервером приложений tomcat. Но это работает. Есть ли связь с сервером приложений ?? - person Madhuprathap; 14.04.2014
comment
Какая версия кота? Это также может зависеть от атрибута версии в web.xml. Как выглядит запуск web.xml? - person Leos Literak; 14.04.2014
comment
‹Веб-приложение xmlns = java.sun.com/xml/ns/j2ee xmlns : xsi = w3.org/2001/XMLSchema-instance xsi: schemaLocation = java.sun.com/xml/ns/j2ee/web-app_2_4.xsd version = 2.4 ›то же самое работает в tomcat и не работает в webshpere. webshpere версии 8, Apache Tomcat версии 6.0.29 - person Madhuprathap; 14.04.2014
comment
См. tomcat.apache.org/whichversion.html. Tomcat 6 поддерживает спецификацию сервлетов 2.5. Вопрос в том, почему он поддерживает многократное использование сопоставления фильтров, когда в web.xml указано, что это версия 2.4. ИМХО, это улучшение конкретного производителя. Они не выполняют контракт со спецификациями. С другой стороны, вы тоже этого не делаете (ваш web.xml недействителен). Они хотят быть умными и игнорировать указанную версию. WebSphere делает то, что должен - отклоняет ваш недействительный файл web.xml. - person Leos Literak; 14.04.2014