利用JQuery和Servlet实现跨域提交请求示例分享
原理:javascript的ajax不可以跨域,但是可以通过向本地的一个servlet发出请求,由servlet完成跨域。再把远程的结构返回给客户端。这样ajax就可以跨域了。在后面,再发一个php版本的,请大家关注啊。下面是代码
js代码:
注意:在post方式时,param1和param2为向远程发送的参数值,可以有多个。
。 代码如下:
//get方式
function reqeustcrossdomainproxyget(){
var url = "https://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
nbsp; * @author administrator
*
*/
private static class utf8postmethod extends postmethod {
public utf8postmethod(string url) {
super(url);
}
@override
public string getrequestcharset() {
return "utf-8";
}
}
}
下一篇: 使用css3制作登录表单的步骤