在第一篇文章《Jakarta Struts簡介》中,我大致分析了Struts框架,討論了它所能完成的功能,還瀏覽了組成Struts的各個組成部分。在第二篇文章《學習Jakarta Struts》中,我開始具體描述如何利用Struts來建立一個簡單應用的流程步驟。而本篇文章將會向大家示範如何將applicationResource文件中的文字訊息,透過Struts標籤在jsp頁面中顯示出來。
Action類別是連結Struts架構和應用程式中業務邏輯程式碼的橋樑。所以你應該盡量讓Action類別小巧簡單,因為真實應用中的邏輯處理應該是由單獨分離出來的邏輯層來完成的。假如你正在從事n層應用的開發,你當然希望層與層之間的介面越簡單越好。而事實上,Action類別中的主要方法"perform()"(1.1中為execute())卻有點暗示本方法應該做些什麼的意思。我們知道,每個Action類別都需要從 org.apache.struts.action.Action 繼續而來。在小型應用程式中,我們的Action類別很可能就只要繼續org.apache.struts.action.Action就足夠了;而在某些特定的複雜應用中,我就從我們所實現的Action類別中總結出來了一些通用特性。因此,在我看來,建構一個基底類別將這些通用特性的程式碼實作出來,讓應用程式中所用到的所有Action類別不直接繼續org.apache.struts.action.Action,而繼續這個完成了一些通用特性的基底類別以實現程式碼重用,是一個相當不錯的設計。我在StrutsSample中就應用了這種方法,建構了這樣的一個基類,該基類的方法在完成複雜邏輯的和簡單轉發請求的Action類中都可以使用。
package com.oreilly.actions;
import java.io.IOException;
import java. port java.util.MissingResourceException;
import java.util.Enumeration;
import java.util.Properties;
import java.rmi.RemoteException;
import javax.ejb.EJBHome;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest; .Action;
import org. apache.struts.action.ActionServlet;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionForward;
『 Struts開發時,所有Action類別都要繼續的基底類別。它把一些通常在實際應用中最有可能被用到的東西都考慮進來了。就這篇文章而言, 類別中一些與Struts並不是太緊密相關的方法將只做註釋而不會完整的實現,而從事開發工作的你,有愛好的話,請完成這些方法並應用這個類,將為你在實際專案中的開發快馬加鞭。注重,因為所有的Action類別都要從org.apache.struts.action.Action 繼續而來,所以我們的這個類別都一樣。
public abstract class AbstStrutsActionBase extends Action {
/ * 定義一些在struts-config.xml中記錄在案的
* 全域應用程式中皆可 的可可有名」> fgidia fido protected static 行 protected Context jndiContext = null;
/**
* 預設構造方法
*/
public AbstStrutsActionBase() {
}
㟀* Name)
throws NamingException, MissingResourceException {
// 為呼叫EJB對象,透過建構記錄JNDI資訊的Properties物件
// 取得初始環境資訊
if (jndiContext == null) {
ResourceBundle Resource =🜎 strutssample.properties");
Properties properties = new Properties();
properties.setProperty(
properties.setProperty(
properties.setProperty(
Context.INITIAL_CONTEXT_FACTORY,cU起
;
properties.setProperty(
Context.PROVIDER_URL,
資源.getString(Context.PROVIDER_URL));
properties.setProperty(
Context.SECURITY_PRINCipAL,
resource.getString(Context.SECURITY_PRINCIPAL));
resource.getString(Context.SECURITY_PRINCIPAL));
resource .getString(Context.SECURITY_CREDENTIAL) S));jndiContext = new InitialContext(properties);
}
注意程式碼:在真正的產品中,我們應該在此處考慮程式碼的健全性,將程式碼加入到try/catch區塊內,並記錄所有錯誤或重要資訊到系統日誌中。 jndiContext.lookup(jndiName));
凡凡}凡凡凡凡凡由於Action類別將是由Struts來呼叫的。的所有Action 都會做的機制通用,例如記錄日誌資訊。在本例中,我們一切都從簡,將其 Abstract之。
參數映射:其類型為ActionMapping,將在本Action做跳轉選擇用
參數actionForm:由Struts根據本次HTTP請求資料填充完成的ActionForm物件(可選,假設存在請求資料的話)
參數request:此Action所有處理的本次HTTP請求(物件)
參數response:此Action輸出資料所用到的HTTP回應(物件)
如果有I/O錯誤出現,則本方法拋出IOException異常 如果處理時發生servlet異常,本方法拋出ServletException異常
本方法處理完成請求後按照處理邏輯返回相應的頁面方向(對象)
公共抽象ActionForward執行( HttpServletRequest 請求,
HttpServletResponse 回應)
拋出IOException, ServletException;
}要么讓什麼乾點在這個方法上這樣在其中記錄日誌。 🎜{{ActionForwardforward = null;🎜 //只是簡單的記錄一些提示訊息到servlet log🎜 utsSv uts Base.perform() [Action Class: " 🎜 + this .getClass().getName()🎜 + " ]");🎜轟轟烈烈().log(🎜轟轟烈烈"AbstStrutsActionBase.perform() [表單類別: "🎜轟轟烈烈+ (表單== null ? "null" : form. getClass().getName())🎜+ " ]");🎜}🎜然後,我們再寫的每個Action類別都應該從AbstStrutsActionBase繼續,並處理邏輯編寫各自的執行方法。讓我們用LoginAction 為例,看看具體應該怎麼應用。 🎜🎜🎜package com.oreilly.actions;🎜🎜🎜import java.io.IOException;🎜import java.rmi.RemoteException;🎜🎜import javax.ejb.CreateException; 🎜 導入javax.servlet.ServletException; 🎜 導入javax.servlet .http.HttpServletRequest; 🎜 導入javax.servlet.http.HttpServletResponse; 🎜 導入javax.servlet.http.HttpServletResponse; 🎜 導入javag.apache.struts.action.ActionError; 🎜 導入oache. .struts.action.ActionForm;🎜導入org.apache.struts.action.ActionMapping;🎜導入org.apache.struts.action.ActionForward;🎜導入com.oreilly.forms.LoginForm;🎜🎜 /*🎜LoginAction 示範一個動作將如何被Struts架構所呼叫🎜在這個例子中,我們只是簡單的演示執行方法是如何呼叫、執行並返回的🎜*/🎜凡🎜public class LoginAction extends AbstStrutsActionBase {🎜🎜 接下來這個是驗證使用者的方法,本例中沒有具體實作。但一個典型的應用方案是呼叫JavaBean或EJB來完成。用來尋找EJB的lookup方法(在基底類別中完成的)應該在本方法中被調用,其傳回一個依據後台資料庫驗證使用者的介面。
參數類型String,要驗證的使用者名稱
以上就是學習Jakarta Struts 1.1 (三)的內容,更多相關文章請關注PHP中文網(www.php.cn)!