Spring MVC web.xml有DispatcherServlet作为FrontController,我对Spring中的Servlet概念有点困惑,因为我知道Web容器中只有一个Servlet实例,而且多个线程在service()方法上运行但是在Spring的情况下,每个url-mapping只创建一个DispatcherServlet实例,或者我们有多个DispatacherServlet实例。
例: 映射到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>
映射到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>
简单地在上面的示例中创建了多少个DispatcherServlet实例,用于映射html和jsp调用。
答案 0 :(得分:3)
是的,就像任何普通的Java Servlet一样,您可以通过为每个<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>
在documentation中也明确指出,您可以在一个Web应用程序中安全地定义DispatcherServlet
的多个实例。
Web应用程序可以定义任意数量的
DispatcherServlets
。每 servlet将在自己的命名空间中运行,加载自己的应用程序 上下文与映射,处理程序等。只有根应用程序 由ContextLoaderListener
加载的上下文(如果有的话)将被共享。
因此,只要将两个Servlet映射到两个不同的URL模式,就可以了。