Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring mvc SpringMVC:为什么我需要(以及如何)为JSP视图提供映射?_Spring Mvc - Fatal编程技术网

Spring mvc SpringMVC:为什么我需要(以及如何)为JSP视图提供映射?

Spring mvc SpringMVC:为什么我需要(以及如何)为JSP视图提供映射?,spring-mvc,Spring Mvc,我试图让一个控制器方法返回一个ModelAndView对象,该对象使用JSP作为视图。ViewResolver的应用程序上下文配置: <bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView

我试图让一个控制器方法返回一个ModelAndView对象,该对象使用JSP作为视图。ViewResolver的应用程序上下文配置:

<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>
我可以一步一步地浏览代码,直到返回ModelAndView为止,一切都很好,此时我在日志中看到:

DEBUG 2011-11-03 15:33:52,262 (org.springframework.web.servlet.view.JstlView:236) - Forwarding to resource [/WEB-INF/jsp/error.jsp] in InternalResourceView 'error'
DEBUG 2011-11-03 15:33:52,262 (org.springframework.web.servlet.DispatcherServlet:845) - DispatcherServlet with name 'dispatcherServlet' determining Last-Modified value for [/nacem-rest/WEB-INF/jsp/error.jsp]
DEBUG 2011-11-03 15:33:52,263 (org.springframework.web.servlet.DispatcherServlet:853) - No handler found in getLastModified
DEBUG 2011-11-03 15:33:52,263 (org.springframework.web.servlet.DispatcherServlet:693) - DispatcherServlet with name 'dispatcherServlet' processing GET request for [/nacem-rest/WEB-INF/jsp/error.jsp]
WARN  2011-11-03 15:33:52,263 (org.springframework.web.servlet.PageNotFound:965) - No mapping found for HTTP request with URI [/nacem-rest/WEB-INF/jsp/error.jsp] in DispatcherServlet with name 'dispatcherServlet'
DEBUG 2011-11-03 15:33:52,264 (org.springframework.web.servlet.DispatcherServlet:674) - Successfully completed request
因此,看起来我还需要对JSP文件进行某种映射,即使web.xml指定所有URL都应由DispatcherServlet处理:

<servlet>
    <servlet-name>dispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring/application-context.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

调度员服务
org.springframework.web.servlet.DispatcherServlet
上下文配置位置
/WEB-INF/spring/application-context.xml
1.
调度员服务
/*
显然,我需要将此JSP文件的请求映射添加到控制器中,尽管我不确定为什么或如何添加。JSP支持的视图是JstlView,我假设Spring知道如何处理它,并确保它在浏览器中呈现。但也许不是,我需要添加一些代码来实现这一点?看起来有一个重定向正在进行,我需要通过另一个映射控制器方法再次捕获请求,并在该方法中呈现JSP。是这样吗?我在参考文件中根本看不到任何解释如何做到这一点的东西,也许有人能给我指出正确的方向


提前感谢您的评论、建议等。

我不确定区别是什么,但在我的一个(工作)应用程序中,我使用了
InternalResourceViewResolver
而不是
UrlBasedViewResolver
。例如:

<bean 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"/>
</bean>

你所有的其他东西看起来都差不多。

谢谢你的建议;不幸的是,我尝试了这个方法,结果没有什么不同。看起来视图被解析为JSP没有任何问题,但是请求不是被呈现的视图,而是被转发到与视图的JSP页面对应的URL,此时请求不是被呈现的,而是被DispatcherServlet再次拾取,它没有URL.Hmmm的映射。你在重定向吗?如果是这样,请查看我的询问和回答。不,我没有重定向代码中的任何地方,因此我不确定转发发生在哪里,缩短了对renderMergedOutputModel()的调用,我认为该调用应该作为控制器方法返回的ModelAndView的一部分在视图上调用(在本例中是错误消息的JSP页面)。
<servlet>
    <servlet-name>dispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring/application-context.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>
<bean 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"/>
</bean>
<servlet>
  <servlet-name>dispatcher</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <init-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>WEB-INF/spring/*.spring.xml</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
  <servlet-name>dispatcher</servlet-name>
  <url-pattern>/</url-pattern>
</servlet-mapping>