****废话很多,想跳转ctrl+F “问题可以明确为”或“解决方案”****
****非常私人的记录,不接受任何嘲讽****
配置:IntelliJ IDEA、Tomcat 7.0.88、Maven 4.0.0
有用到spring4.1.6,Mybatis。数据库是mongodb,日志是log4j。
web-app version 2.5.
问题描述:读web.xml时出错。
1. 一开始是log4j.properties读不出来,我以为是不能用classpath: /conf/log4j/...这种格式,于是把文件挪了个位置,解决。
2. 接着告诉我某个jar冲突了,翻了翻tomcat配置,找到一个和项目里同样的jar,把它从tomcat里挪了出去,解决。
3. 【重点】然后!!!自己写的两个filter报错。在tomcat localhost log里:
Exception starting filter xxxx(类名)
exception 类别是ClassNotFoundException。
解决历程:
第一反应是web.xml里filter写错了,于是紧急查找。IDEA里可按住ctrl后点击类名查找源。结果发现,并没有出错。
下面是正确的filter设置(类名和包都已化名):
<filter>
<filter-name>aFilterWrittenSelf</filter-name>
<filter-class>com.packageone.filter.AFilterWrittenSelf</filter-class>
</filter>
于是搜了半天,其中坎坷此处略过,只请容许我吐槽一下度娘的引擎。接下来发现,并不是filter出错了,而是打包的webapp.war出错了。
关于war。
在IDEA里跑Tomcat,有一种跑法是:
将project打成war,然后war解压到tomcat中,再运行其中内容。
打开这个war就发现,在WEB-INF文件夹下,只有lib文件夹和web.xml文件。
于是,自然找不到filter!事实上完全不存在classes文件夹,也就是说,前面出现的问题1问题2也都是这个原因。
那么现在,问题可以明确为:
在idea打包maven项目时,WEB-INF文件夹中没有classes文件夹。
知道了这一点,就找到了解决方向——
才怪。
搜了半天,网上全是没有class文件或是忘记建classes文件夹,并没有人说这个该怎么解决。
不过最后还是摸索了出来。
解决方案:
前奏:其余配置请参照网上各类基础教程。
正文:File->Project Structure (ctrl+alt+shift+s)->Artficts
如果其中已经有artfict存在,请点击红色减号键删除。然后,点击绿色加号键,点击Web Application: Archive,新建unnamed。
然后对其进行配置,最终配置如图。
1.添加deirctory contents
点击略色加号键,Directory Content,选择需要打包的文件夹(内含两个-INF和web.xml的那个)
2.添加WEB-INF (是解决没有classes文件夹的关键)
在右侧Available Elements里双击【‘这是你的项目名’compile output】 向war中添加WEB-INF。
保存!完成!用tomcat跑跑看!成功!!——
感言:太辛酸了,作为spring啊mybatis啊全部都靠自学,之前也只接触过一个ssm项目(无Maven),加之之前用的是eclipse,现在是第一次用idea,真的是完全体小白。辛酸。深感自己是个zz