Spring MVC-@PathVariable-未能找到资源
在我的SpringMVC演示项目中,我使用路径变量注释。 控制器如下所示Spring MVC-@PathVariable-未能找到资源,spring,spring-mvc,jakarta-ee,Spring,Spring Mvc,Jakarta Ee,在我的SpringMVC演示项目中,我使用路径变量注释。 控制器如下所示 @Controller @RequestMapping(value = {"/", "/login"}) public class HelloWorldController { @RequestMapping(method = RequestMethod.GET) public String helloWorld(final Model model) {
@Controller
@RequestMapping(value = {"/", "/login"})
public class HelloWorldController {
@RequestMapping(method = RequestMethod.GET)
public String helloWorld(final Model model) {
model.addAttribute("message", "Hello World!");
System.out.println("hello world");
return "jsp/login.jsp";
}
@RequestMapping(value = "/{id}", method = RequestMethod.GET)
public String getLoginId(@PathVariable final int id, final Model model) {
model.addAttribute("message", "Hello World!");
System.out.println("hello world 2" + id);
return "jsp/login.jsp";
}
}
现在当我尝试访问下面的url时
控制器将进入login.jsp页面。这是预期的结果
但是当url更改为
我收到以下错误,java.io.FileNotFoundException:JSPG0036E:找不到resource/login/jsp/login.jsp
谁能告诉我这背后的原因吗?我想你应该说:
…@PathVariable(“id”)int-id…
实际上,我想这可能是一个原因和解决方案。。我猜对于前一种情况,即case,它尝试在WEB-INF中的上下文根之后查找资源。但是在后一种情况下,由于它在第二次/after/login中被计数,它尝试在WEB-INF/login文件夹中查找实际上不存在的资源,因此出现了错误
解决方案可以是,使用“./jsp/login.jsp”,这将强制从上下文根检查资源。这将确保从上下文根搜索资源。
也许这就是为什么为了避免这种混乱,spring提出了视图解析器。
如果我错了,请纠正我
谢谢大家 如果我正确理解您的注释,您没有配置视图解析器,因此您只需转发到作为视图名称传递的视图 由于您没有首字母
/
,因此会陷入相对URL的地狱。在这种情况下,你应该写:
return "/jsp/login.jsp";
如果视图位于/WEB-INF/jsp/login.jsp
顺便说一句,
viewsolvers
的原因是(除其他外,比如容易重构)要做的是添加/jsp/
作为前缀和.jsp
作为后缀的低级工作。所以,恕我直言,你真的应该考虑在你的配置中添加一个。你确定你的控制器被调用了吗?“hello world”文本是否显示在控制台和jsp中?不确定您的设置如何,但视图名称通常不带“.jsp”,即“jsp/login”或更可能只有“login”@jgr Yes我的控制器在这两种情况下都是无效的。控制台中会打印Hello World。在我的项目设置中,我在web inf中创建了一个文件夹“jsp”,并返回视图名为jsp/login.jsp。在后一种情况下,视图返回为“/login/jsp/login.jsp”。@sodik我没有使用视图解析器,这就是为什么我给出了完整的视图名称,即“jsp/login.jsp”。@Serger感谢您的回答。。现在使用/jsp/login.jsp和../jsp/login.jsp也可以正常工作。:)