.action是什麼文件

一、.action文件的概述

.action是Struts框架的核心文件之一,是指一個控制器的動作。在Struts中,.action文件用來處理各種動作請求並向客戶端發送響應結果,可以看成是一個中間人角色,它接收JSP頁面的請求和參數並將其解析,進而調用相關的Java類和方法來實現業務邏輯和實現結果的返回。.action文件通常由不同的請求方法組成,而每個請求方法對應著一個Java類的方法。它是整個Struts框架的核心組成部分之一,起著控制整個應用程序流程的作用。

在使用Struts框架創建的Web應用程序中,通常需要將請求與響應解耦,使用專門的控制器來處理。而.action文件就是這個專門的控制器,它負責從網路中接收客戶端的請求並將其轉發到相應的視圖或者業務邏輯組件。基於MVC架構的Struts框架,通過.action文件將負責控制層的action類和視圖層的JSP頁面聯繫起來,將業務邏輯與用戶界面完全分離。

總而言之,.action文件是Struts框架中的一個非常重要的文件,它是連接用戶請求和業務邏輯的橋樑,是整個Struts應用程序的核心組成部分。

二、.action文件的結構

一個.action文件通常有一個名稱,一個命名空間(命名空間可選),一個或多個請求方法(methods),以及一個或多個全局結果(global results)。

其中,名稱就是文件的名稱,例如「login.action」;命名空間表示該.action文件所處的位置,以便Struts框架能夠正確載入文件;請求方法是指.action文件所對應的方法,它會像任何其他方法一樣被執行。而全局結果則是可以被任何一個方法共享的結果,它們位於.action文件的外部,可以通過文件的名稱來訪問。

以一個簡單的例子來講解.action文件的結構,我們來看看一個login.action文件的結構:

<!--action文件-->
<!--名稱為「login」-->
<!--命名空間為default-->
<action name="login" class="com.example.LoginAction" method="execute">
    <!--經過Struts處理後,將轉發到名稱為success的結果-->
    <result name="success">/success.jsp</result>
    <!--經過Struts處理後,將轉發到名稱為error的結果-->
    <result name="error">/error.jsp</result>
</action>

在上面的例子中,我們定義了一個名為「login」的action文件,它的命名空間為「default」,請求方法為「execute」,意味著當使用「/login.action」這個URL訪問時,將會執行LoginAction類中的execute方法。在執行之後,如果結果是「success」,則將轉發到/success.jsp頁面,否則將轉發到/error.jsp頁面。

三、.action文件的用途

.action文件的用途非常廣泛。它可以處理各種類型的請求,從簡單的表單提交到AJAX請求等等。例如,我們可以使用.action文件來處理以下情況:

1. 處理表單提交

在Web開發中,表單是非常常見的交互方式。當用戶提交表單時,我們需要將表單數據發送到伺服器端進行處理。使用.action文件可以輕鬆處理表單的提交,處理方式如下:

// JSP頁面
<form action="login.action" method="post">
    <input type="text" name="username">
    <input type="password" name="password">
    <input type="submit" value="提交">
</form>

// 對應的action文件
<action name="login" class="com.example.LoginAction" method="execute">
    <result name="success">/success.jsp</result>
    <result name="error">/error.jsp</result>
</action>

// LoginAction類
public class LoginAction {
    private String username;
    private String password;
 
    public void setUsername(String username) {
        this.username = username;
    }
 
    public void setPassword(String password) {
        this.password = password;
    }
 
    public String execute() {
        if ("admin".equals(username) && "123456".equals(password)) {
            return "success";
        } else {
            return "error";
        }
    }
}

在上面的例子中,我們定義了一個表單,其提交的地址為「login.action」。因為表單使用的是POST方法,所以.action文件中需要使用「method=』post』」來接收請求。在LoginAction中,我們定義了兩個屬性「username」和「password」,並通過setter方法設置,這樣在執行「execute」方法時就可以訪問到這些屬性的值。根據這些參數,我們決定返回何種結果,最終結果由.action文件指定。

2. 處理AJAX請求

在現代Web應用程序中,AJAX請求是非常常見的。使用.action文件可以輕鬆處理這些請求。需要注意的是,在.action文件中,我們需要使用「@Result(type=’json’)」來返回JSON格式的數據,例如:

// JSP頁面
<button onclick="getData()">獲取數據</button>

<script>
function getData() {
    var xhr = new XMLHttpRequest();
    xhr.onreadystatechange = function() {
        if (xhr.readyState == 4 && xhr.status == 200) {
            var data = JSON.parse(xhr.responseText);
            // do something with data
        }
    }
 
    xhr.open("POST", "ajax.action", true);
    xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    xhr.send("data=123");
}
</script>

// 對應的action文件
<action name="ajax" class="com.example.AjaxAction" method="execute">
    <result name="success" type="json"></result>
</action>

// AjaxAction類
public class AjaxAction {
    private String data;
 
    public void setData(String data) {
        this.data = data;
    }
 
    public String execute() {
        // do something with data
        return "success";
    }
}

在上面的例子中,我們定義了一個按鈕,其點擊事件會使用AJAX請求來獲取數據。使用XMLHttpRequest對象,我們可以使用POST方式發送一個包含「data=123」的數據包。在.action文件中,我們定義了一個名為「ajax」的動作,將會執行AjaxAction類中的execute方法,並返回JSON格式的數據。

四、.action文件的注意事項

1. 命名規範

根據Struts框架的規範,.action文件的名稱應該以「.action」結尾,並且要有具有明確的意義。例如,如果你正在處理一個表單提交,請將文件命名為「login.action」而不是「form.action」。

2. 使用前後綴配置

在Struts的配置文件中,可以使用「」標記來配置文件的前綴和後綴。例如,如果我們在配置文件中使用了以下內容,則所有的.action文件的路徑都會自動添加「/pages/」前綴和「.jsp」後綴:

<constant name="struts.action.extension" value="action"/>
<constant name="struts.action.prefix" value="/pages/"/>
<constant name="struts.action.suffix" value=".jsp"/>

3. 可配置的參數

.action文件可以傳遞一些參數以便在執行方法時使用。例如,我們可以在.action文件中添加以下內容以傳遞一個名為「userId」的參數:

<action name="user" class="com.example.UserAction" method="execute">
    <param name="userId">123</param>
    <result name="success">/success.jsp</result>
    <result name="error">/error.jsp</result>
</action>

在UserAction中,我們需要使用如下代碼來獲取參數:

public class UserAction extends ActionSupport {
    private int userId;
 
    public void setUserId(int userId) {
        this.userId = userId;
    }
 
    public String execute() {
        // do something with userId
        return SUCCESS;
    }
}

4. 防止XSS攻擊

使用.action文件處理用戶提交的請求時,需要注意防止XSS攻擊。Struts已經在標記中設置了默認的防護機制,但是仍然需要在代碼中使用轉義字元來保護自己的應用程序。例如,在JSP頁面中,我們應該使用「<c:out value=”${xxx}”/>」來輸出敏感數據,而不是使用「${xxx}」。

五、總結

.action文件是Struts框架的核心組成部分之一,它是連接用戶請求和業務邏輯的橋樑,是整個Struts應用程序運行的關鍵。.action文件可以用來處理各種類型的請求,包括表單提交、AJAX請求等等。在使用.action文件時,需要注意命名規範、使用前後綴配置、可配置的參數以及防止XSS攻擊等問題。

原創文章,作者:LMHBG,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/332687.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
LMHBG的頭像LMHBG
上一篇 2025-01-24 18:47
下一篇 2025-01-27 13:34

相關推薦

  • vue下載無後綴名的文件被加上後綴.txt,有後綴名的文件下載正常問題的解決

    本文旨在解決vue下載無後綴名的文件被加上後綴.txt,有後綴名的文件下載正常的問題,提供完整的代碼示例供參考。 一、分析問題 首先,需了解vue中下載文件的情況。一般情況下,我們…

    編程 2025-04-29
  • 如何在Java中拼接OBJ格式的文件並生成完整的圖像

    OBJ格式是一種用於表示3D對象的標準格式,通常由一組頂點、面和紋理映射坐標組成。在本文中,我們將討論如何將多個OBJ文件拼接在一起,生成一個完整的3D模型。 一、讀取OBJ文件 …

    編程 2025-04-29
  • Python中讀入csv文件數據的方法用法介紹

    csv是一種常見的數據格式,通常用於存儲小型數據集。Python作為一種廣泛流行的編程語言,內置了許多操作csv文件的庫。本文將從多個方面詳細介紹Python讀入csv文件的方法。…

    編程 2025-04-29
  • Python程序文件的拓展

    Python是一門功能豐富、易於學習、可讀性高的編程語言。Python程序文件通常以.py為文件拓展名,被廣泛應用於各種領域,包括Web開發、機器學習、科學計算等。為了更好地發揮P…

    編程 2025-04-29
  • 為什麼用cmd運行Java時需要在文件內打開cmd為中心

    在Java開發中,我們經常會使用cmd在命令行窗口運行程序。然而,有時候我們會發現,在運行Java程序時,需要在文件內打開cmd為中心,這讓很多開發者感到疑惑,那麼,為什麼會出現這…

    編程 2025-04-29
  • Python zipfile解壓文件亂碼處理

    本文主要介紹如何在Python中使用zipfile進行文件解壓的處理,同時詳細討論在解壓文件時可能出現的亂碼問題的各種解決辦法。 一、zipfile解壓文件亂碼問題的根本原因 在P…

    編程 2025-04-29
  • Python將矩陣存為CSV文件

    CSV文件是一種通用的文件格式,在統計學和計算機科學中非常常見,一些數據分析工具如Microsoft Excel,Google Sheets等都支持讀取CSV文件。Python內置…

    編程 2025-04-29
  • Python如何導入py文件

    Python是一種開源的高級編程語言,因其易學易用和強大的生態系統而備受青睞。Python的import語句可以幫助用戶將一個模塊中的代碼導入到另一個模塊中,從而實現代碼的重用。本…

    編程 2025-04-29
  • Python合併多個相同表頭文件

    對於需要合併多個相同表頭文件的情況,我們可以使用Python來實現快速的合併。 一、讀取CSV文件 使用Python中的csv庫讀取CSV文件。 import csv with o…

    編程 2025-04-29
  • Python寫文件a

    Python語言是一種功能強大、易於學習、通用並且高級編程語言,它具有許多優點,其中之一就是能夠輕鬆地進行文件操作。文件操作在各種編程中都佔有重要的位置,Python作為開發人員常…

    編程 2025-04-29

發表回復

登錄後才能評論