如何为Web应用与WebService设置不同的上下文路径?
配置方案
1. 调整web.xml中的Servlet映射
这是实现路径分离的核心步骤,分别为Axis、Spring MVC、JSF配置专属的URL映射规则:
Axis SOAP服务映射
将Axis核心Servlet绑定到/ws/*路径,确保所有WebService请求都转发至Axis处理:
<servlet> <servlet-name>AxisServlet</servlet-name> <servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>AxisServlet</servlet-name> <url-pattern>/ws/*</url-pattern> </servlet-mapping>
Spring MVC DispatcherServlet映射
把Spring的DispatcherServlet绑定到/web/*,负责处理WebApp的所有请求:
<servlet> <servlet-name>springDispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring-mvc-config.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springDispatcher</servlet-name> <url-pattern>/web/*</url-pattern> </servlet-mapping>
JSF FacesServlet映射
调整JSF的Servlet映射,使其仅处理/web/路径下的JSF页面请求:
<servlet> <servlet-name>FacesServlet</servlet-name> <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>FacesServlet</servlet-name> <url-pattern>/web/*.xhtml</url-pattern> </servlet-mapping>
2. 适配Spring MVC配置
在Spring MVC配置文件(如spring-mvc-config.xml)中,修正视图解析器的前缀,匹配/web/上下文的视图目录:
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/web/" /> <property name="suffix" value=".xhtml" /> </bean>
如果WebApp包含静态资源(CSS、JS、图片等),配置Spring MVC的资源映射规则:
<mvc:resources mapping="/web/resources/**" location="/WEB-INF/resources/" />
3. 调整JSF页面与导航配置
- JSF页面中的资源引用和跳转路径,需基于
/web/上下文,可通过EL表达式动态获取:
<link rel="stylesheet" href="#{request.contextPath}/web/resources/css/style.css" /> <h:button value="返回首页" outcome="/web/index.xhtml" />
- 在
faces-config.xml的导航规则中,目标视图路径需添加/web/前缀:
<navigation-rule> <from-view-id>/web/login.xhtml</from-view-id> <navigation-case> <from-outcome>success</from-outcome> <to-view-id>/web/home.xhtml</to-view-id> <redirect /> </navigation-case> </navigation-rule>
4. 验证配置结果
部署应用后,可通过以下路径验证:
- WebService WSDL:
http://localhost:8080/ws/[你的服务名]?wsdl - WebApp首页:
http://localhost:8080/web/index.xhtml
内容的提问来源于stack exchange,提问作者Homselan
相关产品推荐
相关产品推荐

