我们正在将jsp-only应用程序迁移到Spring-MVC。由于各种原因,我们无法更改当前页面的扩展名。 (对login.jsp的调用需要由使用jsp文件作为视图的spring控制器来处理)。如何将弹簧控制器映射到扩展名为.jsp的url?
我们这样做是迭代的,所以有些页面需要保留jsp文件(对welcome.jsp的调用不会被控制器处理)。
为此,我将DispatcherDervlet和HandlerMapping都映射为* .jsp,并以标准方式配置JstlView。
不幸的是,如果我浏览到//login.jsp我得到一个错误说
<No mapping found for HTTP request with URI [/<context>/WEB-INF/jsp/login.jsp] in DispatcherServlet with name 'spring'>
的所有作品,如果我改变的.jsp在DispatcherServlet的HandlerMapping的和任何其它分机。
的web.xml:
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>*.jsp</url-pattern>
</servlet-mapping>
为spring-servlet.xml:
<!-- View resolver -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
<!-- URL Mapping -->
<bean id="publicUrlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="urlMap">
<map>
<entry key="/login.jsp" value-ref="loginController"/>
</map>
</property>
</bean>
非常感谢。
更新:我刚刚证实,如果我将我的.jsp文件重命名为其他内容(.jst)并相应地更新viewResolver,则它将全部正常工作。显然,如果视图解析为扩展名为.jsp的文件,spring会尝试将视图转发给另一个控制器。