如何将弹簧控制器映射到扩展名为.jsp的URL?

Mat*_*ari 6 java spring jsp tomcat spring-mvc

我们正在将仅限jsp的应用程序迁移到Spring-MVC.由于各种原因,我们无法更改当前页面的扩展名.(对login.jsp的调用需要由将使用jsp文件作为视图的spring控制器处理).

我们正在迭代地执行此操作,因此一些页面需要保留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'>
Run Code Online (Sandbox Code Playgroud)

如果我将.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>
Run Code Online (Sandbox Code Playgroud)

为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>
Run Code Online (Sandbox Code Playgroud)

非常感谢.

更新:我刚刚验证过,如果我将.jsp文件重命名为其他东西(.jst)并相应地更新viewResolver,那么一切正常.显然,如果视图被解析为扩展名为.jsp的文件,spring会尝试将视图转发到另一个控制器.

chr*_*ris 2

如果它确实不能与 .jsp 扩展一起使用(尽管我个人看不出任何原因),您可以尝试使用http://tuckey.org/urlrewrite/首先重写 url。