SpringMVC番外篇(一)
SpringMVC 404番外篇(一)
记录idea模块新增框架支持后TomCat启动404报错问题
起因经过
事情分析比较复杂,如果只想查看解决办法的朋友建议,直接移步到 最终解决办法
在学习SpringMVC的过程中,一般都是新建一个大项目,然后在里面新建许多小模块,运行测试的时候就可以只运行模块,这样既可以不用频繁导包,也可以让自己的项目看起来整洁干净。有一次我在下面建立了一个maven普通项目的模块,如图👇
然后新增模块支持,具体步骤如下:
-
打开 项目结构 点击 模块 选中当前模块
-
点击上面的➕,选择web框架👇
-
新增工件
-
最后点击确定,完成模块的创建
-
问题现象
本来以为这样一顿操作过后就能直接配置TomCat,然后启动项目了,结果没想到启动tomcat后显示404
然后不管跳转到哪个网页,全部都是404,描述:源服务器未能找到目标资源的表示或者是不愿公开一个已经存在的资源表示。
排查过程思路
-
缺少 target 目录
查看编译后的目录结构,发现是这样的 👇
编译的类和web信息,全部输出在 out 文件夹中,正常来说,都是模块目录下,有一个target目录,来保存编译后的文件。
-
编译后的文件中缺少 jsp 和 xml 文件,可能是资源到处问题在pom.xml中支持对jsp和xml的导入
<build> <!-- 解决资源无法导出问题 --> <resources> <resource> <directory>web</directory> <includes> <include>**/*.xml</include> <include>**/*.jsp</include> </includes> </resource> </resources> </build>
测试:
同样是无法访问网页,描述的也都一样,但是可以发现,此时的目录结构
已经有了target的文件夹,里面只有一个classes目录,在目录中有我们的文件,那么我们可不可以在启动tomcat弹出的网址后面直接加上
/classes
来访问资源呢? 答案是不行的。
最终解决办法
-
增加对导出资源的支持
<build> <!-- 解决资源无法导出问题 --> <resources> <resource> <directory>web</directory> <includes> <include>**/*.xml</include> <include>**/*.jsp</include> </includes> </resource> </resources> </build>
-
这个resources没有标记为资源目录,把他标记为资源目录就解决了。
- 测试效果:
总结:
不要问我为啥因为个这种原因专门写一篇文章.....
因为 刚开始以为是编译后文件的导出路径问题,尝试过把导出路径改成模块的目录,但是后来写文章演示的时候,又莫名其面不能用,最终发现原来是一个项目结构的问题。。😭😭😭😭😭