【问题标题】:tomcat 7.0.56 windows (eclipse) trailing slash appended; tomcat 7.0.28 linux (deployed war) trailing slash not appended附加了tomcat 7.0.56 windows (eclipse) 斜杠; tomcat 7.0.28 linux(部署战争)未附加斜杠
【发布时间】:2014-11-19 10:41:26
【问题描述】:

我是配置 Tomcat 服务器、映射 Java Web 应用程序路径的新手。

我有一个使用以下 web.xml 文件的 Apache CXF Web 服务。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>KiiktatServices webszolgáltatás (Apache CXF)</display-name>
  <servlet>
    <description>Apache CXF Endpoint</description>
    <display-name>cxf</display-name>
    <servlet-name>cxf</servlet-name>
    <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
    <init-param>
      <param-name>static-welcome-file</param-name>
      <param-value>/services.html</param-value>
    </init-param>
    <init-param>
      <param-name>static-resources-list</param-name>
      <param-value>/services.html</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>cxf</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>
<!--   <servlet-mapping> -->
<!--     <servlet-name>cxf</servlet-name> -->
<!--     <url-pattern>/services/*</url-pattern> -->
<!--   </servlet-mapping> -->
<!--   <servlet-mapping> -->
<!--    <servlet-name>default</servlet-name> -->
<!--    <url-pattern>/*</url-pattern> -->
<!--   </servlet-mapping> -->
  <servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>/css/*</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>/js/*</url-pattern>
  </servlet-mapping>
  <session-config>
    <session-timeout>60</session-timeout>
  </session-config>
<!--    <welcome-file-list> -->
<!--        <welcome-file>services.html</welcome-file> -->
<!--    </welcome-file-list> -->
</web-app>

默认情况下,Apache CXF webservice 提供了一个统一的 webservices 描述页面 我需要将其更改为内容更丰富、样式更丰富的页面。 有可能向 CXF 提供 az init-param,它采用静态欢迎文件。 我将 CXF servlet 映射到 &lt;Tomcat Context path&gt;/*,如上面的 web.xml 代码部分所示。

我还有一些静态 CSS、JS 资源,我必须将其映射到 default servlet 才能使其工作,当我将其映射到 cxf servlet 时它不起作用。

当我在 Eclipse 中的 localhost Windows Tomcat 7.0.56 服务器上启动此组合时,它会在上下文路径的末尾附加一个斜杠,因此 services.html 完美地显示了 CSS、JS。

在此之后,我从项目中创建了一个 WAR。有一个 (WebContent/)META-INF/context.xml 捆绑到 WAR 中,但我在 conf/Catalina/localhost/{war.name}.xml 中也有一个单独的 context.xml(命名为 WAR 的名称),它优先于我引用数据库连接的捆绑的 context.xml,用于虚拟主机的目的。但是我没有定义 docBase,也没有在&lt;Context&gt; 中定义路径,所以它们不相关。

当我将此 WAR 部署到 Debian 上的 Tomcat-7.0.28 时,它不会将尾部斜杠放在路径的末尾。 services.html static-html-page 仍然显示,但 JS、CSS 已损坏。在我手动添加斜杠后,页面正确显示。

web.xml 中有注释部分,它们是另一个解决方案的一部分。在那里,我将 web 服务映射到 /services/*cxf servlet,而不是使用其内置的 static-welcome-file 初始化参数。另外,我将welcome-file 用于default servlet,并将默认servlet 映射到/*。结果是一样的,它在我的本地开发机器上放了斜杠,并且工作正常,但在 Linux Tomcat 上部署为 WAR 后没有放斜杠。

我已经为这个问题苦苦挣扎了好几天了。我知道有类似的问题,我在这里和其他地方搜索过但没有找到解决方案。

这里说如果我得到/*映射,那么Tomcat不会重定向,但它会在本地主机窗口上重定向...... Tomcat: not appending trailing "/" when finding a directory

你有什么想法吗?

【问题讨论】:

    标签: java eclipse web-services tomcat servlets


    【解决方案1】:

    如果您将某些内容映射到/*,然后将DefaultServlet 的映射更改为/ 以外的其他内容,您可能会破坏整个服务器。 DefaultServlet 处理诸如在涉及目录时添加尾部斜杠、解析欢迎文件等事情。通过让 cxf servlet 处理所有事情,您已经超越了该配置。

    我认为您在映射cxf servlet 时要更加小心。

    【讨论】:

    • 谢谢,我根据您的建议成功了。我将 cxf servlet 映射到 '/services/*' 的 url 模式,并将 DefaultServlet 映射到 '/'。如果将 cxf 映射到“/*”,并将 DefaultServlet 映射到“/”,它也可以工作,但我认为如果我不让 cxf 与静态资源路径混合,它会更干净。我现在不明白的是,为什么它在 Eclipse 中以预期的方式使用不正确的重叠映射?
    猜你喜欢
    • 2016-04-09
    • 1970-01-01
    • 2016-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-04
    • 2016-11-23
    • 1970-01-01
    相关资源
    最近更新 更多