歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

詳細剖析Struts工作流程

詳細剖析Struts工作流程

 

1.Web客戶端提交數據到Tomcat,在form表單中需說明表單提交的action是*.do或*.action,mothod是post或get;

2.Tomcat接收Web客戶端提交的表單,將表單數據打包到HttpServletRequest和HttpServletResponse對象中,然後通過doPost或doGet方式把request、response提交到ActionServlet(ActionServlet是Struts內部封裝好的);

要使用Struts封裝的ActionServlet,需要在web.xml中配置ActionServlet,配置信息如下: 

 <servlet>
  <servlet-name>action</servlet-name>
  <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
  <init-param>
   <param-name>config</param-name>
   <param-value>/WEB-INF/struts-config.xml</param-value>
  </init-param>
  <init-param>
   <param-name>debug</param-name>
   <param-value>2</param-value>
  </init-param>
  <init-param>
   <param-name>detail</param-name>
   <param-value>2</param-value>
  </init-param>
  <load-on-startup>2</load-on-startup>
 </servlet>


 <!-- Standard Action Servlet Mapping -->
 <servlet-mapping>
  <servlet-name>action</servlet-name>
  <url-pattern>*.do</url-pattern>
 </servlet-mapping>

3.ActionServlet是struts的中央控制器,它任務如下:

(1)它負責截取Web客戶端提交的URL。比如login.jsp的action是login.do,然後根據URL從struts-config.xml中獲得配置信息。配置信息需要手動在struts-config.xml中配置,配置信息如下:

 <action-mappings>
  <action path="/login" type="com.tgb.struts.LoginAction" name="loginForm"
   scope="request">
   <forward name="success" path="/login_success.jsp"></forward>
   <forward name="error" path="/login_error.jsp"></forward>
  </action>
 </action-mappings>

login.jsp中action的url名必須和配置信息中的path名一致,這樣ActionServlet才能根據URL找到對應的Action,完成請求響應。

(2)創建ActionForm類的對象,用於收集表單數據,ActionForm類代碼如下:

package com.tgb.struts;

import org.apache.struts.action.ActionForm;

/**
 * 登錄ActionForm,負責表單收集數據
 * 表單的屬性必須和ActionForm中的get、set屬性一致
 * @author quwenzhe
 *
 */

public class LoginActionForm extends ActionForm {
 private String username;
 private String password;

 public String getUsername() {
  return username;
 }

 public void setUsername(String username) {
  this.username = username;
 }

 public String getPassword() {
  return password;
 }

 public void setPassword(String password) {
  this.password = password;
 }

}

創建後需要在struts-config.xml中配置ActionForm信息,這樣struts才能檢測到有ActionForm的存在,配置信息如下:

 <form-beans>
  <form-bean name="loginForm" type="com.tgb.struts.LoginActionForm" />
 </form-beans>

通過action-mappings中的scope屬性,把表單數據賦值給ActionForm。

(3)創建Action,Action類代碼如下:

package com.tgb.struts;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

/**
 * 登錄Action 負責獲得表單數據,調用業務邏輯,返回轉向視圖
 *
 * @author quwenzhe
 *
 */
public class LoginAction extends Action {

 @Override
 public ActionForward execute(ActionMapping mapping, ActionForm form,
   HttpServletRequest request, HttpServletResponse response)
   throws Exception {
  LoginActionForm laf = (LoginActionForm) form;
  String username = laf.getUsername();
  String password = laf.getPassword();

  if ("admin".equals(username) && "admin".equals(password)) {
   // 登錄成功
   return mapping.findForward("success");
  } else {
   // 登錄失敗
   return mapping.findForward("error");
  }
 }

}

action的信息已經在strut-config.xml中的action-mappings中配置。並且在配置信息中我們已經說明,forward name為"success"的對應login_success.jsp頁面,forward name為"error"的對應login_error.jsp頁面。

(4)調用action的execute方法,將ActionForm中的信息提交到業務層控制器Action中處理

4.Action是struts的業務層控制器,它獲得ActionServlet提交的ActionForm,對ActionForm中的信息進行處理,將處理結果返回到ActionServlet。這裡返回的是forward name為"success"或"error"的ActionFoward對象。

5.ActionServlet根據Action返回的ActionFoward,選擇需要跳轉的頁面。

6.將跳轉頁面渲染,顯示在Web客戶端。

溫馨提示:如果修改了strus-config.xml文件,重啟Tomcat服務器後修改才能生效。我在這吃虧了,希望大家能引以為戒。

最後把項目的源碼下載地址奉上,希望能幫助大家理解Struts的工作流程。

------------------------------------------分割線------------------------------------------

免費下載地址在 http://linux.linuxidc.com/

用戶名與密碼都是www.linuxidc.com

具體下載目錄在 /2015年資料/2月/27日/詳細剖析Struts工作流程/

下載方法見 http://www.linuxidc.com/Linux/2013-07/87684.htm

------------------------------------------分割線------------------------------------------

struts2文件上傳(保存為BLOB格式) http://www.linuxidc.com/Linux/2014-06/102905.htm

Struts2的入門實例 http://www.linuxidc.com/Linux/2013-05/84618.htm

Struts2實現ModelDriven接口 http://www.linuxidc.com/Linux/2014-04/99466.htm

遇到的Struts2文件下載亂碼問題 http://www.linuxidc.com/Linux/2014-03/98990.htm

Struts2整合Spring方法及原理 http://www.linuxidc.com/Linux/2013-12/93692.htm

Struts2 注解模式的幾個知識點 http://www.linuxidc.com/Linux/2013-06/85830.htm

Struts 的詳細介紹:請點這裡
Struts 的下載地址:請點這裡

Copyright © Linux教程網 All Rights Reserved