Java springmvcweb.xml';每个url映射的s DispatcherServlet实例

Java springmvcweb.xml';每个url映射的s DispatcherServlet实例,java,spring,jsp,spring-mvc,servlets,Java,Spring,Jsp,Spring Mvc,Servlets,Spring MVC web.xml有DispatcherServlet,它充当FrontController,我对Spring中Servlet的概念有点困惑,因为我知道web容器中只有一个Servlet实例,多个线程在服务()上操作方法,但在Spring的情况下,每个url映射只创建一个DispatcherServlet实例,或者我们有多个DispatcherServlet实例 例: 映射到jsp调用: <servlet> <servlet-name>dispatc

Spring MVC web.xml有DispatcherServlet,它充当FrontController,我对Spring中Servlet的概念有点困惑,因为我知道web容器中只有一个Servlet实例,多个线程在服务()上操作方法,但在Spring的情况下,每个url映射只创建一个DispatcherServlet实例,或者我们有多个DispatcherServlet实例

例: 映射到jsp调用:

<servlet>
  <servlet-name>dispatcherServlet</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <init-param>
     <param-name>contextConfigLocation</param-name>
     <param-value>/WEB-INF/config/servlet-config-jsp.xml</param-value>
  </init-param>
</servlet>

<servlet-mapping>
  <servlet-name>dispatcherServlet</servlet-name>
  <url-pattern>*.jsp</url-pattern>
</servlet-mapping>

调度员服务
org.springframework.web.servlet.DispatcherServlet
上下文配置位置
/WEB-INF/config/servlet-config-jsp.xml
调度员服务
*.jsp
映射到HTML调用:

<servlet>
  <servlet-name>dispatcherServlet</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <init-param>
     <param-name>contextConfigLocation</param-name>
     <param-value>/WEB-INF/config/servlet-config-html.xml</param-value>
  </init-param>
</servlet>

<servlet-mapping>
  <servlet-name>dispatcherServlet</servlet-name>
  <url-pattern>*.html</url-pattern>
</servlet-mapping>

调度员服务
org.springframework.web.servlet.DispatcherServlet
上下文配置位置
/WEB-INF/config/servlet-config-html.xml
调度员服务
*.html

只需在上面的示例中创建多少DispatcherServlet实例来映射html和jsp调用。

是的,就像任何普通Java servlet一样,您可以通过为每个
声明分配不同的servlet名称来定义同一servlet类的两个实例

<servlet>
    <servlet-name>jspDispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    ...
</servlet>
<servlet>
    <servlet-name>htmlDispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    ...
</servlet>

jspDispatcherServlet
org.springframework.web.servlet.DispatcherServlet
...
htmlDispatcherServlet
org.springframework.web.servlet.DispatcherServlet
...
中还明确指出,您可以在一个web应用程序中安全地定义多个
DispatcherServlet
实例

web应用程序可以定义任意数量的
Dispatcherservlet
。每个 servlet将在自己的命名空间中运行,加载自己的应用程序 具有映射、处理程序等的上下文。仅根应用程序 由
ContextLoaderListener加载的上下文(如果有)将被共享


因此,只要您将两个servlet映射到两个不同的URL模式,您就一切都好。

是的,就像任何普通Java servlet一样,您可以通过为每个
声明分配不同的servlet名称来定义同一servlet类的两个实例

<servlet>
    <servlet-name>jspDispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    ...
</servlet>
<servlet>
    <servlet-name>htmlDispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    ...
</servlet>

jspDispatcherServlet
org.springframework.web.servlet.DispatcherServlet
...
htmlDispatcherServlet
org.springframework.web.servlet.DispatcherServlet
...
中还明确指出,您可以在一个web应用程序中安全地定义多个
DispatcherServlet
实例

web应用程序可以定义任意数量的
Dispatcherservlet
。每个 servlet将在自己的命名空间中运行,加载自己的应用程序 具有映射、处理程序等的上下文。仅根应用程序 由
ContextLoaderListener加载的上下文(如果有)将被共享


因此,只要您将两个servlet映射到两个不同的URL模式,您就一切正常。

在这些场景中,每个DispatcherServlet何时会创建Spring WebApplicationContext,谁负责为每个DispatcherServetSpring创建WebApplicationContext对象,在容器中创建的每个DispatcherServlet都关联一个
WebApplicationContext
。您没有收到我的问题,我问的是当应用程序启动时,将读取web.xml以加载servlet,所以我们的DispatcherServlet将被加载,但Spring仍然不在图片中,现在我的问题是:DispatcherServlet是实例化WebApplicationContext还是由服务器负责。希望我现在明白了。实际上答案是DispatcherServlet init()方法正在初始化WebApplicationContext。谢谢你,干杯,是的。当容器加载
DispatcherServlet
时,将创建
WebApplicationContext
(在执行
init()
方法期间)。在这些情况下,将何时为每个DispatcherServlet创建Spring WebApplicationContext,谁负责为每个DispatcherServetSpring创建WebApplicationContext对象,在容器中创建的每个DispatcherServlet都关联一个
WebApplicationContext
。您没有收到我的问题,我问的是当应用程序启动时,将读取web.xml以加载servlet,所以我们的DispatcherServlet将被加载,但Spring仍然不在图片中,现在我的问题是:DispatcherServlet是实例化WebApplicationContext还是由服务器负责。希望我现在明白了。实际上答案是DispatcherServlet init()方法正在初始化WebApplicationContext。谢谢你,干杯,是的。当容器加载
DispatcherServlet
时,将创建
WebApplicationContext
(在执行
init()
方法期间)。