tomcat 7.0.56 windows(eclipse)尾随斜杠附加; tomcat 7.0.28 linux(部署战争)尾随斜杠未附加

时间:2014-11-19 10:41:27

标签: java eclipse web-services tomcat servlets

我是配置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提供统一的Web服务描述页面 我需要更改为更具信息性,风格化的页面。 有可能为CXF提供az init-param,它接受一个static-welcome-file。 我将CXF servlet映射到<Tomcat Context path>/*,如上面的web.xml代码部分所示。

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

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

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

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

web.xml中有注释部分,这些部分是另一个解决方案的一部分。在那里,我将webservice映射到/services/*cxf servlet,而不使用其内置的static-welcome-file init-parameter。另外,我使用welcome-file作为default servlet,并将默认servlet映射到/*。结果是相同的,它在我的本地开发机器上放置了斜杠,并且在Linux Tomcat上部署为WAR之后正常工作但没有设置尾部斜杠。

我几天来一直在努力解决这个问题。我知道有类似的问题,我在这里和其他地方搜索但没有找到解决方案。

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

你有什么想法吗?

1 个答案:

答案 0 :(得分:1)

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

我认为在映射cxf servlet时需要更加谨慎。