如何在一个Spring应用程序中的web.xml中注册多个servlet

我想在我的Spring web.xml中定义两个servlet – 一个用于应用程序html / jsp页面,另一个用于将由外部应用程序调用的Web服务。 这是web.xml:

 myservlet org.springframework.web.servlet.DispatcherServlet 1   myservlet *.htm   contextConfigLocation WEB-INF/user-service-servlet.xml   user-webservice org.apache.cxf.transport.servlet.CXFServlet 1   user-webservice /UserService/*  

如果我有myservlet自己在文件中使用DispatcherServlet,它工作正常。 如果我的user-webservice带有context-param,那就是它的配置文件(user-service-servlet.xml),它可以正常工作。 但是,如果我同时在文件中,则myservlet不起作用,因为myservlet-servlet.xml文件未自动加载。 如果我删除了context-param,那么myservlet可以工作,但是user-webservice不能正常工作,因为它没有加载配置文件(user-service-servlet.xml)。

如何定义两个servlet并加载它们的两个配置文件?

正如在cxf-user邮件列表中的这个主题中所解释的那样,您可以将整个批次加载到根上下文中,而不是让CXFServlet从user-webservice-servlet.xml加载自己的spring上下文。 将现有的user-webservice-servlet.xml重命名为其他名称(例如user-webservice-beans.xml ),然后将contextConfigLocation参数更改为:

  myservlet org.springframework.web.servlet.DispatcherServlet 1   myservlet *.htm   contextConfigLocation  /WEB-INF/applicationContext.xml /WEB-INF/user-webservice-beans.xml    user-webservice org.apache.cxf.transport.servlet.CXFServlet 2   user-webservice /UserService/*  

使用这样的配置:

  contextConfigLocation /WEB-INF/applicationContext.xml   org.springframework.web.context.ContextLoaderListener   myservlet org.springframework.web.servlet.DispatcherServlet 1   user-webservice org.apache.cxf.transport.servlet.CXFServlet 2  

然后你需要三个文件:

  • applicationContext.xml中;
  • myservlet-servlet.xml中; 和
  • 用户Web服务 – servlet.xml中。

*-servlet.xml文件自动使用,每个文件都为该servlet创建一个应用程序上下文。

从Spring文档, 13.2。 DispatcherServlet :

在初始化DispatcherServlet ,框架将在Web应用程序的WEB-INF目录中查找名为[servlet-name] -servlet.xml的文件,并创建在那里定义的bean(覆盖用于定义的任何bean的定义)全球范围内的同名)。

我知道这有点旧,但简单的答案是两次出现都给出了相同的id,即两次。 这可能会混淆加载顺序。