我在 web.xml(共存)中定义了常规 servlet 和 Spring MVC dispatcherServlet。web.xml 中 Spring MVC 的 DispatcherServlet 的映射是“/admin/*”。我有一个常规 servlet 向文件夹结构“/admin/...”下的 jsp 发出 request.getDispatcher().forward。由于这是内部转发,我希望 spring 的 dispatcherServlet 不会被注意到。事实证明,Spring 的 DispatcherServlet 确实注意到了这一点,并给了我一个没有找到到这个 JSP 的映射的异常。
有人知道这里到底发生了什么吗?
更新:对不起,我没有让问题更清楚:
我们有一个没有使用 Spring MVC 的现有应用程序。我们决定保持现有功能不变,并为任何其他新功能添加 Spring MVC。
所以这里是 web.xml 映射:
<servlet>
<servlet-name>springRouted</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/mvc-config.xml</param-value>
</init-param>
<load-on-startup>4</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springRouted</servlet-name>
<url-pattern>/admin/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>existingServlet</servlet-name>
<url-pattern>existing.do</url-pattern>
</servlet-mapping>
如果 ExistingServelt 调用 request.getRequestDispatcher().forward("/admin/...jsp"),那么 Spring 会报一个错误,找不到 "/admin/...jsp" 的映射。似乎调用 request.getRequestDispatcher().forward("/admin/...jsp") 将使 servlet 容器重新检查 web.xml 并通过 Spring 的 DispatchServlet 重新路由。