Sturts
中的常見異常:
1?
異常
?javax.servlet.jsp.JspException:?Cannot?retrieve?mapping?for?action?/Login?
(
/Login
是你的
action
名字)
?
可能原因
:action
沒有再
struts-config.xml?
中定義,或沒有找到匹配的
action
,例如在
JSP
文件中使用
?<HTML:FORM&NBSP;ACTION="LOGIN.DO".
將表單提交給
LOGIN.DO
處理
:
如果出現(xiàn)上述異常,請查看
struts-config.xml
中的定義部分,有時可能是打錯了字符或者是某些不符合規(guī)則,可以使用
struts?console
工具來檢查。
?
2?
異常
?org.apache.jasper.JasperException:?Cannot?retrieve?definition?for?form?bean?null?
?
可能原因
:??
這個異常是因為
Struts
根據
struts-config.xml
中的
mapping
沒有找到
action
期望的
form?bean
。大部分的情況可能是因為在
form-bean
中設置的
name
屬性和
action
中設置的
name
屬性不匹配所致。換句話說,
action
和
form
都應該各自有一個
name
屬性,并且要精確匹配,包括大小寫。這個錯誤當沒有
name
屬性和
action
關聯(lián)時也會發(fā)生,如果沒有在
action
中指定
name
屬性,那么就沒有
name
屬性和
action
相關聯(lián)。當然當
action
制作某些控制時,譬如根據參數(shù)值跳轉到相應的
jsp
頁面,而不是處理表單數(shù)據,這是就不用
name
屬性,這也是
action
的使用方法之一。
3?
異常
?No?action?instance?for?path?/xxxx?could?be?created?
?
可能原因
?
?
特別提示:因為有很多中情況會導致這個錯誤的發(fā)生,所以推薦大家調高你的
web
服務器的日志
/
調試級別,這樣可以從更多的信息中看到潛在的、在試圖創(chuàng)建
action
類時發(fā)生的錯誤,這個
action
類你已經在
struts-config.xml
中設置了關聯(lián)(即添加了標簽)。
?
?
在
struts-config.xml
中通過
action
標簽的
class
屬性指定的
action
類不能被找到有很多種原因,例如:
?
定位編譯后的
.class
文件失敗。
Failure?to?place?compiled?.class?file?for?the?action?in?the?classpath?(
在
web
開發(fā)中,
class
的的位置在
r?WEB-INF/classes
,所以你的
action?class
必須要在這個目錄下。例如你的
action
類位于
WEB-INF/classes/action/Login.class,
那么在
struts-config.xml
中設置
action
的屬性
type
時就是
action.Login).?
拼寫錯誤,這個也時有發(fā)生,并且不易找到,特別注意第一個字母的大小寫和包的名稱。
?
?
在
struts-config.xml
中指定的
action
類沒有繼承自
Stuts
的
Action
類,或者你自定義的
Action
類沒有繼承自
Struts
提供的
Action
類。
?
你的
action
類必須繼承自
Struts
提供的
Action
類。
?
?
你的
classpath
的問題。例如
web?server
沒有發(fā)現(xiàn)你的資源文件,資源文件必須在
WEB-INF/classes/
目錄下。
?
?
4
異
????????????????????????????????????????????????????????????????????????????????????????????????????????
常
?javax.servlet.jsp.JspException:?No?getter?method?for?property?username?of?bean?org.apache.struts.taglib.html.BEAN?
?
可能原因
?
?
沒有位
form?bean
中的某個變量定義
getter?
方法
?
?
這個錯誤主要發(fā)生在表單提交的
FormBean
中,用
struts
標記
<HTML:TEXT&NBSP;PROPERTY=”USERNAME”>
時,在
FormBean
中必須有一個
getUsername()
方法。注意字母“
U
”。
?
5?Exception??javax.servlet.jsp.JspException:?Cannot?find?ActionMappings?or?ActionFormBeans?collection?
?
可能原因
?
?
不是標識
Struts?actionServlet
的標記就是映射
.do
擴展名的標記或者兩者都沒有在
web.xml
中聲明。
?
?
在
struts-config.xml
中的打字或者拼寫錯誤也可導致這個異常的發(fā)生。例如缺少一個標記的關閉符號
/>
。最好使用
struts?console
工具檢查一下。
?
?
另外,
load-on-startup
必須在
web.xml
中聲明,這要么是一個空標記,要么指定一個數(shù)值,這個數(shù)值用來表
servlet
運行的優(yōu)先級,數(shù)值越大優(yōu)先級越低。
?
?
還有一個和使用
load-on-startup
有關的是使用
Struts
預編譯
JSP
文件時也可能導致這個異常。
?
6?Exception?
?javax.servlet.jsp.JspException:?Cannot?find?bean?org.apache.struts.taglib.html.BEAN?in?any?scope?
?Probable?Causes?
?
試圖在
Struts
的
form
標記外使用
form
的子元素。這常常發(fā)生在你在后面使用
Struts
的
html
標記。
另外要注意可能你不經意使用的無主體的標記,如
<HTML:FORM&NBSP;…&NBSP; />
,這樣
web?
服務器解析時就當作一個無主體的標記,隨后使用的所有標記都被認為是在這個標記之外的,如又使用了
<HTML:TEXT&NBSP;PROPERTY=”ID”>
還有就是在使用
taglib
引入
HTML
標記庫時,你使用的
prefix
的值不是
html
。
?
?