`
fackyou200
  • 浏览: 309535 次
  • 性别: Icon_minigender_1
  • 来自: 山西太原
社区版块
存档分类
最新评论

用AjaxProxyServlet 跨域ajax请求

 
阅读更多
package org.xh.Servlet;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class AjaxProxyServlet
 */
public class AjaxProxyServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
    /**
     * @see HttpServlet#HttpServlet()
     */
    public AjaxProxyServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doPost(request, response);
	}
	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html");
		response.setCharacterEncoding("utf-8");
        PrintWriter pw = response.getWriter();
        Enumeration paramNames = request.getParameterNames();
        StringBuffer bfParams = new StringBuffer();
        bfParams.append(request.getParameter("url")).append("?1=1");
        while(paramNames.hasMoreElements()) {
            String param = (String)paramNames.nextElement();
            if("url".equals(param)){continue;}
            bfParams.append("&").append(param).append("=").append(request.getParameter(param));
        }
        HttpURLConnection huc = null;
		try {
			// 取得连接
			huc = (HttpURLConnection) new URL(bfParams.toString())
					.openConnection();

			// 设置连接属性
			huc.setDoOutput(true);
			huc.setRequestMethod("POST");
			huc.setUseCaches(false);
			huc.setInstanceFollowRedirects(true);
			huc.setRequestProperty("Content-Type",
					"application/x-www-form-urlencoded");
			huc.setConnectTimeout(50000);
			huc.setReadTimeout(50000);
			huc.connect();

			// 参数
			// DataOutputStream out = new DataOutputStream(huc
			// .getOutputStream());
			// // The URL-encoded contend
			// // 正文,正文内容其实跟get的URL中'?'后的参数字符串一致
			// String content = "sheng_code=" + URLEncoder.encode("江苏", "utf-8");
			// // DataOutputStream.writeBytes将字符串中的16位的unicode字符以8位的字符形式写道流里面
			// out.writeBytes(content);
			//
			// out.flush();
			// out.close(); // flush and close

			// 取得页面输出,并设置页面编码及缓存设置
			response.setContentType(huc.getContentType());
			response.setHeader("Cache-Control", huc.getHeaderField("Cache-Control"));
			response.setHeader("Pragma", huc.getHeaderField("Pragma"));
			response.setHeader("Expires", huc.getHeaderField("Expires"));

			BufferedReader reader = new BufferedReader(new InputStreamReader(
					huc.getInputStream(), "utf-8"));
			String line;
			while ((line = reader.readLine()) != null) {
				pw.write(line);
			}
			reader.close();
		} catch (Exception e) {
			pw.write("outTime");
			e.printStackTrace();
		}finally{
			huc.disconnect();
			pw.flush();
			pw.close();
		}
	}
	
}

 

调用:

function getDq() {
	var str = jQuery("#name").val();
	$.ajax({  
        type : "post",  
        async:false,  
		data:{str : encodeURI(str),url:"访问地址"},
        url : "http://localhost:8080/m/AjaxProxyServlet",  
        success : function(data){  
        	if("outTime"!=data){
        		alert(data);
        	}else{
        		alert("网络连接超时!");
        	}
        },  
        error:function(){  
            alert('fail');  
        }  
    }); 
}

 

分享到:
评论

相关推荐

    Jquery跨域Ajax请求测试

    在jQuery中,使用`xhrFields`参数添加`withCredentials`设置为`true`,可以实现携带Cookie的跨域请求。 ```javascript $.ajax({ type: "GET", url: "http://example.com/remote-service", xhrFields: { ...

    ajax跨域请求WebService.asmx

    在这个场景中,我们使用Ajax进行跨域请求,即从一个源(Origin)向另一个不同的源(例如,不同域名或端口)发送HTTP请求。 1. **Ajax基础**:Ajax的核心是XMLHttpRequest对象,它允许JavaScript在后台与服务器通信...

    解决ajax跨域请求问题

    然而,跨域请求是Ajax的一个常见问题,由于浏览器的同源策略限制,Ajax请求只能向与当前页面同源的服务器发送。本文将深入探讨如何解决Ajax跨域请求的问题。 首先,理解“同源策略”是解决问题的关键。同源策略是...

    ajax处理跨域请求

    当使用AJAX进行跨域请求时,我们需要采取特殊的方法来规避同源策略。这里将详细讲解如何通过jQuery的AJAX实现跨域请求。 首先,了解什么是CORS(Cross-Origin Resource Sharing,跨源资源共享)。CORS是一种机制,...

    ajax跨域请求demo.zip

    总结来说,这个压缩包提供的示例展示了如何使用jQuery的Ajax进行跨域请求,并在Tomcat服务器上的Java Servlet中处理这些请求。这个例子对于理解和解决实际项目中可能出现的跨域问题非常有帮助。开发者需要理解CORS...

    html通过 ajax jsonp跨域请求接收和传送数据

    1. **AJAX跨域**: 通常,AJAX请求受到同源策略限制。为实现跨域,我们可以使用CORS(Cross-Origin Resource Sharing)机制。服务器需要在响应头中添加`Access-Control-Allow-Origin`字段,允许特定的源进行跨域访问...

    jsonpajax跨域请求

    JSONP(JSON with Padding)和AJAX是两种常见的在JavaScript中实现跨域数据请求的技术。在Web开发中,由于浏览器的同源策略限制,JavaScript不能直接向其他域名发送请求,但JSONP和AJAX通过特定的方式绕过了这个限制...

    demo跨域ajax_DEMO_ajax跨域_

    在前端JavaScript部分,使用Ajax发起跨域请求时,可以借助jQuery的$.ajax或$.getJSON等函数,设置`xhrFields`和`crossDomain`参数: ```javascript $.ajax({ url: 'http://api.example.com/data', type: 'GET', ...

    ajax跨域请求jsonp前后台代码

    基于ajax方式的跨域请求jsonp的前后台代码

    ajax跨域请求

    ### AJAX跨域请求详解 #### 一、引言 在Web开发中,由于浏览器的同源策略限制,AJAX请求通常只能向同源服务器发送请求。然而,在实际应用中,跨域请求的需求非常常见。本篇文章将通过一个具体的示例(JSP页面+后台...

    PHP AJAX JSONP实现跨域请求使用范例_ajax如何解决跨域请求

    PHP AJAX JSONP 实现跨域请求使用实例 在 Web 开发中,跨域请求是指从一个域名下的页面请求另一个域名下的资源,这种情况下,浏览器会限制这种请求,以防止恶意攻击。JSONP(JSON with Padding)是一种解决跨域请求...

    ajax跨域解决办法

    如果尝试跨域发送AJAX请求,浏览器会阻止这一行为,表现为“拒绝访问”的错误。 AJAX跨域问题的出现是由于浏览器的安全机制,旨在防止恶意网站通过脚本访问其他网站的数据,保护用户隐私。但是,在某些场景下,比如...

    H5的video标签跨域.HTML的video标签跨域_跨域ajax

    H5的video标签跨域.HTML的video标签跨域 我们都知道HTML video标签能播放视频 但是如果你的video要播放的是非当前域名下的视频文件,这就要跨域播放视频, 应该如何实现呢?

    juery mobile使用ajax跨域请求服务器的小实例

    以下是一个简单的示例,展示了如何使用jQuery Mobile和Ajax进行跨域请求: ```html <!DOCTYPE html> <title>jQuery Mobile 跨域请求示例 , initial-scale=1"> ...

    Ajax跨域请求解决方案-JSONP

    在`ClientTest`中,你可以找到使用Ajax发起JSONP请求的JavaScript代码;而在`ServerTest`中,可能包含了处理JSONP请求并返回包裹了JSON数据的JavaScript响应的ASP.NET代码。 总的来说,JSONP是Ajax跨域请求的一种...

    Ext.Ajax.request跨域

    标题"Ext.Ajax.request跨域"指出我们将探讨如何使用ExtJS库中的Ajax模块进行跨域请求。Ext.Ajax.request是ExtJS提供的一种发起Ajax请求的方式,它允许开发者向服务器发送异步HTTP请求。然而,由于浏览器的同源策略...

    浅谈Koa2框架利用CORS完成跨域ajax请求

    使用Koa2框架实现CORS跨域ajax请求需要在服务器端配置Access-Control-Allow-Origin响应头部,并在客户端使用ajax发起请求。对于非简单请求,需要在服务器端进行额外的配置,以便使得preflight request能够通过。

    跨域WebService请求-Nginx_SOAP服务_Ajax客户端.docx

    因为JavaScript的同源策略不允许跨域POST请求,所以直接从Ajax客户端调用跨域的SOAP服务是不可能的。 【Nginx反向代理】为了解决这个问题,Nginx作为一个反向代理服务器可以被用来作为中间层,将客户端的请求转发到...

Global site tag (gtag.js) - Google Analytics