struct2 如何返回 JSON 數據 (最最簡單的方式,使用 stuct2-json-plugin 即可)

一、爬坑之路

困擾了我很久的問題終於解決了!!!

今天記錄一下

網上我查閱過許多 struct2 返回 JSON 數據格式的方式,比如使用 Servlet 階段的 PrintWriter,還有自己轉換成 InputStream 流返回 JSON 數據,甚至還有自己封裝 JSON 格式數據的。 但是大部分嘗試過,但是發現用不了,後來發現了 stuct2 自帶的 json 轉換的數據就很方便。

就是這個插件
在這裏插入圖片描述
使用這個插件之後,就不需要我們自己另外導 json 數據轉換的包了,使用 struct2 自帶的 ognl 表達式就可以幫我們注入數據

二、環境搭建

我搭建的是 SSH (stuct2 + hibernate5 + spring5)環境,項目採用 Maven 構建,開發工具是 Idea 2019

感興趣的同學可以看一看
SSH 開發腳手架

今天只講 stuct2 如何返回 JSON 數據

2.1 stuct2 的 pom 依賴

    <!-- struts2依賴 -->
    <dependency>
      <groupId>org.apache.struts</groupId>
      <artifactId>struts2-core</artifactId>
      <version>2.3.35</version>
    </dependency>

    <!-- json 數據處理,struts 插件 -->
    <dependency>
      <groupId>org.apache.struts</groupId>
      <artifactId>struts2-json-plugin</artifactId>
      <version>2.3.8</version>
    </dependency>

2.2 開發工具配置

這裏是我們需要自己添加進去的,不然開發工具識別不了我們寫的東西,不然後面寫 struct2 配置文件的時候就會爆紅

在這裏插入圖片描述

在這裏插入圖片描述在這裏插入圖片描述

三、代碼編寫

3.1 編寫 AjaxAction

比如我們想要返回一個字符串,就要在在成員變量(“全局變量”)中添加它,並給予對應的 getter 和 setter 方法,你要問爲什麼,這就是 ognl 表達式要做的事情。

比如我要做一個賬戶的用戶名驗證的功能,所以我可以這麼寫

@Controller("aa")
public class AjaxAction extends ActionSupport {
    private String uname; // 接收前端的用戶名
    private String msg;  // 要返回的內容

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public String getUname() {
        return uname;
    }

    public void setUname(String uname) {
        this.uname = uname;
    }

    // 返回簡單字符串
    public String teststring() {
        // 判斷用戶是否存在
        if (uname.equals("admin")) {
            msg="賬戶已經有人註冊了";
        } else {
            msg="賬戶可以使用";
        }
        return "success";
    }
}

3.2 前端頁面編寫

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
    <jsp:include page="base.jsp"/>  <!-- 這裏我引用了 BootStrap 的庫 和 JQuery 的庫 -->
</head>
<body>
<div class="container">
    <form action="checklogin" method="post" class="form-horizontal">
        <div class="form-group">
            <label for="username" class="col-sm-2 control-label">賬戶:</label>
            <div class="col-sm-10">
                <input type="text" class="form-control" name="username" id="username" placeholder="請輸入你的賬戶">
            </div>
        </div>
        <div class="col-sm-offset-2 col-sm-10">
            <input type="submit" class="btn btn-primary" value="Submit"/>
        </div>
    </form>
</div>
<script type="text/javascript">
    $("#username").on("change",function () {
        $.ajax({
            url: 'checkajax',
            data: {
                uname: $("#username").val()
            },
            type: "POST",
            success:function (data) {
                console.log(data)
            }
        })
    })
</script>
</body>
</html>

3.3 struct2 配置文件編寫

這裏的 root 就代表你要返回的數據

	<!-- 因爲返回的是 JSON 數據,所以這裏要繼承於 json-default,如果這裏爆紅,就說明你沒有在 idea 中添加它的配置 -->
    <package name="ajax" namespace="/" extends="json-default" >
        <action name="checkajax" class="aa" method="teststring">
            <result name="success" type="json">
                <param name="root">msg</param>
            </result>
        </action>
    </package>

3.4 運行效果圖

在這裏插入圖片描述
在這裏插入圖片描述

如果你想要返回 list ,步驟是一樣的,和 msg 是一樣的方法,使用 ognl 表達式來幫我們完成數據的返回

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章