我是配置 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/