在单个web.xml中添加多个servlet
我试图在一个web.xml中运行两个Servlet类但它不工作,每个servlet类独立工作正常。
web.xml
:
spring-ws org.springframework.ws.transport.http.MessageDispatcherServlet transformWsdlLocations true 2 spring-ws /* 240 contextConfigLocation /WEB-INF/spring-ws-servlet.xml /WEB-INF/health-page-servlet.xml org.springframework.web.context.ContextLoaderListener health-page org.springframework.web.servlet.DispatcherServlet 1 health-page /health.htm
如果你能解决我正在做的事情,请告诉我。
我尝试了下面的链接,但它对我不起作用我可以在一个应用程序中使用Spring MVC和Spring WS吗?
这不会起作用。 映射在/*
上的那个超过了所有请求。 您需要在/
上映射它,以便它只拦截与所有其他现有servlet不匹配的请求(包括隐式映射到*.jsp
的JSP servlet和所有“普通”静态资源,如CSS / JS /图像文件!)。 另请参阅servlet映射url模式中的/和/ *之间的差异 。
如果还需要能够提供静态资源,那么最好将其映射到更具体的URL模式,如/ws/*
并创建一个Filter
来检查请求URI,然后相应地转发。 该filter可以安全地映射到/*
。 有关更具体的代码示例,请参阅此答案: 如何在/ *上映射全局前端控制器servlet时访问静态资源 。
我在我的项目中使用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); } }
你有获得请求的spring-ws部分的/ *映射。 你需要提出一个不同的策略…尝试将/health.htm放在/ *映射之前。