我试图在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 /
下设置但是,如果我尝试请求http://localhost:8080/Azalea/home/
我在GlassFish日志中输入了一个条目:
严重:PWC6117:文件“... / build / web / 主页 /WEB-INF/views/index.jsp”未找到
而不是预期的
请求“... /建设/网络/ WEB-INF /视图/ 主屏幕 /index.jsp”
“/ data”的相同模式。它基本上看起来像请求映射插入到请求中的错误位置。
我目前的工作是将解析器修改为
resolver.setPrefix("../WEB-INF/views/");
并从控制器返回以下内容:
public class homeController {
@RequestMapping(value = "/")
public String home() {
return "home/index";
}
}
但这似乎是次优解决方案。如果您有任何建议,请告诉我。
答案 0 :(得分:0)
你几乎做对了。前缀必须是绝对的,以使其按您希望的方式工作。即:视图解析器的prefix
必须设置为绝对值:
resolver.setPrefix("WEB-INF/views/");
并且,当您从@RequestMapping
方法返回视图名称时,它们必须是相对于view-resolver
prefix
路径的路径。因此,在homeController
中,您应该返回home/index
,在dataController
中,您应该返回data/index
。