国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

利用JQuery和Servlet實現跨域提交請求示例分享

2019-11-20 21:07:54
字體:
來源:轉載
供稿:網友

原理:JavaScript的Ajax不可以跨域,但是可以通過向本地的一個Servlet發出請求,由Servlet完成跨域。再把遠程的結構返回給客戶端。這樣Ajax就可以跨域了。在后面,再發一個PHP版本的,請大家關注啊。下面是代碼

JS代碼:

注意:在Post方式時,param1和param2為向遠程發送的參數值,可以有多個。

復制代碼 代碼如下:

//GET方式
function reqeustCrossDomainProxyGet(){
    var url = "http://www.baidu.com";//遠程請求地址
    var param = {'requesturl':url,'typedata':'JSON'};
    var data = getCrossDomainProxyRemote(param,"json");
}
//Post方式
function reqeustCrossDomainProxyPost(param1,param2){
    var url = apiServer+"/api/lucene/query";
    var param = {'requesturl':url,'typedata':'JSON','param1':param1,'param2':param2};
    var data = getCrossDomainProxyRemote(param,"json");
}

/**
 * JS向本址的一個Servlet發送POST請求,所有關于遠程請求的參數。
 * 在此處參POST方式發送給Servlet
 * @param param 遠程請求參數
 * @param rtype JS返回類型(暫時沒有用到)
 * @return
 */
function getCrossDomainProxyRemote(param,rtype){
    var url = "/cross/proxy";//Servlet的URL地址
    var returndata;
    $.ajax({
        url: url,type: 'POST',dataType: rtype,timeout: 40000,data:param, async:false,
        error: function(response,error) {alert(response.status);},
        success: function(data){returndata=data;}
    });
    return returndata;
}

Java代碼:

復制代碼 代碼如下:

public class CorssDomainProxy extends HttpServlet {

    public void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        this.doPost(req, resp);    
    }

    public void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        boolean requestType = false;//標記遠程請求類型,默認為GET方式
        PrintWriter out = resp.getWriter();
        Enumeration keys = req.getParameterNames();//取出客戶端傳入的所有參數名
        ArrayList<String> params = new ArrayList<String>();
        String url=null;
        while (keys.hasMoreElements()){
            String key = (String) keys.nextElement();
            /**
             * 如果請求參數內有如下幾種表示,這此參數不參與遠程請求
             */
            if(key.equals("requesturl")){//判斷參數是否是,遠程請求地址
                url = req.getParameter(key);
            }else if(key.equals("typedata")){//判斷請求數據類型,暫時沒有用到

            }else if(key.equals("returntype")){//判斷請求返回類型,暫時沒有用到

            }else{
                params.add(key);//其它加入參數列表,此處為參與遠程請求的參數
                requestType = true;//修改標記,表求遠程請求為POST方式
            }
        }

        HttpClient client = new HttpClient();
        HttpMethod method = null;
        if(requestType){//判斷請求方式,并實例化HttpMethod對象,true:POST,false:GET
            method = new UTF8PostMethod(url);
            for(String name : params){//迭代POST參數,加入到請求中
                String _value = req.getParameter(name);
                ((PostMethod)method).setParameter(name,_value);
            }
        }else{
            method = new GetMethod(url);
        }      
        client.executeMethod(method);//執行請求
        String bodystr = method.getResponseBodyAsString();//返回結果
        out.println(bodystr);//將結果返回給客戶端
    }

    /**
     * 內部類,轉換URL字符串為UTF-8
     * @author Administrator
     *
     */
    private static class UTF8PostMethod extends PostMethod {
        public UTF8PostMethod(String url) {
            super(url);
        }
        @Override
        public String getRequestCharSet() {
            return "UTF-8";
        }
    }

}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 中宁县| 博湖县| 台北县| 永平县| 宜城市| 阿勒泰市| 张家界市| 新乡市| 突泉县| 闵行区| 赤峰市| 承德县| 民乐县| 芒康县| 苗栗县| 苏州市| 上杭县| 塔城市| 武冈市| 苗栗市| 井冈山市| 满城县| 邵阳市| 定安县| 花莲县| 西华县| 安龙县| 调兵山市| 临夏县| 商河县| 东台市| 中牟县| 临颍县| 衡南县| 平定县| 兴义市| 平安县| 东乡| 万载县| 伽师县| 女性|