在第一篇文章《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)!

新興技術對Java的平台獨立性既有威脅也有增強。 1)雲計算和容器化技術如Docker增強了Java的平台獨立性,但需要優化以適應不同雲環境。 2)WebAssembly通過GraalVM編譯Java代碼,擴展了其平台獨立性,但需與其他語言競爭性能。

不同JVM實現都能提供平台獨立性,但表現略有不同。 1.OracleHotSpot和OpenJDKJVM在平台獨立性上表現相似,但OpenJDK可能需額外配置。 2.IBMJ9JVM在特定操作系統上表現優化。 3.GraalVM支持多語言,需額外配置。 4.AzulZingJVM需特定平台調整。

平台獨立性通過在多種操作系統上運行同一套代碼,降低開發成本和縮短開發時間。具體表現為:1.減少開發時間,只需維護一套代碼;2.降低維護成本,統一測試流程;3.快速迭代和團隊協作,簡化部署過程。

Java'splatformindependencefacilitatescodereusebyallowingbytecodetorunonanyplatformwithaJVM.1)Developerscanwritecodeonceforconsistentbehavioracrossplatforms.2)Maintenanceisreducedascodedoesn'tneedrewriting.3)Librariesandframeworkscanbesharedacrossproj

要解決Java應用程序中的平台特定問題,可以採取以下步驟:1.使用Java的System類查看系統屬性以了解運行環境。 2.利用File類或java.nio.file包處理文件路徑。 3.根據操作系統條件加載本地庫。 4.使用VisualVM或JProfiler優化跨平台性能。 5.通過Docker容器化確保測試環境與生產環境一致。 6.利用GitHubActions在多個平台上進行自動化測試。這些方法有助於有效地解決Java應用程序中的平台特定問題。

類加載器通過統一的類文件格式、動態加載、雙親委派模型和平台無關的字節碼,確保Java程序在不同平台上的一致性和兼容性,實現平台獨立性。

Java編譯器生成的代碼是平台無關的,但最終執行的代碼是平台特定的。 1.Java源代碼編譯成平台無關的字節碼。 2.JVM將字節碼轉換為特定平台的機器碼,確保跨平台運行但性能可能不同。

多線程在現代編程中重要,因為它能提高程序的響應性和資源利用率,並處理複雜的並發任務。 JVM通過線程映射、調度機制和同步鎖機制,在不同操作系統上確保多線程的一致性和高效性。


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

Dreamweaver CS6
視覺化網頁開發工具

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

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

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

SublimeText3漢化版
中文版,非常好用