java - tomcat 7.0.56 windows (eclipse) 尾部附加斜杠; tomcat 7.0.28 linux(已部署的 war )未附加尾部斜杠

标签 java eclipse web-services tomcat servlets

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

我得到了一个使用以下 web.xml 文件的 Apache CXF 网络服务。

<?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 映射到 <Tomcat Context path>/*如上web.xml代码部分显示。

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

当我在 Eclipse 中的本地主机 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,也没有在 <Context> 中定义路径。的,所以它们不相关。

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

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

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

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

你有什么想法吗?

最佳答案

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

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

关于java - tomcat 7.0.56 windows (eclipse) 尾部附加斜杠; tomcat 7.0.28 linux(已部署的 war )未附加尾部斜杠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27014771/

相关文章:

java - Android应用程序数据应该存储在哪里?我应该如何写入文件?

java - 如何将分割数组的其余部分转换为java上的字符串?

web-services - CXF Web 服务错误 - javax.xml.ws.soap.SOAPFaultException : Unconnected sockets not implemented

web-services - 改善SOAP UI性能

javascript - 谷歌地点 ID 查找器

java - 获取动词的动名词

java - 如何舍入浮点精度,考虑它的大小?

java - Paypal OAuthTokenCredential 导致 java.security.AccessControlException : access denied ("java.lang.RuntimePermission" "createSecurityManager")

java - RecyclerView 的加载时间问题

java - 使用 Maven 和 Dagger 生成的类对 Eclipse 中的 ADT 不可见