我正在尝试在单个 web.xml 中运行两个 Servlet 类,但它不起作用,每个 servlet 类独立运行良好。
web.xml
:
<servlet>
<servlet-name>spring-ws</servlet-name>
<servlet-class>org.springframework.ws.transport.http.MessageDispatcherServlet</servlet-class>
<init-param>
<param-name>transformWsdlLocations</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring-ws</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>240</session-timeout>
</session-config>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring-ws-servlet.xml
/WEB-INF/health-page-servlet.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>health-page</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>health-page</servlet-name>
<url-pattern>/health.htm</url-pattern>
</servlet-mapping>
如果你能发现我做错了什么,请告诉我。
我尝试了以下链接,但它对我不起作用 Can I use Spring MVC and Spring WS in one single application?
最佳答案
这行不通。映射到 /*
上的那个超越所有请求。您需要将其映射到 /
相反,它只会拦截与所有其他现有 servlet 不匹配的请求(包括隐式映射到 *.jsp
的 JSP servlet 和所有“正常”静态资源,如 CSS/JS/图像文件!)。另见 Difference between / and /* in servlet mapping url pattern .
如果还需要能够提供静态资源,那么最好将其映射到更具体的 URL 模式,如 /ws/*
并创建一个 Filter
它检查请求 URI,然后相应地转发。该过滤器又可以安全地映射到 /*
上.另请参阅此答案以获取更具体的代码示例:How to access static resources when mapping a global front controller servlet on /* .
关于java - 在单个 web.xml 中添加多个 servlet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8016805/