【发布时间】:2009-08-14 17:58:06
【问题描述】:
我想将 Spring MVC 介绍给一个迄今为止使用简单直接访问 JSP 文件的应用程序,即包含业务逻辑和表示细节的 www.example.com/login.jsp。
我想剥离业务逻辑,只保留 JSP 中的表示。为此,我将 jsp 文件从 webapp/login.jsp 移动到 webapp/WEB-INF/jsp/login.jsp,然后将所有带有 *.jsp 模式的 url 映射到 Spring 的 DispatchServlet,该 DispatchServlet 转到一个控制器,然后是一个(应该)转发到 @987654325 的视图@。
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'
鉴于我无法更改外部 URL,在将外部文件类型映射到相同的内部文件类型时,有没有办法解决这个问题?
【问题讨论】:
-
我猜您不能只在不同的文件扩展名下显示外部 URL,例如 .htm?
-
不,很遗憾,我无法更改外部 URL,因为我们已经有依赖它们的客户端。
标签: java servlets spring-mvc