【struts2】Action的生命周期


   Struts2的Action的生命周期是:Struts2為每個請求都重新初始化一個Action的實例。可以稍微改造一下代碼來驗證一下。

  • 給HelloWorldAction加上一個public無參的構造方法,在里面輸出一句話。

    大家都知道,一個Java類如果沒有寫構造方法,那么會有一個默認的public無參的構造方法,這里只是把它明確的寫出來了,因此這么做,並沒有改變Action的任何功能,只是想看一下到底什么時候,Action會被初始化。示例代碼如下:

public HelloWorldAction(){  
    System.out.println("HelloWorldAction被初始化");  
}  
  • 然后在execute方法上也加入一個打印Action自己這個對象實例的語句,示例代碼如下:
public String execute() throws Exception {  
    System.out.println(this);  
    this.businessExecute();  
    return "toWelcome";  
}  

  注意:大家都知道在Java基礎知識里面,“System.out.println(this);”這句話,在打印一個對象實例的時候,實際上是調用的這個類的toString方法,但是HelloWorldAction類沒有實現toString方法,所以,會調用到Object的toString方法。Object的toString方法會打印出自己的全類名和Object的hashcode方法的返回值,這個hashcode方法返回一個數字,只要這個數字不同,則被打印的對象就絕不是同一個對象。

  • 修改做完之后,重新啟動Tomcat,仔細察看后台的輸出信息,你會發現啟動的時候,並沒有打印出來那句“HelloWorldAction被初始化”,這說明了Action的初始化並不是在Tomcat啟動的時候進行的。

   接下來按照如下順序操作:

  (1)訪問http://localhost:9080/helloworld/s2impl/login.jsp,在頁面上填寫賬號和密碼,然后點擊提交按鈕,會跳轉到歡迎頁面。這個時候去察看后台的輸出信息,如下:

HelloWorldAction被初始化  
cn.javass.action.action.HelloWorldAction@922804  
用戶輸入的參數為===account=test,password=111111,submitFlag=login  

  (2)接下來,按F5來刷新這個歡迎頁面,點擊重試按鈕,這樣就相當於再次訪問HelloWorldAction,再察看后台的輸出信息,如下:

HelloWorldAction被初始化  
cn.javass.action.action.HelloWorldAction@922804  
用戶輸入的參數為===account=test,password=111111,submitFlag=login  
HelloWorldAction被初始化  
cn.javass.action.action.HelloWorldAction@18e8541  
用戶輸入的參數為===account=test,password=111111,submitFlag=login 

  “HelloWorldAction被初始化”這句話被打印了兩次,說明HelloWorldAction對象的構造方法被調用了兩次。而且兩次打印的toString分別是“cn.javass.action.action.HelloWorldAction@922804”和“cn.javass.action.action.HelloWorldAction@18e8541”,這說明了為兩次web請求服務的HelloWorldAction對象不是同一個。

  因此,Struts2中的Action在每一次web請求的時候都要新建一個實例。

  參考資料:http://www.iteye.com/topic/1124526


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM