无法通过ModelAndView实例从控制器返回视图?

时间:2016-05-11 10:51:22

标签: spring spring-mvc

情况:我正在尝试使用spring webapp。应用名称为spring-mvc-jquery-file-upload

我的web.xml如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://java.sun.com/xml/ns/javaee" 
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"   

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee    
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
id="WebApp_ID" version="2.5">
<display-name>Archetype Created Web Application</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>

<servlet>
<servlet-name>rest</servlet-name>            
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-   
class>
</servlet>
<servlet-mapping>
<servlet-name>rest</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
</web-app>

rest-servlet.xml如下:

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
    http://www.springframework.org/schema/beans     
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context-3.0.xsd
    http://www.springframework.org/schema/mvc        
    http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">

<context:component-scan base-package="com.hmkcode.spring.mvc.controllers" />
<mvc:annotation-driven />


<bean id="multipartResolver"  
class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>

现在,当运行应用程序时,index.html会成功显示。它有一个以下锚标记:

<a href="rest/controller/next">Next</a>

处理此请求并返回form.jsp的方法Next()如下:

@Controller
@RequestMapping("/controller")
public class FileController {
@RequestMapping(value="/next", method = RequestMethod.GET)
public ModelAndView Next() {

    return new ModelAndView("C:\\Users\\Varrox\\Desktop\\"
            + "spring-mvc-jquery-file-upload\\src\\main\\"
            + "webapp\\form.jsp","wl-entity",new Sample());
}
}

问题:我遇到的问题是当我点击位于next的{​​{1}}链接时,我收到错误消息“找不到映射带有URI的HTTP请求[/spring-mvc-jquery-file-upload/rest/controller/C:/Users/Varrox/Desktop/spring-mvc-jquery-file-upload/src/main/webapp/form.jsp] in DispatcherServlet,名称为“rest”“。

正如您所看到的,控制器中的index.html方法返回Next()实例以及视图名称时,应用程序在视图名前加前缀ModelAndView,这就是找不到映射的原因。

如何删除此前缀,以便正确进行映射并显示我的form.jsp。

1 个答案:

答案 0 :(得分:0)

您希望Java应用程序能够加载不在类路径中的资源。这不行。

您需要一个viewResolver,它将用于按名称查找视图。

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

在此示例中,请注意处理根路径的前缀,并添加文件扩展名的后缀

然后你简单地使用文件名:

 return new ModelAndView("form","wl-entity",new Sample());

完全例如Spring MVC file upload example