gpt4 book ai didi

java - 由于 InternalResourceViewResolver View 名称错误,Spring MVC 返回 404

转载 作者:行者123 更新时间:2023-11-30 02:42:17 25 4
gpt4 key购买 nike

我是 Spring MVC 和 Boot 的新手。我可以打开http://localhost:8088/postList但我在打开 http://localhost:8088/post/1 时遇到 Whitelabel 错误页面错误。我找不到我的错误。你能说出来吗?

我的项目结构

enter image description here

我的InternalResourceViewer:

@Bean
public InternalResourceViewResolver viewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("WEB-INF/views/");
resolver.setSuffix(".jsp");
return resolver;
}

我的 Controller :

@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;
}


}

我的帖子列表:

enter image description here

我的帖子查看页面:

enter image description here

我的 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

为此,它使用 View 名称(前缀、ModelView 中的名称和后缀,即 WEB-INF/views/post.jsp) >) 作为路径,并尝试通过委托(delegate)给 ServletRequest#getRequestDispatcher(String) 来检索 RequestDispatcher .

The pathname specified may be relative, although it cannot extend outside the current servlet context. If the path begins with a "/" it is interpreted as relative to the current context root. This method returns null if the servlet container cannot return a RequestDispatcher.

由于您没有前导 /,因此它是相对于当前路径的,即。 /post/1。这就是 /post/WEB-INF/views/post.jsp。由于您没有与 ServletContext 相关的此类资源,因此您的 Servlet 容器将返回 404。

关于java - 由于 InternalResourceViewResolver View 名称错误,Spring MVC 返回 404,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41285215/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com