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