2009-12-08 58 views
26

我想在我的Spring web.xml中定义两个servlet - 一个用于应用程序的html/jsp页面,另一个用于Web服务,它将被一个外用。这里是web.xml:如何在一个Spring应用程序的web.xml中注册多个servlet

<servlet> 
    <servlet-name>myservlet</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

<servlet-mapping> 
    <servlet-name>myservlet</servlet-name> 
    <url-pattern>*.htm</url-pattern> 
</servlet-mapping> 

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>WEB-INF/user-service-servlet.xml</param-value> 
</context-param> 

<servlet> 
    <servlet-name>user-webservice</servlet-name> 
    <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

<servlet-mapping> 
    <servlet-name>user-webservice</servlet-name> 
    <url-pattern>/UserService/*</url-pattern> 
</servlet-mapping> 

如果我有myservlet自己使用文件中的DispatcherServlet,它工作正常。如果我的user-webservice具有它的配置文件(user-service-servlet.xml)的上下文参数,那么它工作正常。但是,如果我有两个文件,那么myservlet不起作用,因为myservlet-servlet.xml文件不会自动加载。如果我删除上下文参数,那么myservlet可以工作,但用户web服务不起作用,因为它的配置文件(user-service-servlet.xml)未加载。

如何定义两个servlet并加载其两个配置文件?

回答

16

this thread了CXF用户邮件列表上解释,而不是让CXFServlet从user-webservice-servlet.xml加载自身的弹簧背景下,您可以在一大堆刚刚加载到根上下文。重命名现有user-webservice-servlet.xml一些其他的名称(例如user-webservice-beans.xml),那么你contextConfigLocation参数更改为类似:

<servlet> 
    <servlet-name>myservlet</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

<servlet-mapping> 
    <servlet-name>myservlet</servlet-name> 
    <url-pattern>*.htm</url-pattern> 
</servlet-mapping> 

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value> 
    /WEB-INF/applicationContext.xml 
    /WEB-INF/user-webservice-beans.xml 
    </param-value> 
</context-param> 

<servlet> 
    <servlet-name>user-webservice</servlet-name> 
    <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class> 
    <load-on-startup>2</load-on-startup> 
</servlet> 

<servlet-mapping> 
    <servlet-name>user-webservice</servlet-name> 
    <url-pattern>/UserService/*</url-pattern> 
</servlet-mapping> 
+1

如果使用单独的数据库和其他设置,两个servlet的上下文如何可以位于根上下文中?它们在一个文件中如何区分? – 2016-01-27 08:50:15

6

使用的配置是这样的:

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>/WEB-INF/applicationContext.xml</param-value> 
</context-param> 

<listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 

<servlet> 
    <servlet-name>myservlet</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

<servlet> 
    <servlet-name>user-webservice</servlet-name> 
    <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class> 
    <load-on-startup>2</load-on-startup> 
</servlet> 

,然后你需要三个文件:

  • applicationContext.xml中;
  • myservlet-servlet.xml;和
  • user-webservice-servlet.xml。

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

从Spring文档,13.2. The DispatcherServlet

该框架将,在DispatcherServlet的初始化 ,神色一 文件名为[servlet的名称] -servlet.xml后缀WEB-INF目录您的网络 应用程序,并创建在此定义的豆 (覆盖全球范围内使用 定义的所有豆的定义)。

+0

这没有帮助 - 我的应用程序中有这些文件,但是当我转到http:// localhost:8080/MyApp/index.jsp时,它显示页面,但是当我转到http:// localhost:8080/MyApp(没有结尾斜杠),它会启动用户web服务,但单击WSDL链接会显示“No services have been found”消息。也许我的问题是没有配置文件没有被加载,但映射到Web服务是不正确的。 – 2009-12-08 07:11:48

1

我知道这是一个有点老,但在很短的答案会是<时加载的启动>两事件已经给出了两次相同的ID。这可能会混淆加载顺序。

相关问题