Spring/SpringBoot学习中遇到的问题记录(2):java.lang.ClassNotFoundException:org.apache.jsp.WEB_002dINF.views.xx
最近在学习Spring实战第四版,学习到第5章,搭建SpringMVC时碰到了一个大问题。在这里我记录一下自己遇到的问题及解决办法。
首先,先描述一下自己在IDEA中搭建基于Java配置的SpringMVC的过程。过程如下:
(1)新建一个基本的Java项目,如下
确定好命名,点Finish。
构建出的空项目,目录结构如下:
(2)新建目录:lib、web等。具体可以参考我的结构。(注意:项目没添加web模块之前,web文件夹图标上不会出现小蓝点,而且web.xml文件也是不存在的。后面会介绍如何添加web模块)
(3)将所需的jar包拷入lib文件夹下。 注意一下jstl-1.2这个包,我的问题就是这个包引起的。
(4) 点击File--》ProjectStructure,打开下面的窗口,照箭头方向将jar包正式引入到项目中:需要引入的主要有两项:一项是刚才拷入lib文件夹下jar包,可以点击“+”----》JARs or directories... 在打开的窗口中直接选中项目下的lib文件夹即可。
第二项是Tomcat所依赖的包,选择Library,如果你的IDEA已经配置好自己的Tomcat,则会出现相对应版本的libraries,选择之后,添加即可。
注意:一定要引入Tomcat的libraries库!!!!避免在项目中出现servlet-api、jasper包和jsp-api包等,这些包都包含在Tomcat本身的lib里,不然会冲突!!!!
(5)给项目添加Web模块:选中ProjectStructure中的Facets选项,点击“+”号,选择Web选项。选择之后记得看一眼WebResourceDiretory这个设置。这里是你web资源(jsp页面、css等静态资源)的根目录,如果和你的文件目录不一样记得修改一下。
(6)添加完Web模块之后,选择Artifacts选项,看看右边所圈的内容是否有波浪线出现(WEB-INF下),如果有,底部会有提示,点击Fix,然后点击Apply就行。
(7)在编写完代码之后,将其部署到Tomcat上,设置可以参考下面我的设置
(8)部署完成之后,运行即可。
简单介绍完流程之后,讲一下我遇到的问题。一个是404问题,这个问题困扰我好久,我最后也没解决,然后就按照上面的流程重新构建,接着就出现了我接下来的问题java.lang.ClassNotFoundException:org.apache.jsp.WEB_002dINF.views.home.jsp。网上说的多是servlet-api和jasper还有一个jsp-api的jar包与tomcat自带的冲突。但是除了第一个jar包,后两个我根本就没引用,然后我将servlet-api换成和tomcat内置的servlet-api一致的版本,还是不行。最后我开始去查日志,一查就找到问题了。
看我圈出来的地方,至此,我明白了是jstl的问题,然后一查才发现,我之前的引用的是jstl-1.2-sources.jar,这下找到问题了。于是用jstl-1.2.jar替换,果然,问题解决。我查看的这个日志位于:C盘.IntelliJIdea2019.1\system\tomcat\(项目部署到tomcat时的名字,在部署时控制台可以查看到)\logs下一个名字为localhost