Java异常归纳
1、使用Tomcat運(yùn)行“播報(bào)哥架構(gòu)”出現(xiàn)的兩大異常
1.1 監(jiān)聽(tīng)器異常
詳細(xì)情況:部署好Maven項(xiàng)目,啟動(dòng)TOMCAT提示如下錯(cuò)誤
java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
錯(cuò)誤原因及解決辦法:
網(wǎng)上資料基本上都是說(shuō)沒(méi)有導(dǎo)入spring-web.jar,但是我的項(xiàng)目中是添加了spring-web.jar的。一直想不到辦法,后面改了些地方,該異常消失了,但又出現(xiàn)了下面說(shuō)的Zip異常,搞了大概有3天,后面有人解決了,問(wèn)下別人才發(fā)現(xiàn)原來(lái)是工程部署錯(cuò)誤。現(xiàn)在想想其實(shí)當(dāng)時(shí)是太焦急了,處理這個(gè)異常的思路應(yīng)該是:“先找Tomcat下部署的該項(xiàng)目的lib文件夾,檢查其中是否有spring-web.jar,結(jié)果是沒(méi)有的,那里連lib文件夾都沒(méi)有,然后再去百度,你會(huì)發(fā)現(xiàn)原來(lái)是工程部署配置問(wèn)題,接著答案就出來(lái)了”。
1.1.1 maven項(xiàng)目部署后沒(méi)有依賴的jar包
1、部署后,WEB-INF/lib 里如果沒(méi)有maven依賴的 jar 包,請(qǐng)檢查工程部署配置:
2、如果沒(méi)有看到 maven 依賴配置,打開(kāi) pom.xml 檢查打包類(lèi)型是否是war:
1.2 Zip異常
詳細(xì)情況:部署好Maven項(xiàng)目,啟動(dòng)TOMCAT提示如下錯(cuò)誤
java.util.zip.ZipException: invalid LOC header (bad signature)
錯(cuò)誤原因及解決辦法:到網(wǎng)上搜索資料,發(fā)現(xiàn)該錯(cuò)誤的原因是jar包由于位置原因被破壞了,然后我就將Maven倉(cāng)庫(kù)中的jar包全部刪除,接著打開(kāi)項(xiàng)目,進(jìn)行“update project”操作,使得jar包重新下載到Maven倉(cāng)庫(kù)中,最后發(fā)現(xiàn)錯(cuò)誤解決了。(如若有問(wèn)題,就復(fù)制一個(gè)能正常運(yùn)行Maven項(xiàng)目的電腦中的倉(cāng)庫(kù),將該倉(cāng)庫(kù)的jar全部復(fù)制到自己的倉(cāng)庫(kù)中,然后再重復(fù)上述步驟)
2、服務(wù)器內(nèi)存異常
詳細(xì)情況:啟動(dòng)TOMCAT提示如下錯(cuò)誤
Exception in thread "http-apr-8080-exec-3" java.lang.OutOfMemoryError: PermGen space
錯(cuò)誤原因及解決辦法:原因就是服務(wù)器內(nèi)存過(guò)小,將以下信息配置好即可。
配置信息:-Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=128m
3、JDK版本異常
詳細(xì)情況:
java.lang.UnsupportedClassVersionError: com/hyq/sm/TestSM : Unsupported major.minor version 51.0
錯(cuò)誤原因及解決辦法:這個(gè)問(wèn)題是由較高版本的JDK編譯的java class文件試圖在較低版本的JVM上運(yùn)行產(chǎn)生的錯(cuò)誤。第一個(gè)辦法是在自己電腦上新建一個(gè)項(xiàng)目,然后將數(shù)據(jù)全部復(fù)制過(guò)來(lái)即可;第二個(gè)辦法是改變JDK的版本為1.7或更高。
4、Mybatis的mapper配置文件命名空間異常
詳細(xì)情況:
Attribute "namespace" must be declared for element type "mapper".
錯(cuò)誤原因及解決辦法:當(dāng)mybatis的jar包版本在3.2或更低時(shí),就會(huì)報(bào)此錯(cuò)誤。將mybatis的jar包換成3.4.4版本即可;
5、hibernate相關(guān)類(lèi)找不到異常
詳細(xì)情況:
Property 'validationMessageSource' threw exception; nested exception is java.lang.NoClassDefFoundError: org/hibernate/validator/spi/resourceloading/ResourceBundleLocator
錯(cuò)誤原因及解決辦法:hibernate-validator的jar包版本過(guò)低(版本小于等于4.1.0),沒(méi)有ResourceBundleLocator類(lèi)。更換成hibernate-validator-4.3.0.Final.jar即可;
6、mybatis運(yùn)行時(shí)異常
詳細(xì)情況:
org.apache.ibatis.reflection.ReflectionException: Error instantiating null with invalid types () or values (). Cause: java.lang.NullPointerException
錯(cuò)誤原因及解決辦法:寫(xiě)一對(duì)一查詢時(shí),association的javaType屬性沒(méi)有寫(xiě);或?qū)懸粚?duì)多查詢時(shí),collection的ofType屬性沒(méi)有寫(xiě);
7、xml語(yǔ)法分析異常
詳細(xì)情況:
org.xml.sax.SAXParseException: The string "--" is not permitted within comments
錯(cuò)誤原因及解決辦法:是因?yàn)槎嘈凶⑨屩袑?xiě)了”--”字符串;只要連在一起的橫杠個(gè)數(shù)大于等于2,就會(huì)出錯(cuò)。
8、mybatis和spring整合異常
詳細(xì)情況:
java.lang.AbstractMethodError: org.mybatis.spring.transaction.SpringManagedTransaction.getTimeout()Ljava/lang/Integer;
錯(cuò)誤原因及解決辦法:jar包兼容性問(wèn)題,把mybatis和spring的整合jar包改為高版本1.3.0就可以了。
9、復(fù)制屬性異常
詳細(xì)情況:
org.apache.commons.beanutils.ConversionException: No value specified for 'Date'
錯(cuò)誤原因及解決辦法:使用“BeanUtils.copyProperties(u1, u2);”的時(shí)候,由于u2有一個(gè)屬性是Date類(lèi)型,并且為空,所以引發(fā)此異常。跟u1無(wú)關(guān);
注意:u1是目標(biāo)對(duì)象,u2才是源對(duì)象。
10、SQL語(yǔ)句亂碼
詳細(xì)情況:使用Mybatis框架操作MySql數(shù)據(jù)庫(kù)時(shí),項(xiàng)目編碼和數(shù)據(jù)庫(kù)編碼都是utf-8,連接的URL也設(shè)置了編碼類(lèi)型,但SQL語(yǔ)句就是亂碼。
錯(cuò)誤原因及解決辦法:排查許久,才發(fā)現(xiàn)原來(lái)數(shù)據(jù)庫(kù)表中的字段名是數(shù)據(jù)庫(kù)的關(guān)鍵字,將其改正,SQL語(yǔ)句就正常了。
11、String轉(zhuǎn)化為Date出錯(cuò)(*)
詳細(xì)情況:使用SimpleDateFormat類(lèi),將其格式設(shè)為"YYYY-MM-dd",將指定日期字符串轉(zhuǎn)化為Date的時(shí)候,得到的Date日期卻與實(shí)際日期不符。
錯(cuò)誤原因及解決辦法:要將格式Y(jié)YYY設(shè)為yyyy,目前也不知原因?yàn)楹巍?/p>
12、文件下載中文文件名不顯示
詳細(xì)情況:無(wú)
錯(cuò)誤原因及解決辦法:大體的原因就是header中只支持ASCII,所以我們傳輸?shù)奈募仨毷茿SCII,當(dāng)文件名為中文時(shí),必須要將該中文轉(zhuǎn)換成ASCII。按照以下做法即可解決該問(wèn)題,
13、運(yùn)行mybatis時(shí)不能顯示log4j日志
詳細(xì)情況:無(wú)
錯(cuò)誤原因及解決辦法:因?yàn)槲业捻?xiàng)目是web項(xiàng)目,所以要在網(wǎng)頁(yè)上運(yùn)行才會(huì)顯示日志;而普通的Java項(xiàng)目直接運(yùn)行就會(huì)顯示日志;其次,注意要把log4j的級(jí)別配成debug,jar包只需要導(dǎo)入log4j.jar即可,其余的log4j-api、log4j-core、slf4j的jar包都不需要;
備注:該文檔一級(jí)標(biāo)題為黑體三號(hào)加粗,二級(jí)標(biāo)題和三級(jí)標(biāo)題為宋體正文三號(hào)加粗,概括字體為楷體三號(hào)加粗,內(nèi)容為楷體三號(hào),關(guān)鍵語(yǔ)句為楷體三號(hào)紅色字體,異常為Consolas三號(hào)紅色字體,小型描述性文字為PingFang SC 小四字體,大標(biāo)題為宋體標(biāo)題20號(hào)。
總結(jié)
- 上一篇: charCodeAt() 方法
- 下一篇: 全国高温已持续30天 影响9亿人:三伏天