java - 如何将 spring Controller 映射到扩展名为 .jsp 的 url?

标签 java spring jsp tomcat spring-mvc

我们正在将一个纯 jsp 应用程序迁移到 Spring-MVC。由于各种原因,我们无法更改当前页面的扩展名。 (对 login.jsp 的调用需要由将使用 jsp 文件作为 View 的 spring Controller 处理)。

我们正在迭代执行此操作,因此某些页面需要保留 jsp 文件( Controller 不会处理对 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,那么一切正常。显然,如果 View 解析为扩展名为 .jsp 的文件,spring 会尝试将 View 转发给另一个 Controller 。

最佳答案

[公然盗自http://forum.springsource.org/showthread.php?13263-Using-.jsp-extension ]

这对我有用。尝试将此添加到您的 web.xml 文件中:

<servlet-mapping>
    <servlet-name>jsp</servlet-name>
    <url-pattern>/WEB-INF/jsp/*</url-pattern>
</servlet-mapping>

请注意,即使有了链接中的信息,我也不明白为什么这有帮助。如果有 Spring 专家可以过来解释一下,我很想知道。

我也不能保证这不会造成潜在的安全/可靠性问题,因此使用风险自负。

关于java - 如何将 spring Controller 映射到扩展名为 .jsp 的 url?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2764636/

相关文章:

java - 如何在 Android 中 "wait"线程

java - 在 Domino Java 代理中使用枚举单例编码模式

java - 从 Java Applet 上的控件捕获文本

java - 创建一个新的 Activity,创建一个全新的应用程序?

spring - 使用带有 Spring Annotations 的 ehcache 3(不使用 Spring Boot)

jsp - 如何让 JSP 标记文件不忽略所有空格?

java - 无法转换类型“$Proxy55”的值

java - '${spring.version}'的使用

java - 不要在 servlet 中硬编码 jsp 链接

JavaScript - 将选定的下拉列表值传递给方法