利用JQuery和Servlet实现跨域提交请求示例分享

 更新时间:2014年02月12日 09:19:17   投稿:zxhpj  
这篇文章主要介绍了利用JQuery和Servlet实现跨域提交请求示例,需要的朋友可以参考下

原理: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";
        }
    }
    
}

相关文章

  • 用队列模拟jquery的动画算法实例

    用队列模拟jquery的动画算法实例

    这篇文章主要介绍了用队列模拟jquery的动画算法,实例分析了用队列模拟jquery的动画算法的原理与实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-01-01
  • jQuery实现穿梭框效果

    jQuery实现穿梭框效果

    这篇文章主要为大家详细介绍了jQuery实现穿梭框效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-01-01
  • AJAX实现瀑布流触发分页与分页触发瀑布流的方法

    AJAX实现瀑布流触发分页与分页触发瀑布流的方法

    瀑布流触发分页可以理解为微博中的浏览效果、到一定程度时显示页数进行分页,而分页触发瀑布流可以理解为Twitter拉到一页设定的最大条数后继续用瀑布流展示下一页,接下来我们就来详细看看AJAX实现瀑布流触发分页与分页触发瀑布流的方法
    2016-05-05
  • JQuery实现table中tr上移下移的示例(超简单)

    JQuery实现table中tr上移下移的示例(超简单)

    下面小编就为大家分享一篇JQuery实现table中tr上移下移的示例(超简单),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-01-01
  • jQuery弹出层插件Lightbox_me使用指南

    jQuery弹出层插件Lightbox_me使用指南

    在使用discuzx中有一个Message以及Dialog方法来显示信息对话框。今天写项目的时候,需要一个信息对话框,所以就着手利用lightbox_me插件来写一个做备用。
    2015-04-04
  • jquery判断类型是不是number类型的实例代码

    jquery判断类型是不是number类型的实例代码

    下面小编就为大家带来一篇jquery判断类型是不是number类型的实例代码。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-10-10
  • 基于jQuery选择器的整理集合

    基于jQuery选择器的整理集合

    本篇文章介绍了,基于jQuery选择器的整理集合。需要的朋友参考下
    2013-04-04
  • jquery $.fn $.fx是什么意思有什么用

    jquery $.fn $.fx是什么意思有什么用

    $.fn是指jquery的命名空间,加上fn上的方法及属性,会对jquery实例每一个有效,下面简单为大家介绍下jquery $.fn $.fx到底是怎么一回事
    2013-11-11
  • 7款风格新颖的jQuery/CSS3菜单导航分享

    7款风格新颖的jQuery/CSS3菜单导航分享

    下面给大家分享7款风格新颖的jQuery/CSS3菜单导航让用户方便地找到想要的信息,而且更让人有一种特殊的用户体验,希望大家会喜欢
    2013-04-04
  • jQuery技巧总结

    jQuery技巧总结

    随着WEB2.0及ajax思想在互联网上的快速发展传播,陆续出现了一些优秀的Js框架,其中比较著名的有Prototype、YUI、jQuery、mootools、Bindows以及国内的JSVM框架等
    2011-01-01

最新评论