簡體   English   中英

如何將彈簧控制器映射到擴展名為.jsp的URL?

[英]How can I map a spring controller to a url with .jsp extension?

我們正在將僅限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'>

如果我將.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會嘗試將視圖轉發到另一個控制器。

[公然從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專家可以匆匆解釋,我很想知道。

我也不能保證這可能造成潛在的安全/可靠性問題,因此使用風險由您自行承擔。

如果它真的不能使用.jsp擴展名(雖然我個人看不出任何原因),你可以嘗試使用http://tuckey.org/urlrewrite/來重寫網址。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM