2011-11-04 34 views
7

我想在單個web.xml中運行兩個Servlet類,但它不工作,每個servlet類獨立工作。在單個web.xml中添加多個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?

+0

該servlet聲明缺少你的「春天-WS」的servlet – r0ast3d

回答

5

這是行不通的。映射在/*上的那個超越全部請求。您需要將它映射到/,以便它只會攔截未與所有其他現有servlet(包括隱式映射到*.jsp以及所有「常規」靜態資源(如CSS/JS /圖像文件)的JSP servlet)匹配的請求!)。另請參閱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 /*

+0

我認爲映射將使用從最多到最不具體? –

+0

@Dave:如果有'/ *'則不行。這種映射只能用於過濾器。 – BalusC

+0

所以這被認爲與目錄匹配不同,比如/ foo/*? –

0

工作,你有一個映射/ *中越來越要求彈簧WS部分。你需要 想出不同的策略......嘗試在/ *映射之前放置/health.htm。

+2

規範的順序是不相關的。 –

2

我用我的項目Java配置和下面的代碼工作正常,爲了同樣的目的:

public class Initializer implements WebApplicationInitializer { 

    public void onStartup(ServletContext servletContext) throws ServletException { 
     AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext(); 
     ctx.register(ApplicationConfiguration.class); 
     ctx.setServletContext(servletContext); 

     MessageDispatcherServlet messageDispatcherServlet = new MessageDispatcherServlet(); 
     messageDispatcherServlet.setApplicationContext(ctx); 
     messageDispatcherServlet.setTransformWsdlLocations(true); 
     Dynamic dynamic = servletContext.addServlet("messageDispatcherServlet", messageDispatcherServlet); 
     dynamic.addMapping("/ws/*"); 
     dynamic.setLoadOnStartup(1); 

     dynamic = servletContext.addServlet("dispatcher", new DispatcherServlet(ctx)); 
     dynamic.addMapping("/"); 
     dynamic.setLoadOnStartup(1); 
    } 
} 
相關問題