2010年9月15日 星期三

Struts 教學

Struts 目前是 Apache Jakarta 的一個開源軟體,Struts 針對了 JSP, Servlet 改進

簡單說他的目的就是要減少運用 MVC model 開發的 WEB AP 的時間

在學習上這個 Framework 比較容易,比起 Hibernate 和 Spring 來說......

針對

1. Controller,Struts 統一將所有的請求不論是GET 或 POST 一律轉送到      ActionServletActionServlet 則透過組態檔 Struts-config.xml 
   來進行各個請求的配置


2. View,Struts 同樣提供了很多的 JSP 標籤庫


3. Model,主要分為 Action Form、JavaBean or EJB、Action

接下來介紹一下要怎嚜讓你能使用 Struts

首先先到官網下載  http://jakarta.apache.org/,選擇版本之後

只需下載 Full Distribution 文件就好了

下載完成後市一個 ZIP 檔,解壓縮後裡面的 lib 資料夾就是所有的類別庫了

基本上我使用的是 NetBeans 6.8,其中內建已經有 Struts 1.3.8 了

所以我就來介紹一下在 NetBeans 下如何建立一個 Struts

首先
New Project > Java WEB > WEB Application >輸入專案名稱和選擇伺服器之類的

Next > 勾選 Struts 1.3.8 之後下面會出現幾個設定

其中有一個名稱叫做 Action URL pattern 預設是 *.do


也就是你的請求如果是 .do 結尾的都會透過 ActionServlet


另外一個名稱叫做 Application Resource 預設是 com.myapp.struts.ApplicationResource


這個是資源檔 ApplicationResource 是檔名,前面的那串是路徑而副檔名為 .properties

接著建立好之後,就可以來撰寫第一個 Struts 了

我們先在根目錄下建立一個 first 資料夾 (((不一定要  我的習慣 : )

在 first 目錄下新增一個 login.jsp  以下是大致內容

<form action="/funinStruts/login.do" method="get" >
     User : <input type="text" name="user" /><br />
     <input type="submit" value="SEND" />
</form> 


注意 form 的 action 屬性"/funinStruts/login.do"
funinStruts 是我的 WEB AP 名稱
所有請求 *.do 都會透過 ActionServlet,所以在來看看組態檔的設定



     
        
            
            
        
    

以上的 action 標籤設定了 path 屬性值為"/login" 表示所有請求 login.do 的請求

都會呼叫type設定的 LoginAction 來處理

而 forward 標籤則是呼叫完 Action 後所轉發的資源


接下來是 LoginAction 的程式:
package fsc.first;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
//Action 必須繼承 org.apache.struts.action.Action
public class LoginAction extends org.apache.struts.action.Action {

    //與組態檔中設定的 forward 標籤的 name 屬性一樣的值
    private static final String SUCCESS = "success"; 
    private static final String ERROR = "error";
    
    //覆寫 execute method, 回傳值是一個 ActionForward 物件
    public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        if(request.getParameter("user").equals("ayu")){ 
            return mapping.findForward(SUCCESS); //透過 mapping 找出轉發資源
        }else{
            return mapping.findForward(ERROR);
        }
    }
}

最後再 first 下各便建立一個 success.jsp 和 error.jsp

如果在 login.jsp 輸入的不是 ayu 就會被轉送到 error.jsp

沒有留言:

張貼留言