2009-08-14 150 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完好无损,但唯一的功能是重定向到控制器。