SSM+Shiro遇到的那些坑

这几天尝试自己搭建一套框架,一方面巩固一下基础,一方面尝试下各种新版本,结果就是——悲催,遇到了各种问题,解决起来简直吐血,以下总结下各种坑。

一、版本

1、VC层——Spring SpringMVC 4.1.6.RELEASE
2、M层——Mybatis 3.3.1
3、日志——log4j2.5
4、权限控制——Shiro 1.3.2
5、数据连接池——阿里 Druid1.0.27

好吧,用到的基本都是最新版本,JDK 1.8+eclipse neno 2+tomcat 8.5.9+maven

二、坑

1、第一坑就是上来就把pom和各种配置文件都弄好了,因为是参考的成熟项目,以为只是换下版本号即可,结果悲催了。pom就不贴了,反正网上一大把,找找就好了。

配置完后,启动Tomcat,Duang!启不来...报错如下(只贴关键部分,下面一大堆就不贴了)

java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost]]  
    at java.util.concurrent.FutureTask.report(Unknown Source)  
    at java.util.concurrent.FutureTask.get(Unknown Source)  

Unknown Source是什么鬼?开始baidu,结果大多数人的报错上还有jar包缺失提示的,我这里是啥也没有。但问题原因基本确定, maven导入的jar包问题,一般是jar损坏读取不了,但pom上是不会显示错误的。

我的没有说哪个jar包,所以只能一点点筛选,一般来说,先把除ssm核心jar以外的jar包注释,然后运行,可以启动,然后再一个个模块试别的,最终确定是shiro-web的问题。将本地maven下面关于这个jar包的文件夹删除,然后重新触发maven更新,问题解决。

2、解决之后,服务器起来了,但又开始大段的报错,部分问题很好处理,一般是配置文件中的引入class路径错误,建议每个class路径写完之后,按ctrl鼠标悬浮在上,看是否可以跳转,如果可以跳转,说明路径没错。

3、终于把所有路径问题处理了,然后log4j2又开始罢工了,网上大部分log4j2的介绍上都是说配置文件怎么弄,web.xml怎么弄,但忽略了一点,就是log4j2在servlet2.3上运行会有点问题,但maven自动构建出来的web项目就是servlet2.3的...于是更换web.xml文件为3,0,之所以要换3.0,就是因为在3.0上log4j2已经不用再web.xml上进行配置了,否则在servlet2.5上还要配监听器和过滤器,具体配置请baidu吧,多的是。

4、log4j2弄好了,然后启动,这回倒是不报错了,Java Resource上却莫名多了个x,但其中却没有任何报错的内容,查看Problem界面,提示Project Facets版本问题,于是乎右键点开项目——Properties——Project Facts,由于将web.xml换成了3.0,这里也需要对Dynamic Web Module的版本做下更改,现在还是2.3的状态,点击之后,修改——神马?改不了?

Cannot change version of project facet Dynamic Web Module to 3.0

继续上网查询,原来这个要改配置文件org.eclipse.wst.common.project.facet.core.xml 在eclipse workspace 项目下的.setting文件夹中

  
  
以上两行改动即可,改动完有时候会发现eclipse还没有更新,重启一下或者使用Maven-Update Project就好了。但如果是使用后者,你会发现,update之后,这些项又变回去了。还需在pom.xml文件中加上maven的插件。

	
		mints
		
			
				org.apache.maven.plugins
				maven-compiler-plugin
				3.1
				
					1.8
					1.8
				
			
		
	

这样之后,终于没有小红叉了,但是,又掉进了另一个坑。

5、启动Tomcat之后,服务器是启动了,但竟然没有加载项目,项目部署进去了点击各种按钮也发布不上去,根本没有反应。这下头彻底大了,只能再次baidu,但发现答案都没有什么用。重启、重装tomcat都没有解决。于是还是把问题定位在项目上,查看刚刚改动的地方。惊奇的发现,Project Facts中的Dynamic Web Module竟然自动变成了3.1,。重新改回3.0之后,Update Project,又变成3.1了。确定肯定是跟刚才加入的插件有关,但插件的版本调了几个之后都发现无效。最后只能将web.xml中servlet的版本也调成3.1,这下项目终于能够正常加载上了。

以上5个大坑填了之后,至少项目跑起来了,也对自己有个记录,毕竟处理了很久,今后再遇到至少有点解决思路了





你可能感兴趣的:(Bugs)