2009-08-14 194 views
0

我想介紹Spring MVC的到具有截至到JSP文件現在使用簡單的直接接入即www.example.com/login.jsp其中包含業務邏輯和表示信息的應用程序。介紹Spring MVC的

我想帶出業務邏輯,只保留在JSP中呈現。要做到這一點,我已經搬離webapp/login.jsp JSP文件到webapp/WEB-INF/jsp/login.jsp然後映射所有的URL與模式*.jsp Spring的DispatchServlet都到一個控制器,然後視其(應該)着/WEB-INF/jsp/login.jsp

web.xml看起來是這樣的:

<servlet> 
    <servlet-name>springapp</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

<servlet-mapping> 
    <servlet-name>springapp</servlet-name> 
    <url-pattern>*.jsp</url-pattern> 
</servlet-mapping> 

springapp-context.xml的

<bean id="urlFilenameViewController" class="org.springframework.web.servlet.mvc.UrlFilenameViewController"/> 

<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> 
    <property name="mappings"> 
     <value> 
      /*.jsp=urlFilenameViewController 
     </value> 
    </property> 
</bean> 

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /> 
    <property name="prefix" value="/WEB-INF/jsp/"/> 
    <property name="suffix" value=".jsp"></property> 
</bean> 

然而,這個最根本的問題是,我結束映射在.jsp內部外部URL請求網絡請求也映射到.jsp。然後,將內部.jsp請求通過DispatchServlet無二返回,因爲它無法找到任何處理該請求的錯誤第二次:

WARN - DispatcherServlet.noHandlerFound(1077) | No mapping found for HTTP request with URI [/myapp/WEB-INF/jsp/login.jsp] in DispatcherServlet with name 'springapp' 

既然我不能改變外部URL,是有辦法在將外部文件類型映射到相同的內部文件類型時繞過此問題?

+0

我猜你不能夠只是提出不同的文件擴展名的外部URL,如熱媒? – 2009-08-14 18:05:34

+0

不,很不幸,我無法更改外部URL,因爲我們已經有依賴它們的客戶端。 – 2009-08-17 07:35:47

回答

2

我們在我們的應用程序通過使用URL請求不同的圖案(的* .htm,而不是* .JSP)解決這一問題。這避免了這個問題,無論如何這是一個好的做法,因爲URL和JSP之間可能沒有一對一的關係。

+0

恐怕我不能選擇不同的外部URL擴展名,因爲我們已經擁有依賴於* .jsp URL的客戶端。看起來不幸的是,我們在項目開始時做出了這個(無可否認的)決定,這是無法逆轉的! – 2009-08-17 07:38:26

+0

也許您可以在傳入的請求上進行URL重寫,以在servlet獲取它之前切換擴展。我使用了tuckey.org的UrlRewriteFilter,它運行良好。或者,如果您的應用程序由Apache Web服務器驅動,則可以使用mod_rewrite。只需谷歌的「URL重寫」來找到這些和其他的鏈接。但是,這種方法要求您維護一個要重寫的URL(或URL模式)列表。希望這會是暫時的。 – 2009-08-18 17:35:55

0

我建議你:

  • 地圖Spring MVC的請求到一個不同的模式(例如*.do);
  • 使用UrlRewriteFilter或應用程序服務器的URL重寫功能映射*.jsp調用*.do;
0

我不知道如何告訴Spring忽略其對JSP文件的內部請求,但攔截其他JSP請求。你爲什麼不保留舊的jsps,而只是讓他們轉發給控制器。例如。 「page.jsp」:

<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %> 
<c:redirect url="/page.htm" /> 

這樣,您可以保持您的舊URL完好無損,但唯一的功能是重定向到控制器。