Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring MVC-@PathVariable-未能找到资源_Spring_Spring Mvc_Jakarta Ee - Fatal编程技术网

Spring MVC-@PathVariable-未能找到资源

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) {

在我的SpringMVC演示项目中,我使用路径变量注释。 控制器如下所示

    @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也可以正常工作。:)