一、Action請求的概念
Action是Struts2框架的核心,用於處理客戶端的請求。Action主要負責接收來自客戶端的請求,並根據請求參數進行處理,最後生成響應結果。Action請求包含有一些特有的屬性,如請求參數、請求方式、請求頭和請求正文等。
Action的主要作用就是從View層接收用戶請求,然後根據具體的業務邏輯進行處理,並將處理結果返回給用戶。Action處理請求時可以通過模型驅動方式、值棧方式和屬性方式進行數據的傳遞。
下面是Action示例代碼:
public class UserAction extends ActionSupport { private String username; private int age; public String execute() { // 業務邏輯處理 return SUCCESS; } // getter和setter方法 }
二、Action請求的流程
當用戶在瀏覽器中發送請求時,請求將傳遞到Servlet容器中,容器根據請求中的URL找到對應的Servlet,然後根據struts.xml配置文件中定義的Action與URL的映射關係,找到對應的Action進行處理。
當Action接收到請求後,首先會根據請求參數進行處理,並將處理結果封裝在ActionContext中的ValueStack中。然後通過調用配置文件中定義的結果類型,將數據傳遞給對應的視圖進行展示。
下面是Action請求的流程圖:
三、Action請求的參數傳遞
Action可以通過多種方式接收客戶端請求中的參數,常用的有URL參數、表單參數、JSON數據等。
1. URL參數
URL參數是指在請求URL中帶有的參數,通常以問號(?)連接在URL後面,參數名和參數值之間用等號(=)相連,多個參數之間使用&符號連接。
例:https://example.com/user?id=1&name=Tom
在Action中獲取URL參數的方式如下:
public class UserAction extends ActionSupport { private int id; private String name; public String execute() { HttpServletRequest request = ServletActionContext.getRequest(); id = Integer.parseInt(request.getParameter("id")); name = request.getParameter("name"); // 業務邏輯處理 return SUCCESS; } // getter和setter方法 }
2. 表單參數
表單參數是指客戶端提交表單時,表單中包含的參數。表單傳遞參數的方式有GET和POST兩種,通過request.getParameter()方法獲取參數值。
例: <form action="user" method="post"> <input type="text" name="username"> <input type="text" name="age"> <input type="submit" value="提交"> </form>
在Action中獲取表單參數的方式如下:
public class UserAction extends ActionSupport { private String username; private int age; public String execute() { HttpServletRequest request = ServletActionContext.getRequest(); username = request.getParameter("username"); age = Integer.parseInt(request.getParameter("age")); // 業務邏輯處理 return SUCCESS; } // getter和setter方法 }
3. JSON參數
當客戶端向伺服器發送JSON格式的數據時,通常使用POST方式,通過request.getInputStream()方法獲取JSON數據流,並使用第三方工具庫轉換為Java對象。
例: var data = { username: 'Tom', age: 18 } var xhr = new XMLHttpRequest(); xhr.open('POST', 'user', true); xhr.send(JSON.stringify(data));
在Action中獲取JSON參數的方式如下:
public class UserAction extends ActionSupport { private String username; private int age; public String execute() throws Exception { HttpServletRequest request = ServletActionContext.getRequest(); InputStream inputStream = request.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); String json = reader.lines().collect(Collectors.joining(System.lineSeparator())); JSONObject jsonObj = JSONObject.fromObject(json); username = jsonObj.getString("username"); age = jsonObj.getInt("age"); // 業務邏輯處理 return SUCCESS; } // getter和setter方法 }
四、Action請求的常用配置
1. URL與Action的映射關係
Struts2框架通過在struts.xml配置文件中定義URL與Action的映射關係,使得請求能夠找到對應的Action進行處理。
例: <action name="user" class="com.example.UserAction"> <result name="success">/success.jsp</result> </action>
2. 請求方式
Struts2框架支持多種請求方式,如GET、POST、PUT、DELETE等,可以通過method屬性指定使用的請求方式。
例: <action name="user" class="com.example.UserAction" method="post"> <result name="success">/success.jsp</result> </action>
3. 請求參數
Struts2框架支持對請求參數類型和名稱的限定,可以通過param標籤進行配置。
例: <action name="user" class="com.example.UserAction"> <param name="id">{1,2,3}</param> <result name="success">/success.jsp</result> </action>
4. 結果類型
Struts2框架支持多種結果類型,如JSP、JSON、XML等,可以通過result標籤進行配置。
例: <action name="user" class="com.example.UserAction"> <result name="success" type="json"> <param name="root">data</param> </result> </action>
五、總結
本文對Action請求進行了詳細的闡述,包括Action的概念、流程、參數傳遞和常用配置等方面。在使用Struts2框架時,Action是開發者最常用的組件之一,精通Action的使用將顯著提高開發效率和代碼質量。
原創文章,作者:WEXYP,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/333633.html