目前我们有一个带有 Spring MVC DispatcherServlet 和两个 CXFServlet 的 Java webapp。 DispatcherServlet 是默认的servlet(映射/
),一个CXFServlet 映射到/api/*
,另一个映射到/services/*
。
困扰我的是,似乎不可能有 1 个 CXFServlet 托管 2 个服务,一个在 /api/v0
上,一个在 /services/myService
上,没有将 /*
映射到 CXFServlet。如果这是可能的,它将节省另一个 servlet 实例的初始化时间、配置麻烦和内存需求。
所以基本上,我的问题是,是否有人知道一种方法可以在 1 个 CXFServlet 中的 2 个 URL 上托管 2 个 CXF 服务,没有通用的基本/根 URL,最好使用 Spring 命名空间配置,无需映射 /*
到 CXFServlet?
最佳答案
invoke
CXF ServletController 的方法第一个电话 HttpServletRequest#getPathInfo
,它返回请求的 URL 的一部分没有servlet 的url-pattern
.此调用的结果随后用于通过调用 DestinationRegistry#getDestinationForPath
来匹配任何已定义的服务。 .因此,目前不可能使用包含 servlet 部分的路径让 CXF 匹配服务 — CXF 从不调用 HttpServletRequest#getServletPath
这是需要的。
请注意 base-address
可以在 servlet 的初始化参数 (<init-param>
) 中设置的值只会影响 CXF 显示 的任何 URL,因为 ServletController#getBaseURL
在服务调用期间不使用使用此值的方法。
关于java - CXF 和多个 servlet 映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14205947/