2013-10-22 53 views
7

標題可能聽起來有點模糊,但我會放棄它。我有2個的Servlet:Struts 1.2中的控制流程(生命週期)

  1. one.java:index.jsp
  2. two.java擴展了Action class轉發頁面成功或基於輸入失敗:擴展了ActionForm class,有getter和setter方法

我有3個JSP文件:

  1. 的index.jsp:是歡迎頁面,並詢問用戶名組合
  2. 的success.jsp:正所謂,如果組合是正確的
  3. failure.jsp:正所謂,如果組合是假

我有2個XML文件:

  1. web.xml中: DD
  2. struts-config.xml中: Struts的配置文件

我瞭解的web.xml的作品。我唯一的疑問是,哪一個,one.java /two.java是從struts.xml首先調用的?

我試圖調試並發現ActionForm類,即two.java被首先調用,然後它將該值返回到Action,即one.java

但是不是Action類應該先執行,然後是動作形式?我的意思是這是MVC架構如下。

請解釋。鏈接到非常高度詳細的工作流程將非常有幫助。

回答

12

這並不奇怪,ActionForm類被稱爲前Action - Struts的形式應該與用戶的數據調用Struts操作方法,任何一個具有4個參數的前填寫: - ActionForm

ActionMapping actionMapping, 
ActionForm actionForm, 
HttpServletRequest request, 
HttpServletResponse response 

第二個 - 應該準備好允許最遠的數據處理。我剛剛發現great sequence diagram說明所有的Struts生命週期階段:

enter image description here

簡而言之:

  1. 獲得客戶端的請求後,Struts的前端控制器調用RequestProcessor找出使用適當的動作和形式的struts-config。xml
  2. RequestProcessor獲取Struts表單對象(或創建它,如果它不存在),填充來自請求的數據,啓動驗證(如果存在)並調用適當的Struts動作。
  3. Struts動作執行所有進一步的必要操作。
+0

@PunjanSudhar,我不太瞭解在後端使用ExtJS – bsiamionau

+1

我的不好,我想補充一點。如果我們將EXTJS用作FrontEnd(我錯誤地提到了後端),則不會調用Actionform。我認爲這是因爲extjs中已經有數據驗證機制。所以不需要檢查表格光束。這個概念是正確的嗎? –

+0

你如何在前端使用ExtJS?其實我不相信Struts對Ext驗證有任何瞭解。 – bsiamionau