【发布时间】: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 映射到 <Tomcat Context path>/*,如上面的 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,也没有在<Context> 中定义路径,所以它们不相关。
当我将此 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