Java web 三大框架异常学习总结
生活随笔
收集整理的這篇文章主要介紹了
Java web 三大框架异常学习总结
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
struts2.1.8+hibernate2.5.6+spring3.0(ssh2三大框架)常見異常原因和解決方案
http://www.cnblogs.com/lanxuezaipiao/p/3619949.html經過暑期兩個月對ssh2的學習和OA項目的實戰訓練,我對J2EE技 術中著名的三大框架ssh2已漸漸有所理解和掌握。從搭建ssh2框架環境開始到寫出第一個簡單的ssh2登陸程序,到最后整個OA項目的實戰, 期間遇到了重重困難和阻礙, 就連搭建環境就花了整整一天的功
夫,而成功運行第一個ssh2程序更花了好幾天,當然我相信這是大部分學習ssh2這門技術 都會經歷的過程,相信也是每個程序員學習任何一門新的技術都會走的路程。如今,項目已成功收尾,在這欣喜之余,我也愿意將我學習ssh2中遇到的一些常見 異常問題總結如下
,希望大家可以少走一些彎路,或者在遇到問題時可以及時解決。
PS:我的編程運行環境是MyEclipse8.6 + Tomcat6.1.3 + MySql
問題一:出現異常 java.lang.NoSuchMethodError: antlr.collections.AST.getLine()問題
原因:是JAR包的沖突,包 antlr2.7.2 與 antlr2.7.6 沖突(一個是tomcat下的包,一個是自己引入ssh2的包)
解決方案:刪除包antlr2.7.2 即可,具體方法:
在MyEclipse下,windows-->preferences-->在文本框中搜索struts2-->選擇antlr2.7.2-->remove
或者直接在tomcat該應用的目錄WEB-INF\lib 刪除 antlr2.7.2.jar?
?
問題二:異常java.lang.NullPointerException
原因:空指針異常產生的主要原因如下:
(1) 當一個對象不存在時又調用其方法會產生異常
? ?obj.method() // obj對象不存在
(2) 當訪問或修改一個對象不存在的字段時會產生異常
? ?obj.method() ?// method方法不存在
解決方案:調試,找出異常產生的具體原因,再根據具體原因具體解決。
問題三:異常The Struts dispatcher cannot be found. ?
This is usually caused by using Struts tags without the associated filter. Struts tags are only usable when the request has passed through its servlet filter, which initializes the?
Struts dispatcher needed for this tag. - [unknown location]
原因:struts2的過濾器映射路徑寫錯
解決方案:在web.xml中配置struts2的過濾器如下:
<filter-mapping>
? ? ? ? ? ? ? <filter-name>struts2</filter-name>
? ? ? ? ? ? ? <url-pattern>/*</url-pattern>
</filter-mapping>
注意:<url-pattern>這里一定要是 /*
?
問題四:org.hibernate.util.JDBCExceptionReporterorg.hibernate.util.JDBCExceptionReporter.logExceptions
(JDBCExceptionReporter.java:101) - Unknown type '246 in column 2 of 6 in binary-encoded result set.
原因:用mysql數據庫時,某些字段值使用類型decimal、bigint等
解決方案:用mysql數據庫時,避免字段值用decimal、bigint等,否則用hibernate執行hql語句時就會出現上面的異常
?
問題五:經過action跳轉后得到的頁面中css和js的樣式引入不能應用
原因:經過action跳轉后頁面的路徑改變了,不是你頁面存放路徑
解決方案:最好用絕對路徑來引入css和js,如引入css可用
<link href="${pageContext.request.contextPath}/css/css.css" rel="stylesheet" type="text/css" />
PS:也可使用項目名稱來作為絕對路徑,如項目名稱為OA,則上面引入也可如下:
<link href="/OA/css/css.css" rel="stylesheet" type="text/css" />
似乎更簡介,但個人不推薦使用,因為一旦你的項目名更換后,所有頁面中的OA都要跟著替換,十分繁瑣。
?
問題六:使用struts2的標簽<s:textfield />時,不能在一行顯示多個文本框(一個textfield占一行)
原因:初學struts2,在頭腦中一直在想一個問題,就是對于struts2 ,當應用其自身的標簽時,例如:
<s:form>
? ?<s:textfield name="a"></s:textfield>
</s:form>
當查看源代碼時為:
<form>
<table>
? ? <tr><td><input type="text" name=a/></td></tr>
</table>
</form>
自動添加了table tr td 標簽,所有不能一行顯示多個文本框。
解決方案:在struts2中加入了theme(主題)的概念,通過設置不同的主題,可以讓struts的代碼輸出不同的html代碼,你也就相應得到不同的布局效果。
疑問1、Struts2有哪些主題?
Struts2提供了三種主題,ajax, simple, xhtml,它默認的是xhtml主題,當然你可以寫任意個你自己的主題,我們稱之為自定義主題
疑問2、Struts2主題怎么改?
有兩種方法可以解決.
1.簡單的方法(也很實用)
在Struts.xml中,加上下一行代碼就可以了
<constant name="struts.ui.theme" value="simple" />
代表所有的頁面采用的都是 simple主題了,這時它輸出的頁面,不回添加任何多余的代碼,比如 table tr td 等,我們就可以像其他編輯頁面的方式編輯頁面的風格。
或者 在 <s:form 中添加 theme
<s:form theme="simple"></s:form>
struts2每個標簽都有theme屬性
2.自定義 theme,還未研究》。。。。
問題七
通過頁面表單提交一些要修改數據庫中數據的操作,表單提交之后,程序運行一切正常,而且,后臺也打印出了sql語句,例如:insert into SYS.HNCITEM05 (SNAME, BATE, SONO, SDATE, SNO) values (?, ?, ?, ?, ?),但是,數據庫中卻查不到剛才插入的數
據。就是說:數據并沒有真正寫入數據庫。
?原因:hibernate配置錯誤
?解決方案:Hibernate中設置事務自動提交
即在Hibernate配置文件中進行如下設置 :
?<property name="connection.autocommit">true</property>
?(<!-- 設置事務自動提交(默認為false,false的話,程序對數據庫的操作都不會作為事務提交) -->)
?一切就OK了。
?
問題八
異常Caused by: org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'userDao' must be of type [com.changetech.dao.impl.UserDaoImpl], but was actually of type [$Proxy16]
原因如下:
? ? ? ? ?@Resource(name="userDao")
? ? ? ? ?protected UserDaoImpl userDao;
? ? ? ? ?public void setUserDao(UserDaoImpl userDao) {
? ? ? ? ? ? ? ? ? ?this.userDao = userDao;
? ? ? ? ?}
原來在定義Dao時,沒有用接口,而直接使用的是Dao的實現類
解決方案:改為如下:
? ? ? ? ?@Resource(name="userDao")
? ? ? ? ?protected UserDao userDao;
? ? ? ? ?public void setUserDao(IUserDao userDao) {
? ? ? ? ? ? ? ? ? ?this.userDao = userDao;
? ? ? ? ?}
問題得到了解決
?
問題九:更新時報錯 (The given object has a null identifier)
原因:對于自增字段的主鍵通常不能自動將值傳遞到頁面,即在更新時缺少主鍵,需要手動設置
解決方案:在頁面中加上下面這句即可:
<s:hidden name="book.bookId"></s:hidden>(不會在頁面顯示出來,但值傳遞過來了)
?
問題十:js實現圖片不能顯示時使用替換圖片顯示
解決方案:使用img標簽的onerror屬性來處理默認圖片,示例如下:
復制代碼
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>替換示例</title>
</head>
<body>
<img id="img" src="001.jpg" οnerrοr="showerrimg(this);" >
<script language="JavaScript">
function showerrimg(obj){
? ? ?var errorimg = "error.jpg";//替換圖片地址
? ? ?obj.src = errorimg;
}
</script>
</body>
</html>
復制代碼
問題十一:MyEclipse中修改項目名稱后,如何重新部署到 tomcat?
解決方案:首先修改工程名(直接按F2即可),然后選擇工程名--右鍵--Properties--MyEclipse--Web--把Web Context-root的名字改成新的項目名稱, 再把tomcat的工程刪除了,最后重新部署下即可。
問題十二:在jsp頁面中用request方式向struts的action中傳遞不了中文參數,例如下面代碼:
復制代碼
? ? <silver;mso-highlight:silver;mso-font-kerning:0pt;" > ?
? ? a href="findBooksByConditionAction.action?page=<s:property value="%{pageBean.currentPage+1}"/> ?
? ? &property=0pt;" ><%=session.getAttribute(0pt;" >"property")mso-font-kerning:0pt;" >%>&condition=mso-font-kerning:0pt;" > ?
? ? <%=session.getAttribute(mso-font-kerning:0pt;" >"condition")color:#BF5F3F;mso-font-kerning:0pt;" >%> ?
? ? &category=0pt;" ?><%=session.getAttribute(0pt;" ?>"category")mso-font-kerning:0pt;" ?>%>&subCategory=mso-font-kerning:0pt;" ?> ?
? ? <%=session.getAttribute(mso-font-kerning:0pt;" ?>"subCategory")color:#BF5F3F;mso-font-kerning:0pt;" ?>%>0pt;" ?>" ? ? ?
? ? class="right-font08">下一頁</background:silver;mso-highlight:silver;mso-font-kerning:0pt;" ?>amso-font-kerning:0pt;" ?>> ?
復制代碼
這樣傳遞過去的中文是亂碼
解決方案:放在input文本域里面傳遞過去,即
? ? <input type="hidden" name="condition" value="<%=session.getAttribute("condition")%>"/> ?
? ? <input type="hidden" name="category" value="<%=session.getAttribute("category")%>"/> ?
? ? <input type="hidden" name="subCategory" value="<%=session.getAttribute("subCategory")%>"/> ?
? ? <input type="hidden" name="property" value="<%=session.getAttribute("property")%>"/> ?
然后直接
<a href="findBooksByConditionAction.action?page=<s:property value="%{pageBean.currentPage+1}"/>"class="right-font08">下一頁</a>
但發現值竟然沒有傳過去(空指針報錯),經問同事后知道,要想input里的值傳過去必須提交表單才可,僅采用這種超鏈接方式進行跳轉的值是傳不過去的,于是將超鏈接換為
<a href="javascript:queryByConn('<s:property value="%{pageBean.currentPage+1}"/>');" class="right-font08">下一頁</a>
js中相應加上該函數的實現:
復制代碼
? ? function queryByConn(page) { ?
? ? ??
? ? document.bookForm.action="findBooksByConditionAction.action?page="+page; ?
? ? ??
? ? ? ? document.bookForm.submit(); ?
? ? ??
? ? } ?
復制代碼
在js中將表單提交即可,這樣亂碼問題就解決了。
?
問題十三:hibernate中出現異常
org.hibernate.LazyInitializationException: could not initialize proxy - no Session
at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:57)
at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:111)
原因:hibernate配置中 many-to-one的默認選項是 lazy = "proxy"
解決方法:<many-to-one> ?及 <set> 中設置 lazy="false"即可
?
問題十四:如何建立svn服務器
解決方案:首先當然要安裝客戶端svn(小烏龜TortoiseSVN )和服務器端svn(Subversion),然后在命令行下輸入以下命令:
1、 ?svnadmin oa(oa是存放各個版本信息的文件夾名稱,自定義)
2、 ?svnserve ?–d –r oa(打開svn服務器)
?
PS:可能遇到的問題:authorized failed(權限認證失敗)
解決方案:在oa目錄下找到passwd文件,在里面加上幾個用戶
用戶名=密碼(自己定義用戶名和密碼)
并將svnserve.conf里的password-db = passwd這句前面的#去掉即可(前面不能留有空格)
========
三大框架常見錯
http://blog.csdn.net/mr_li13/article/details/49447207Unable to load configuration. - [unknown location]
? ? at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:58)
? ? at org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.java:374)
? ? at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:418)
? ? at org.apache.struts2.dispatcher.FilterDispatcher.init(FilterDispatcher.java:190)
? ? at?
解決問題步驟:
第一,看看是否導入Junit4這個單元測試包沒,沒有導入再運行。否則進入第二步
第二,jar包沖突,檢查項目中的jar包是否同時有?
xerce.jar和xml-apis.jar這兩個jar包,有的話刪除xerce.jar?
第三,缺了包,檢查struts.xml中是否有配置
有的話看看項目中是否有引入struts2-spring-plugin-2.1.6.jar,沒有的話引入即可
第二個:Line: 177 - java/net/PlainSocketImpl.java:177:-1
這個問題只要你機子聯網就可以跑起來,但是你一沒網就報錯了..具體如下:
2010-1-24 21:51:42 org.apache.tomcat.util.digester.SetPropertiesRule begin
警告: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.j2ee.server:struts2' did not find a matching property.
2010-1-24 21:51:42 org.apache.catalina.core.AprLifecycleListener init
信息: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the Java.library.path: F:\jdk.1.6\Java\bin;.;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:
\WINDOWS;F:/jdk.1.6/Java/bin/../jre/bin/client;F:/jdk.1.6/Java/bin/../jre/bin;F:\jdk.1.6\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\ATI Technologies\ATI.ACE\Core-Static;C:\Program Files\Common?
Files\Thunder Network\KanKan\Codecs;C:\Program Files\StormII\Codec;C:\Program Files\StormII
2010-1-24 21:51:43 org.apache.coyote.http11.Http11Protocol init
信息: Initializing Coyote HTTP/1.1 on http-8080
2010-1-24 21:51:43 org.apache.catalina.startup.Catalina load
信息: Initialization processed in 2063 ms
2010-1-24 21:51:43 org.apache.catalina.core.StandardService start
信息: Starting service Catalina
2010-1-24 21:51:43 org.apache.catalina.core.StandardEngine start
信息: Starting Servlet Engine: Apache Tomcat/6.0.16
2010-1-24 21:51:45 com.opensymphony.xwork2.config.providers.XmlConfigurationProvider register
信息: Parsing configuration file [struts-default.xml]
2010-1-24 21:51:45 com.opensymphony.xwork2.config.providers.XmlConfigurationProvider register
信息: Parsing configuration file [struts-plugin.xml]
2010-1-24 21:51:45 org.apache.catalina.core.StandardContext filterStart
嚴重: Exception starting filter struts2
Class: java.NET.PlainSocketImpl
File: PlainSocketImpl.java
Method: connect
Line: 177 - java/net/PlainSocketImpl.java:177:-1
?at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadConfigurationFiles(XmlConfigurationProvider.java:835)
?at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadDocuments(XmlConfigurationProvider.java:131)
?at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.init(XmlConfigurationProvider.java:100)
?at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reload(DefaultConfiguration.java:130)
?at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:52)
?at org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.java:395)
?at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:452)
?at org.apache.struts2.dispatcher.FilterDispatcher.init(FilterDispatcher.java:201)
?at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:275)
?at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:397)
?at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:108)
?at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3709)
?at org.apache.catalina.core.StandardContext.start(StandardContext.java:4356)
?at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
?at org.apache.catalina.core.StandardHost.start(StandardHost.java:719)
?at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
?at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
?at org.apache.catalina.core.StandardService.start(StandardService.java:516)
?at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
?at org.apache.catalina.startup.Catalina.start(Catalina.java:578)
?at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
?at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
?at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
?at java.lang.reflect.Method.invoke(Method.java:597)
?at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
?at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
Caused by: struts.apache.org - Class: java.Net.PlainSocketImpl
File: PlainSocketImpl.java
Method: connect
Line: 177 - java/net/PlainSocketImpl.java:177:-1
?at com.opensymphony.xwork2.util.DomHelper.parse(DomHelper.java:123)
?at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadConfigurationFiles(XmlConfigurationProvider.java:830)
?... 25 more
解決辦法:解決不聯網無法啟動struts2問題
*將struts.xml中的聲明部分
<!DOCTYPE struts PUBLIC
? ? "-//Apache Software Foundation//DTD StrutsConfiguration 2.1//EN"
? ? "http://struts.apache.org/dtds/struts-2.1.dtd">
替換為 在struts2-core-2.xxx.jar包中struts-default.xml的文件聲明
<!DOCTYPE struts PUBLIC
? ? "-//Apache Software Foundation//DTD StrutsConfiguration 2.0//EN"
? ? "http://struts.apache.org/dtds/struts-2.0.dtd">
****說白了也就是說要保持一致!!
========
整合三大框架出現的一些常見的問題及解決的方案
http://blog.csdn.net/u012814005/article/details/42234649①、今天在整合三大框架的時候,出現了兩個異常,在網上看了很多的文章。所有的文章都指向hibernate的問題,于是我就從這幾方面去排查,一:hibernatejar包,二:hibernate配置文件,三:hibernate的實體映射文件(我用的是注解的方式來的)。經過一一排查
后發現,我把id的類型寫成了string的類型。
org.hibernate.exception.SQLGrammarException: could not extract ResultSet
at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.Java:80)
at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49)
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:126)
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:112)
at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:91)
at org.hibernate.loader.Loader.getResultSet(Loader.java:2065)
at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1862)
Caused by: com.MySQL.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'mydb.tbl_employee' doesn't exist
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
at com.mysql.jdbc.Util.getInstance(Util.java:386)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1054)
②、在做刪除功能時,發現數據庫已經刪除了數據,但是跳轉的時候卻出現404的異常。經過檢查,發現在sturts.xml配置文件中<result name="listAllEmps">/employee!listAllEmps.action</result>,因為result的type屬性默認的值是dipatcher,而我需要是重定向到
這個action下,所以添加了
type="redirect"就可以了
======== 《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀
總結
以上是生活随笔為你收集整理的Java web 三大框架异常学习总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Windbg dump分析 学习总结
- 下一篇: C# List 嵌套学习总结