Springmvc在Controller跳转页面时失败

bug集(1学习中):Springmvc在Controller跳转页面时失败

报错种类

一、[WARNING] No mapping for GET /toJumpPage ,就是说找不到该页面,在浏览器访问的时候也是报404的错误。
报错的代码:
在这里插入图片描述
在这里插入图片描述
错误原因:

1、我们能看到,在这个类的上面添加了路径 " /Jump ", 所以当我们启动服务器时去访问这个资源时,使用的url 应该是 :http://localhost/Jump/toJumpPage 。
2、此时我们对这个toJumpPage方法进行断点分析,当我们访问这个 http://localhost/Jump/toJumpPage 时,就会进入方法,在后台打印 “跳转页面” 然后springmvc 就会默认把这个返回值当成一个资源,去找这个资源的位置,如果没找到就会报错 : “[WARNING] No mapping for GET /toJumpPage。”
3、那么我们这里为什么会报错呢?是因为我们在类上面添加了一个路径,我们访问这个类下面的路径都要在localhost加上Jump 在拼接方法上面的路径进行访问。然而,在我进行跳转的时候,去找这个资源就会在这个类路径下面找。
4、我们访问这个方法后,访问这个资源应该是这样的:http://localhost/page.jsp,因为在Tomcat中我设置了虚拟路径为 / ,这个个page.jsp就会直接被tomcat,按照http://localhost/ + page.jsp这个方法拼接起来了,但实际上我们所在的路径应该是/Jump/page.jsp,所以就找不到这个资源了。

二、加了@ResponseBody注解,把返回值当成响应体给直接返回了。
在这里插入图片描述
在这里插入图片描述
错误原因:
如果没有@ResponseBody,springmvc就会自动去搜索叫返回值这个名称的资源文件。如果加了就不会去搜索资源文件了,而是真正的把这个字符串传输到浏览器。

解决方案

一、找不到该页面
1、把类上面的RequestMapping注解删除。这样就能通过http://localhost/page.jsp方式访问了。
2、我觉得还有其他解决方法,这个只是针对这里的一种,先让我去搜索一下。
在这里插入图片描述

二、不去寻找资源,直接返回资源的名称在页面上。
去掉@ResponseBody。就会去找资源了。

更新:第一个找不到该页面,果然还是有第二个解决方法的!
果然,对于第一种解决方法总觉得不太现实,如果项目非要这么做呢?非要在类上面加一个路径呢?我们来看看众多方法中的一种:
出现这种情况的原因其实是:我们在配置springmvc的时候,配置类中写了
在这里插入图片描述这一句表示在localhost的下面的路径都会被springmvc拦截,被springmvc分配,抢了Tomcat的活。原则上我们在不使用Tomcat的时候是不会出现这种情况的。
但是因为springmvc能够简化Tomcat的开发,又不得不使用springmvc,所以我们有其他办法:
在config包下编写一个SpringMvcSupport类配置,直接继承WebMvcConfigurationSupport类 重写里面的protected void addResourceHandlers(ResourceHandlerRegistry registry) 这个方法,里面写 registry.addResourceHandler(“/所在文件夹/**(文件资源)”) .addResourceLocations(“/所在文件夹/”);这样就直接优先匹配“所在文件夹”这种模式,可以不被springmvc拦截,而是让tomcat来对他进行分配资源。代码如下:
在这里插入图片描述当然,写好后还要去springmvcconfig类配置文件中添加包扫描路径。
在这里插入图片描述
这样就成功了!如有不对,请多支出问题!栓Q!

猜你喜欢

转载自blog.csdn.net/qq_44627822/article/details/126370159