使用struts容易被忽略的問題

來源:互聯網
上載者:User
在建立Action的時候,從form角度去看有兩種可能,一種是帶form的Action,另一種是不帶form的Action,所以在使用這兩種Action的時候有幾種情況要注意:
1.比如做一個搜尋的功能,因為form裡需要提交的資料只有一個欄位,此種情況下也許為了簡單,你並不想為這一個欄位建一個form,所以你沒有建form,而是想在action裡通過request.getParameter("keyword")這種方式得到表單裡的值,因此你建了一個不帶form的action用來做Controller。在jsp頁面裡也許你會這樣寫:
<html:form action="/search">
<input type="text" name="keyword"/>
<input type="submit" value="搜尋"/>
</html:form>
運行一下,發現在訪問這個jsp頁面的時候報錯,為什麼呢?我的確有path="/search"的action啊,好下面我們來分析一下,當你使用struts的<html:form>標籤的時候,其實struts為你做了以下一些事情:
1.先看一下,web.xml裡配置struts中有以下程式碼片段:
    <init-param>
      <param-name>config</param-name>
      <param-value>/WEB-INF/struts-config.xml</param-value>
    </init-param>
  這個struts-config.xml檔案在Tomcat容器啟動完畢後就已經載入了,此時struts架構就可以讀取裡面的內容了。

2.當你訪問jsp頁面,並且頁面載入到<html:form>標籤的時候,就會觸發struts架構的部分程式運行:
(1)struts會根據form裡的action路徑在struts-config.xml檔案裡進行匹配,如果匹配不到,直接報錯。
(2)如果匹配到了,繼續尋找此action所對應的form。
(3)找到後將form的名字填充到普通HTML標籤裡的form的name屬性裡。
(4)與此同時,struts會按照此form的名字在指定的範圍內找有沒有對應的formbean存在。
(5)如果沒有找到formbean,struts就會按照這個form名字利用java的反射機制建立出一個formbean執行個體來。

3.看完上面的第2點後,我們來想一想如果在struts-config.xml裡找到了action而沒有找到對應的form,會發生什麼情況?在執行上面的(4)的時候會有異常出現,原因如下:
form的名字=null;
request.getAttribute(null); 
此時就引發了一個null 指標異常,顯而易見這是struts所不能容忍的,於是乎,struts在此之前就要判斷form的名字是不是null,是的話new一個自己的異常出來,大家也看的清楚些。
javax.servlet.ServletException: javax.servlet.jsp.JspException: Cannot retrieve definition for form bean null on action search.do
----------------------------------------------------------------------------------

如果把jsp裡的代碼改動如下:
<form action="search.do">    《---這裡換成了普通的form標籤
<input type="text" name="keyword"/>
<input type="submit" value="搜尋"/>
</form>
此時能夠正常運行,因為此種寫法不會觸發struts架構執行上面的那麼多的流程,自然也就能夠正常運行了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.