我是配置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
你有什么想法吗?
答案 0 :(得分:1)
如果您将某些内容映射到/*
,然后将DefaultServlet
的映射更改为/
以外的其他内容,则可能会破坏整个服务器。 DefaultServlet
处理的事情包括在涉及目录时添加尾部斜杠,解析欢迎文件等等。通过让cxf
servlet处理所有内容,你已经使这种配置黯然失色。
我认为在映射cxf
servlet时需要更加谨慎。