IDEA-Tomcat-源服务器未能找到目标资源的表示或者是不愿公开一个已经存在的资源表示

1起因

在学习springMVC的过程中,写了一个demo需要部署到本地Tomcat上来运行(直接使用IDEA配置本地tomcat,不用再手动发war包到tomcat目录下)。因为之前用SpringBoot项目比较多(集成了Tomcat,不需要额外部署设置;也不需要额外配好多xml),所以这部分可以说是从0学起,踩了好多坑。
出现上面“源服务器未能找到目标资源的表示或者是不愿公开一个已经存在的资源表示”的问题,是我自己写了几个例子试了一下SpringMVC的两种视图解析器,InternalResourceViewResolver 和FreeMarkerViewResolver.
InternalResourceViewResolver 比较好理解,只是把Controller层的逻辑地址添加个前缀后缀链接到View层的物理地址(jsp文件等)。
而这个FreeMarkerViewResolver着实费了一番功夫,就是写这个例子的过程中出现了“源服务器未能找到目标资源的表示或者是不愿公开一个已经存在的资源表示”的问题。
如果你能看到这个贴子说明你可能也百度了很久了吧(各种论坛上回答大同小异——
1、有的说是View层文件放在WEB-INF下面访问会受限,要把jsp啥的放在和它平级的文件夹下(反正我在IDEA下测试是把视图层文件放在哪儿都没关系的);
2、还有一些是Tomcat的配置部署方面的原因;
3、还有一些是springmvc-servlet.xml文件或者web.xml文件有些细节上的问题;
4、有些依赖没有导入(这种应该直接连项目都跑不起来)
首先我把IDEA tomcat配置部署百度了半天,可以确认没问题了。
然后就是确认xml文件的配置,我找了几个例子对照了一下,可以确认没问题了。
但是点击按钮跳转的时候,使用FreeMarkerViewResolver方式解析的还是报错——“源服务器未能找到目标资源的表示或者是不愿公开一个已经存在的资源表示”
奇怪的是使用InternalResourceViewResolver 解析的就没问题。
在这里插入图片描述

2经过

后来在我百度的时候发现有个老哥说的还是一针见血的——

报这个错的都是路径问题

一语惊醒梦中人啊,其实一直在百度导致思路有些乱了——应该仔细想一下为什么这个路径没找到,应该先一步步debug一下试试到底是哪儿断了(别骂了,是的,一直百度让我老是觉得我哪儿缺少什么配置,哪儿部署的不对,都没想起来先debug试试-_-’|)
下面是index.jsp里页面跳转的url,指向controller层的一个方法↓
这是index.jsp的跳转按钮
这是controller层的那个方法↓
这是controller层代码
关于freemarker在sprignmvc-servlet.xml里的配置就不再赘述了,感兴趣的老哥多百度几个例子看下吧。
这是一开始点击跳转按钮后的效果↓
提示找不到文件
然后我debug了一下,发现直接就没进cotroller层这个方法里面。没进方法当然没办法把逻辑路径解析成物理路径,所以才会报错说资源没找到。
但是为啥没进方法来?
所以…注解解析没成功??!!是的,用SpringBoot用习惯了,忘了SpringMVC项目是要手动开启注解扫描的,而我看的例子或者论坛上的回复都侧重的是FreeMarkerViewResolver的一些xml配置,当然不会把最基本的开启Spring注解扫描功能的配置也放出来。
其实就是这么两句(其实只写下面那一句也可以)
在这里插入图片描述
加上之后,spring容器可以正确识别注解Controller层的@RequestMapping()注解,也就可以正确解析index.jsp里的url,正确链接到Controller层对应的方法,也就可以正确跳转了!
在这里插入图片描述

3说白了

其实就是忘记在配置文件里开启spring的注解扫描,导致注解没生效,导致controller层的方法没生效,导致View层index.jsp中的逻辑地址没有正确解析成想要跳转的物理地址。
应该不会有人跟我一样犯这种奇葩的错吧——被自己蠢哭了——这篇文章干货也不多,但是还是想记录一下,提醒自己以后出bug了不要被百度上各种各样的解释迷惑了心智,要先debug啥的理清楚思路。
共勉之。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐