Ajax、Servlet小工具

使用此脚本需要引入 jquery

servlet.jsp 脚本

const Servlet = {
    getRequest: function () {
        // 获取URL链接参数
        let url = window.location.search;
        let theRequest = {};
        //获取url中含"?"符后的字串
        if (url.indexOf("?") != -1) {
            let str = url.substr(1);
            let strs = str.split("&");
            for (let i = 0; i < strs.length; i++) {
                theRequest[strs[i].split("=")[0]] = strs[i].split("=")[1];
            }
        }
        return theRequest;
    }
    , isSuccess: function (data) {
        // Servlet 是否执行成功
        let code;
        if (typeof (data) == 'number') {
            code = data;
        } else if (typeof (data) == 'object') {
            code = data.code;
        } else {
            return false;
        }
        return code >= 200 && code < 300;
    }
    , post: function (servletUrl, method, data, func) {
        /* Servlet 格式进行 Ajax 请求
        @servletUrl  servlet 地址
        @method  操作功能
        @data  发送到数据
        @func  执行时成功操作的方法
        */

        if (typeof (data) == 'object') {
            data['method'] = method;
        } else {
            data += "&method=" + method;
        }
        console.log("========== servlet.js ==========");
        console.log("url=" + servletUrl);
        console.log("method=" + method);
        console.log("data{" + data + "}");

        $.ajax({
            url: servletUrl,
            type: "POST",
            data: data,
            dataType: "json",
            success: func,
        });
    }

}

服务端执行操作响应的 ajax 数据,ResponseUtil 工具类。

import com.alibaba.fastjson.JSON;
import lombok.Data;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;


public class ResponseUtil {

    //============================================
    //  Success
    //============================================

    public static boolean isSuccess(int code) {
        return (code >= 200 && code <= 300);
    }

    /**
     * 执行成功,设置响应参数
     *
     * @param response
     * @param data
     */
    public static void success(HttpServletResponse response, Object... data) {
        if (data.length == 0) {
            System.out.println("data == 0");
            success(response, 200);
        } else if (data.length == 1) {
            System.out.println("data == 1");
            success(response, 200, "", data[0]);
        } else {
            System.out.println("data > 1");
            /*
            如果是多个参数,则data格式要为
               key, value, key, value, key, value ...
             */
            Map map = new HashMap();
            for (int i = 0; i < data.length; i+=2) {
                map.put(data[i].toString(), data[i + 1]);
            }
            success(response, 200, "", map);
        }
    }


    public static void success(HttpServletResponse response, int code) {
        success(response, code, "Response Success");
    }

    public static void success(HttpServletResponse response, String description) {
        success(response, 200, description);
    }

    public static void success(HttpServletResponse response, int code, String description) {
        success(response, code, description, null);
    }

    public static void success(HttpServletResponse response, int code, String description, Object data) {
        both(response, code, description, data);
    }


    //============================================
    //  Fail
    //============================================

    public static boolean isFail(int code) {
        return (code >= 500 && code <= 600);
    }

    public static void fail(HttpServletResponse response) {
        fail(response, 500);
    }

    public static void fail(HttpServletResponse response, Object data) {
        fail(response, 500, "", data);
    }

    public static void fail(HttpServletResponse response, int code) {
        fail(response, code, "Response Fail");
    }

    public static void fail(HttpServletResponse response, String description) {
        fail(response, 500, description);
    }

    public static void fail(HttpServletResponse response, int code, String description) {
        fail(response, 500, description, null);
    }

    public static void fail(HttpServletResponse response, int code, String description, Object data) {
        both(response, code, description, data);
    }


    //============================================
    //  Both
    //============================================

    /**
     * 根据数量设置结果是成功还是失败
     */
    public static void setResultByCount(HttpServletResponse response, int count) {
        if (count > 0) {
            ResponseUtil.success(response, "SUCCESS");
        } else {
            ResponseUtil.fail(response, "FAIL");
        }
    }

    private static void both(HttpServletResponse response, int code, String description, Object data) {
        PrintWriter writer = null;
        try {
            response.getWriter().write(JSON.toJSONString(new Result(code, description, data)));
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (writer != null) {
                writer.close();
            }
        }
    }

}


@Data
class Result {

    private int code;
    private String description = "";
    private Object data;

    public Result(int code) {
        this.code = code;
    }

    public Result(int code, String description) {
        this.code = code;
        this.description = description;
    }

    public Result(int code, String description, Object data) {
        this.code = code;
        this.description = description;
        this.data = data;
    }
}

lombok 需要插件中搜索安装,然后代码里边需要再次导入。

Servlet 工具类。使用反射进行使用字符串方式调用里面的方法。

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class ServletUtil {

        public static void invoke(HttpServlet servlet, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            String method = request.getParameter("method");
            System.out.println("method=" + method);
            try {
                if (method != null) {
                    servlet.getClass()
                            .getDeclaredMethod(method, HttpServletRequest.class, HttpServletResponse.class)
                            .invoke(servlet, request, response);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

}

发表评论