【问题标题】:deployment issue with multiple url-patterns?多个 url 模式的部署问题?
【发布时间】:2014-05-28 06:31:59
【问题描述】:

我有一个使用 servlet 2.4 版部署在 tomcat 上的应用程序,它运行良好。

当我尝试在 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>

所以我的问题是为什么 servlet 版本 2.4 不能与 websphere 一起工作(注意:如果我使用 3.0 它可以工作)。据我了解,特定于我们正在部署的 servlet 版本。

我正在使用支持 3.0 和更低 servlet 版本的 websphere 8。

请帮助我更好地理解。

【问题讨论】:

  • 您遇到了哪个错误?
  • 如果是这种情况,它也不应该与 tomcat appserver 一起使用。但它有效。和appserver有关系吗??
  • @Madhuprathap 你遇到了哪个错误?

标签: java servlets tomcat6 websphere-8


【解决方案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>    

Servlet 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 引入了对多次出现的支持,这就是它在 servlet 3.0 中为您工作的原因。

Tomcat 6 supports servlets 2.5 规范。问题是当web.xml 说它是2.4 版本应用程序时,为什么过滤器映射会在其中多次出现。恕我直言,这是供应商特定的“增强”。他们不履行 servlet 规范合同。另一方面,您也没有这样做,因为您的 web.xml 无效。他们决定忽略指定的版本。 WebSphere 做它应该做的——它拒绝你无效的web.xml

【讨论】:

  • 如果是这种情况,它也不应该与 tomcat appserver 一起使用。但它有效。和appserver有关系吗??
  • 哪个tomcat版本?它也可能取决于 web.xml 中的版本属性。 web.xml 的开头看起来如何?
  • 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
  • tomcat.apache.org/whichversion.html。 Tomcat 6 支持 servlets 2.5 规范。问题是为什么当 web.xml 说它是 2.4 版本时它支持过滤器映射的多次出现。恕我直言,这是供应商特定的“增强”。他们不履行规范合同。另一方面,您也没有(您的 web.xml 无效)。他们想变得聪明并忽略指定的版本。 WebSphere 尽其所能 - 它拒绝您的无效 web.xml。
猜你喜欢
  • 2017-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-17
  • 2021-03-29
  • 2011-11-11
相关资源
最近更新 更多