[英]Spring MVC returns a 404 because of a wrong InternalResourceViewResolver view name
我是Spring MVC和Boot的新手。 我可以打开http:// localhost:8088 / postList,但是打开http:// localhost:8088 / post / 1时遇到Whitelabel Error Page错误。 我找不到我的错误。 你能说吗
我的项目结构
我的InternalResourceViewer:
@Bean
public InternalResourceViewResolver viewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("WEB-INF/views/");
resolver.setSuffix(".jsp");
return resolver;
}
我的控制器:
@Controller
@RequestMapping("/")
public class PostController
{
@Autowired
PostService postService;
@RequestMapping(value="/post/{id}", method=RequestMethod.GET)
public ModelAndView list(@PathVariable("id") int id){
ModelAndView mav=new ModelAndView("post");
Post postItem=postService.getPostById(id);
mav.addObject("postItem",postItem);
mav.addObject("postItem",postItem);
return mav;
}
@RequestMapping(value="/postList", method=RequestMethod.GET)
public ModelAndView postlist(){
ModelAndView mav=new ModelAndView("postList");
mav.addObject("postList",postService.listPosts());
return mav;
}
}
我的帖子列表:
我的帖子查看页面:
我的postList.jsp标签库和内容:
<div class="row"> <c:if test="${not empty postList}"> <c:forEach var="postItem" items="${postList}"> <div class="col-lg-8"> <h1><a href="<c:url value='/post/${postItem.id}' />">${postItem.header}</a></h1> <p class="lead"> by <a href="#">${postItem.user_id}</a> </p> <p><span class="glyphicon glyphicon-time"></span>${postItem.upddate}</p> <hr> </div> </c:forEach> </c:if>
简短的答案是,您在InternalResourceViewResolver
前缀中需要一个前导/
。 所以
resolver.setPrefix("/WEB-INF/views/");
长的答案是Spring MVC使用InternalResourceViewResolver
生成一个View
,在这种情况下为JstlView
。 然后,Spring MVC尝试渲染此View
。
要做到这一点,它使用的视图名称(前缀,在你的名字ModelView
,和后缀,即WEB-INF/views/post.jsp
),作为路径,并尝试获取一个RequestDispatcher
通过委派到ServletRequest#getRequestDispatcher(String)
。
指定的路径名可以是相对的 ,尽管它不能扩展到当前servlet上下文之外。 如果路径以
"/"
开头,则将其解释为相对于当前上下文根。 如果Servlet容器无法返回RequestDispatcher
则此方法返回null
。
由于您没有前导/
,所以它相对于当前路径,即。 /post/1
。 这使其成为/post/WEB-INF/views/post.jsp
。 并且由于没有相对于ServletContext
资源,因此Servlet容器返回404。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.