2011-11-04 18 views
7

1つのweb.xmlで2つのServletクラスを実行しようとしていますが、機能していないため、各サーブレットクラスは独立して動作します。複数のサーブレットを1つのweb.xmlに追加する

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> 

あなたは私がやっていることを間違って何かを把握することができれば私に知らせてください。

私は下のリンクを試してみましたが、それはあなたが要求を取得している春-WSセクションのための/ *マッピングを持っている私のため Can I use Spring MVC and Spring WS in one single application?

+0

サーブレット宣言が仕様の順序は関係ありません、あなたの「春-WS」サーブレット – r0ast3d

答えて

5

これはうまくいきません。 /*にマッピングされているものがすべての要求に追いついています。 *.jspに暗黙的にマップされているJSPサーブレットと、CSS/JS /イメージファイルのようなすべての「通常の」静的リソースを含む、他の既存のサーブレットと一致しないリクエストを傍受するだけで、/にマップする必要があります!)。 Difference between/and /* in servlet mapping url patternも参照してください。

静的リソースを処理できることが必要な場合は、/ws/*のようなより具体的なURLパターンにマップして、Filterを作成し、それに従ってリクエストURIを確認し、それに従って転送します。そのフィルタは、/*に安全にマッピングできます。より具体的なコード例については、この回答も参照してください:How to access static resources when mapping a global front controller servlet on /*

+0

私は、マッピングがほとんどのものから最小限のものまで使用されると考えましたか? –

+0

@Dave: '/ *'がある場合はありません。このようなマッピングはフィルタでのみ使用する必要があります。 – BalusC

+0

これは/ foo/*のようなディレクトリの一致とは異なると考えられますか? –

0

仕事doesntの。 には別の戦略が必要です.../*マッピングの前に/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); 
    } 
} 
関連する問題