利用JQuery和Servlet实现跨域提交请求示例分享
2023-06-13 09:15:17 时间
原理:JavaScript的Ajax不可以跨域,但是可以通过向本地的一个Servlet发出请求,由Servlet完成跨域。再把远程的结构返回给客户端。这样Ajax就可以跨域了。在后面,再发一个PHP版本的,请大家关注啊。下面是代码
JS代码:
注意:在Post方式时,param1和param2为向远程发送的参数值,可以有多个。
//GET方式
functionreqeustCrossDomainProxyGet(){
varurl="http://www.baidu.com";//远程请求地址
varparam={"requesturl":url,"typedata":"JSON"};
vardata=getCrossDomainProxyRemote(param,"json");
}
//Post方式
functionreqeustCrossDomainProxyPost(param1,param2){
varurl=apiServer+"/api/lucene/query";
varparam={"requesturl":url,"typedata":"JSON","param1":param1,"param2":param2};
vardata=getCrossDomainProxyRemote(param,"json");
}
/**
*JS向本址的一个Servlet发送POST请求,所有关于远程请求的参数。
*在此处参POST方式发送给Servlet
*@paramparam远程请求参数
*@paramrtypeJS返回类型(暂时没有用到)
*@return
*/
functiongetCrossDomainProxyRemote(param,rtype){
varurl="/cross/proxy";//Servlet的URL地址
varreturndata;
$.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;}
});
returnreturndata;
}
Java代码:
publicclassCorssDomainProxyextendsHttpServlet{
publicvoiddoGet(HttpServletRequestreq,HttpServletResponseresp)
throwsServletException,IOException{
this.doPost(req,resp);
}
publicvoiddoPost(HttpServletRequestreq,HttpServletResponseresp)
throwsServletException,IOException{
booleanrequestType=false;//标记远程请求类型,默认为GET方式
PrintWriterout=resp.getWriter();
Enumerationkeys=req.getParameterNames();//取出客户端传入的所有参数名
ArrayList<String>params=newArrayList<String>();
Stringurl=null;
while(keys.hasMoreElements()){
Stringkey=(String)keys.nextElement();
/**
*如果请求参数内有如下几种表示,这此参数不参与远程请求
*/
if(key.equals("requesturl")){//判断参数是否是,远程请求地址
url=req.getParameter(key);
}elseif(key.equals("typedata")){//判断请求数据类型,暂时没有用到
}elseif(key.equals("returntype")){//判断请求返回类型,暂时没有用到
}else{
params.add(key);//其它加入参数列表,此处为参与远程请求的参数
requestType=true;//修改标记,表求远程请求为POST方式
}
}
HttpClientclient=newHttpClient();
HttpMethodmethod=null;
if(requestType){//判断请求方式,并实例化HttpMethod对象,true:POST,false:GET
method=newUTF8PostMethod(url);
for(Stringname:params){//迭代POST参数,加入到请求中
String_value=req.getParameter(name);
((PostMethod)method).setParameter(name,_value);
}
}else{
method=newGetMethod(url);
}
client.executeMethod(method);//执行请求
Stringbodystr=method.getResponseBodyAsString();//返回结果
out.println(bodystr);//将结果返回给客户端
}
/**
*内部类,转换URL字符串为UTF-8
*@authorAdministrator
*
*/
privatestaticclassUTF8PostMethodextendsPostMethod{
publicUTF8PostMethod(Stringurl){
super(url);
}
@Override
publicStringgetRequestCharSet(){
return"UTF-8";
}
}
}
相关文章
- Servlet.service() for servlet [dispatcherServlet] in context with path [] th
- Servlet主要相关类核心类 容器调用的过程浅析 servlet解读 怎么调用 Servlet是什么 工作机制详解编程语言
- jQuery slideUp()和slideDown()方法
- jQuery遍历json数组的实现代码
- jquery键盘事件介绍
- 推荐40款强大的jQuery导航插件和教程(上篇)
- jquery子元素过滤选择器使用示例
- Jquery图片延迟加载插件jquery.lazyload.js的使用方法
- jquery控制select的text/value值为选中状态
- 分享2个jQuery插件--jquery.fileupload与artdialog
- JQuery中的html()、text()、val()区别示例介绍