首頁 Java java教程 學習Jakarta Struts 1.1 (三)

學習Jakarta Struts 1.1 (三)

Dec 17, 2016 am 10:48 AM

  在第一篇文章《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,c​​U起​​
;


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)! 


本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

公司安全軟件導致應用無法運行?如何排查和解決? 公司安全軟件導致應用無法運行?如何排查和解決? Apr 19, 2025 pm 04:51 PM

公司安全軟件導致部分應用無法正常運行的排查與解決方法許多公司為了保障內部網絡安全,會部署安全軟件。 ...

如何使用MapStruct簡化系統對接中的字段映射問題? 如何使用MapStruct簡化系統對接中的字段映射問題? Apr 19, 2025 pm 06:21 PM

系統對接中的字段映射處理在進行系統對接時,常常會遇到一個棘手的問題:如何將A系統的接口字段有效地映�...

如何優雅地獲取實體類變量名構建數據庫查詢條件? 如何優雅地獲取實體類變量名構建數據庫查詢條件? Apr 19, 2025 pm 11:42 PM

在使用MyBatis-Plus或其他ORM框架進行數據庫操作時,經常需要根據實體類的屬性名構造查詢條件。如果每次都手動...

如何將姓名轉換為數字以實現排序並保持群組中的一致性? 如何將姓名轉換為數字以實現排序並保持群組中的一致性? Apr 19, 2025 pm 11:30 PM

將姓名轉換為數字以實現排序的解決方案在許多應用場景中,用戶可能需要在群組中進行排序,尤其是在一個用...

IntelliJ IDEA是如何在不輸出日誌的情況下識別Spring Boot項目的端口號的? IntelliJ IDEA是如何在不輸出日誌的情況下識別Spring Boot項目的端口號的? Apr 19, 2025 pm 11:45 PM

在使用IntelliJIDEAUltimate版本啟動Spring...

Java對像如何安全地轉換為數組? Java對像如何安全地轉換為數組? Apr 19, 2025 pm 11:33 PM

Java對象與數組的轉換:深入探討強制類型轉換的風險與正確方法很多Java初學者會遇到將一個對象轉換成數組的�...

使用TKMyBatis進行數據庫查詢時,如何優雅地獲取實體類變量名構建查詢條件? 使用TKMyBatis進行數據庫查詢時,如何優雅地獲取實體類變量名構建查詢條件? Apr 19, 2025 pm 09:51 PM

在使用TKMyBatis進行數據庫查詢時,如何優雅地獲取實體類變量名以構建查詢條件,是一個常見的難題。本文將針...

電商平台SKU和SPU數據庫設計:如何兼顧用戶自定義屬性和無屬性商品? 電商平台SKU和SPU數據庫設計:如何兼顧用戶自定義屬性和無屬性商品? Apr 19, 2025 pm 11:27 PM

電商平台SKU和SPU表設計詳解本文將探討電商平台中SKU和SPU的數據庫設計問題,特別是如何處理用戶自定義銷售屬...

See all articles