一、.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-hant/n/332687.html