在web.xml中有多个DispatcherServlet可以处理不同的URL吗? 有什么缺点?
<servlet>
<servlet-name>servlet1</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet>
<servlet-name>servlet2</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>servlet1</servlet-name>
<url-pattern>/url2/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>servlet2</servlet-name>
<url-pattern>/url1/*</url-pattern>
</servlet-mapping>
答案 0 :(得分:2)
您不一定需要同一个servlet的多个实例,除非您想为它们提供每个不同的init-param
值。我宁愿将不同的映射分配给同一个servlet,如下所示:
<servlet>
<servlet-name>springDispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springDispatcherServlet</servlet-name>
<url-pattern>/url1/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>springDispatcherServlet</servlet-name>
<url-pattern>/url2/*</url-pattern>
</servlet-mapping>
对于你不知道的情况,这也是完全有效的。
答案 1 :(得分:1)
我建议,通常最好只拥有一个DispatcherServlet
,并处理其中的所有请求路由。错误就少了一点。
答案 2 :(得分:1)
是的,绝对没问题。根据应用程序的复杂性和架构,它实际上可能变得非常有用。您可以使用它在调度程序级别(而不是在控制器上)构建应用程序。或者当您希望某些URL类具有不同的调度程序配置(视图解析器,区域设置解析器等)时
答案 3 :(得分:0)
当然取决于您的需求,但在大多数情况下,最好有一个servlet。
因此,您可以将配置简化为:
<servlet>
<servlet-name>servlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>servlet</servlet-name>
<url-pattern>/url2/*</url-pattern>
<url-pattern>/url1/*</url-pattern>
</servlet-mapping>