2

我正在尝试在 Spring MVC 中使用 2 个控制器和一个调度程序 servlet。但是我在尝试渲染视图时遇到了 404 错误。调度程序非常简单,来自 web.xml:

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

并具有以下配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    ...
<context:component-scan base-package="com.mycompany.azalea" />

<mvc:annotation-driven />

</beans>

控制器是:

package com.mycompany.azalea;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping(value = "/home")
public class homeController {

    @RequestMapping(value = "/")
    public String home() {
         return "index";
    }
}

package com.mycompany.azalea;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping(value = "/data")
public class dataController {

    @RequestMapping(value = "/")
    public String home() {
         return "index";
    }
}

我正在使用一个非常标准的解析器:

@Configuration
public class AppConfig {

// Resolve logical view names to .jsp resources in the /WEB-INF/views directory
@Bean
ViewResolver viewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("WEB-INF/views/");
        resolver.setSuffix(".jsp");
        return resolver;
    }
}

在 WEB-INF/views/home/ 和 WEB-INF/views/data/ 下设置视图

但是,如果我尝试请求类似的 URLhttp://localhost:8080/Azalea/home/

我在 GlassFish 日志中得到一个条目:

严重:PWC6117:找不到文件“.../build/web/ home /WEB-INF/views/index.jsp”

而不是预期的请求

“.../build/web/WEB-INF/views/ home / index.jsp”

“/data”的模式相同。从本质上看,请求映射被插入到请求中的错误位置。

我目前的工作是将解析器修改为

resolver.setPrefix("../WEB-INF/views/"); 

并从控制器返回以下内容:

公共类 homeController {

    @RequestMapping(value = "/")
    public String home() {
         return "home/index";
    }
}

但这似乎是一个次优的解决方案。如果您有任何建议,请告诉我。

4

1 回答 1

0

你几乎做对了。前缀在这里必须是绝对的,以使其按您希望的方式工作。即:prefix视图解析器的 必须设置为绝对值:

resolver.setPrefix("WEB-INF/views/");

而且,当您从@RequestMapping方法返回视图名称时,它们必须是相对于您view-resolver的路径的prefix路径。所以,在 中homeController,你应该返回home/index,在你的dataController,你应该返回data/index

于 2013-05-30T03:10:11.257 回答