Struts2學習(四):Action執行的時候發生了什麼

來源:互聯網
上載者:User

通過前面的學習,對Struts2的工作流程大致有了一個瞭解,如所示:

中的“分流”是指根據我們所請求的url把request交給某個指定的action來處理。那麼在這個FilterDispatcher中還有一些什麼操作呢?在Struts1中我們經常要把一個ActionForm和一個Action相關聯,ActionForm中封裝了表單的所有值,並且這些都是在ActionServlet中完成的,因此我們在action中可以直接通過ActionForm得到表當中的值,那麼Struts2中又是怎麼做的呢?我們怎麼取得那些值呢?我發現可以這麼做:對錶單中每一個要擷取的值,在action中相應添加這樣的一個域,然後再設定相應的set和get方法,即採用javabean風格,貌似這個現在比較流行。比方說在前面的例子中,在sayHello.jsp的表單中有一個文本域,它的name=”name”,在我的action檔案HelloWorld.java中有一個域private String name;同時還分別設定了相應的setName和getName方法,現在我把setName方法改為如下:

public void setName(String name) {

       System.out.println("name:"+name);     

this.name = name;

}

OK,在瀏覽器中輸入http://localhost:8888/Struts/sayHello.jsp,這時我們發現後台列印出了name:CMTobby,CMTobby是我輸入的name的值,這說明setName方法被執行了,奇怪啊,我們根本沒有顯式的調用這個方法啊,它是什麼時候調用的呢?現在我們在setName方法裡面設定一個斷點,然後再在execute方法裡面設定一個斷點,再次運行我們的程式,結果顯示setName方法在execute方法前面執行。

接著,無聊的我又做了一些測試:

1.把setName改為setName1,結果頁面輸出:Hello null,並且setName1為執行

2.在sayHello.jsp的form之外加了一個文字框,取名address,在HelloWorld中增加相應的域address、setAddress方法和getAddress方法,通過斷點測試發現,setAddress方法不會執行。

基於以上測試,我認為在執行action的操作之前,首先會根據請求頁面的form表當中所包含的參數來調用action中相應的set****方法,比如說,本例中,form中有name屬性,因此會在執行execute之情調用setName方法,而address因為不在form中所以不會調用setAddress方法.

在處理完請求之後如何把使用者所請求的值回傳到結果頁面當中呢?在HelloWorld.jsp中我們用了<s:property value="name" />,嘿嘿,難道又是隱式的調用了getName方法嗎?於是我在HelloWorld.java的getName方法處設定了一個斷點,再次運行我們的程式,果然getName被隱式的調用了。

此外如果我把<s:property value="name" />中value的值改為別的如name1,這時頁面出錯,一片空白。我接著又把getName方法改為getName1,這時頁面仍然一片空白,因為取不到name屬性的值。如果我把<s:property value="name" />改為

<s:property value="name1" />,同時也把getName改為getName1,那麼顯示就正常了,這個表明架構會根據屬性的名字去調用相應的get方法。

上述機制是不是和我們前面所討論的BeanUtils的copyProperties方法一樣,實際上很多ORM架構都採用的這個機制,都是首先得到屬性名稱再調用相應的set或者get方法,而不是直接存取的域。

聯繫我們

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