您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“Struts2如何處理AJAX請求”,內容詳細,步驟清晰,細節處理妥當,希望這篇“Struts2如何處理AJAX請求”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
Struts2整合AJAX有2種方式:
使用type="stream"類型的<result>
使用JSON插件
使用type="stream"類型的<result> 獲取text
<body> <form> 學號:<input type="text" id="no"><br /> 姓名:<input type="text" id="name"><br /> <button type="button" id="btn">查詢成績</button> </form> <p id="score"></p> <script src="js/jquery-3.4.1.min.js"></script> <script> $("#btn").click(function () { $.ajax({ url:"HandlerAction", type:"get", data:{"no":$("#no").val(),"name":$("#name").val()}, dataType:"text", error:function () { console.log("ajax請求失敗!") }, success:function (data) { $("#score").text(data); } }) }); </script> </body>
url要和struts.xml中action的name、包的namespace對應。
action
public class HandlerAction extends ActionSupport { private int no; private String name; private InputStream inputStream; public int getNo() { return no; } public void setNo(int no) { this.no = no; } public String getName() { return name; } public void setName(String name) { this.name = name; } public InputStream getInputStream() { return inputStream; } public void setInputStream(InputStream inputStream) { this.inputStream = inputStream; } @Override public String execute() throws Exception { //此處缺省連接數據庫查詢總分 String result = name + "同學,你的總分是:680"; //設置要返回的數據。我們傳給瀏覽器的數據含有中文,需要設置utf-8編碼,來解決中文亂碼 inputStream=new ByteArrayInputStream(result.getBytes("utf-8")); return SUCCESS; } }
前端向后臺發送了2個字段:no、name
action需要設置2個同名的成員變量,并提供對應的getter、setter方法,才能接收到前端傳來的數據。
需要一個InputStream類型的成員變量,并提供對應的getter、setter,用于向瀏覽器返回數據。
需要一個處理請求的方法(execute),設置返回給瀏覽器的數據。
struts.xml
<struts> <package name="action" namespace="/" extends="struts-default"> <action name="HandlerAction" class="action.HandlerAction"> <result name="success" type="stream"> <!-- 設置返回給瀏覽器的數據類型 --> <param name="contentType">text/html</param> <!--指定獲取InputStream的方法,getInputStream(),約定:去掉get,后面部分使用camel寫法 --> <param name="inputName">inputStream</param> </result> </action> </package> </struts>
前端向后臺發送ajax請求,傳遞no、name2個字段
JVM創建action實例,調用no、name對應的setter方法把前端傳過來的值賦給成員變量(會自動轉換為目標類型),完成action的初始化
JVM調用action處理業務的方法execute,設置向瀏覽器返回的數據
JVM根據struts.xml中<result>指定的方法(getInputStream),獲取InputSteam,將里面的數據傳給瀏覽器。
使用type="stream"類型的<result> 獲取json
<body> <form> 學號:<input type="text" id="no"><br /> <button type="button" id="btn">查詢學生信息</button> </form> <div id="show"></div> <script src="js/jquery-3.4.1.min.js"></script> <script> $("#btn").click(function () { $.ajax({ url:"HandlerAction", type:"post", data:{"no":$("#no").val()}, dataType:"json", error:function () { console.log("ajax請求失敗!") }, success:function (data) { $("#show").append("姓名:" + data.name+","); $("#show").append("年齡:" + data.age+","); $("#show").append("成績:" + data.score+"。"); } }) }); </script> </body>
public class HandlerAction extends ActionSupport { private int no; private InputStream inputStream; public int getNo() { return no; } public void setNo(int no) { this.no = no; } public InputStream getInputStream() { return inputStream; } public void setInputStream(InputStream inputStream) { this.inputStream = inputStream; } @Override public String execute() throws Exception { //此處缺省連接數據庫查詢得到學生信息 Student student = new Student(1, "張三", 20, 100); String jsonStr = JSON.toJSONString(student); //設置要返回的數據 inputStream=new ByteArrayInputStream(jsonStr.getBytes("utf-8")); return SUCCESS; } }
使用了阿里的fastjson.jar,需要自己下載引入。
配置同上
使用JSON插件實現AJAX
<body> <form> 學號:<input type="text" id="no"><br /> <button type="button" id="btn">查詢學生信息</button> </form> <div id="show"></div> <script src="js/jquery-3.4.1.min.js"></script> <script> $("#btn").click(function () { $.ajax({ url:"HandlerAction", type:"post", data:{"no":$("#no").val()}, dataType:"json", error:function () { console.log("ajax請求失敗!") }, success:function (data) { $("#show").append("姓名:" + data.student.name+","); $("#show").append("年齡:" + data.student.age+","); $("#show").append("成績:" + data.student.score+"。"); } }) }); </script> </body>
public class HandlerAction extends ActionSupport { private int no; private Student student; public int getNo() { return no; } public void setNo(int no) { this.no = no; } public Student getStudent() { return student; } public void setStudent(Student student) { this.student = student; } @Override public String execute() throws Exception { //此處缺省連接數據庫查詢得到學生信息 student = new Student(1, "張三", 20, 100); return SUCCESS; } }
需要設置同名的成員變量,并提供getter、setter方法,來接收前端傳來的數據。
此種方式是由JSON插件把action對象序列化為一個JSON格式的字符串,傳給瀏覽器。瀏覽器可以直接訪問action的所有成員變量(實質是調用對應的getter方法)。
我們只需要把ajax要請求的數據封裝為action的成員變量,并提供對應的getter、setter方法。需要在主調方法(execute)的return語句之前對請求的數據賦值。
success:function (data) { $("#show").append("姓名:" + data.student.name+","); $("#show").append("年齡:" + data.student.age+","); $("#show").append("成績:" + data.student.score+"。"); }
瀏覽器接受到的數據data本身就是action實例,可通過.訪問成員變量。
<struts> <package name="example" namespace="/" extends="json-default"> <action name="HandlerAction" class="action.HandlerAction"> <!--type="json"的result,可以缺省name屬性,當然寫上也行--> <result type="json"> <param name="noCache">true</param> <!-- 設置返回給瀏覽器的數據類型 --> <param name="contentType">text/html</param> </result> </action> </package> </struts>
需要手動添加JSON插件 struts2-json-plugin.jar 。
上面的壓縮包含有struts的所有jar包,其中就包括了struts2-json-plugin.jar。
下面的壓縮包只有struts核心的8個jar包。
讀到這里,這篇“Struts2如何處理AJAX請求”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。