【開發經驗】Struts常見錯誤及原因分析

來源:互聯網
上載者:User
1 異常 javax.servlet.jsp.JspException: Cannot retrieve mapping for action /Login (/Login是你的action名字)
可能原因:action沒有再struts-config.xml 中定義,或沒有找到匹配的action,例如在JSP檔案中使用 處理:如果出現上述異常,請查看struts-config.xml中的定義部分,有時可能是打錯了字元或者是某些不符合規則,可以使用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關聯時也會發生,如果沒有在action中指定name屬性,那麼就沒有name屬性和action相關聯。當然當action製作某些控制時,譬如根據參數值跳轉到相應的jsp頁面,而不是處理表單資料,這是就不用name屬性,這也是action的使用方法之一。

3 異常 No action instance for path /xxxx could be created
 
可能原因
 特別提示:因為有很多中情況會導致這個錯誤的發生,所以推薦大家調高你的web伺服器的日誌/調試層級,這樣可以從更多的資訊中看到潛在的、在試圖建立action類時發生的錯誤,這個action類你已經在struts-config.xml中設定了關聯(即添加了標籤)。
 
在struts-config.xml中通過action標籤的class屬性指定的action類不能被找到有很多種原因,例如:

定位編譯後的.class檔案失敗。Failure to place compiled .class file for the action in the classpath (在web開發中,class的的位置在r WEB-INF/classes,所以你的action class必須要在這個目錄下。例如你的action類位於WEB-INF/classes/action/Login.class,那麼在struts-config.xml中設定action的屬性type時就是action.Login).
拼字錯誤,這個也時有發生,並且不易找到,特別注意第一個字母的大小寫和包的名稱。
 
在struts-config.xml中指定的action類沒有繼承自Stuts的Action類,或者你自訂的Action類沒有繼承自Struts提供的Action類。

你的action類必須繼承自Struts提供的Action類。
 
你的classpath的問題。例如web server沒有發現你的資源檔,資源檔必須在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 方法
 
這個錯誤主要發生在表單提交的FormBean中,用struts標記時,在FormBean中必須有一個getUsername()方法。注意字母“U”。
5 Exception  javax.servlet.jsp.JspException: Cannot find ActionMappings or ActionFormBeans collection
 
可能原因
 不是標識Struts actionServlet的標記就是映射.do副檔名的標記或者兩者都沒有在web.xml中聲明。
 
在struts-config.xml中的打字或者拼字錯誤也可導致這個異常的發生。例如缺少一個標記的關閉符號/>。最好使用struts console工具檢查一下。
 
另外,load-on-startup必須在web.xml中聲明,這要麼是一個空標記,要麼指定一個數值,這個數值用來表servlet啟動並執行優先順序,數值越大優先順序越低。
 
還有一個和使用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的子項目。這常常發生在你在後面使用Struts的html標記。

另外要注意可能你不經意使用的無主體的標記,如,這樣網頁伺服器解析時就當作一個無主體的標記,隨後使用的所有標記都被認為是在這個標記之外的,如又使用了

還有就是在使用taglib引入HTML標記庫時,你使用的prefix的值不是html。 
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.