2011-11-04 36 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); 
    } 
} 
相关问题