介绍Spring MVC

时间:2009-08-14 17:58:07

标签: java servlets spring-mvc

我想将Spring MVC引入一个迄今为止使用简单直接访问JSP文件的应用程序,即www.example.com/login.jsp,其中包含业务逻辑和表示细节。

我想删除业务逻辑并仅在JSP中保留表示。为此,我将jsp文件从webapp/login.jsp移动到webapp/WEB-INF/jsp/login.jsp,然后将所有带有模式*.jsp的URL映射到Spring的DispatchServlet,后者转到Controller,然后是一个视图(应该转发到/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的内部Web请求。然后内部.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'

鉴于我无法更改外部网址,在将外部文件类型映射到相同的内部文件类型时,有没有办法解决此问题?

3 个答案:

答案 0 :(得分:2)

我们在应用程序中通过对请求URL使用不同的模式(* .htm而不是* .jsp)来解决这个问题。这样可以避免这个问题,无论如何都是好的做法,因为URL和JSP之间可能没有一对一的关系。

答案 1 :(得分:0)

我建议你:

  • 将Spring MVC请求映射到不同的模式(例如*.do);
  • 使用UrlRewriteFilter或您的应用服务器的网址重写功能将*.jsp来电映射到*.do;

答案 2 :(得分:0)

我不确定如何告诉Spring忽略其对JSP文件的内部请求,但是拦截其他JSP请求。为什么不保留旧的jsps,而只是将它们转发给控制器。例如。 “page.jsp”:

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

这样,您可以保持旧网址不变,但唯一的功能是重定向到控制器。

相关问题