`
8366
  • 浏览: 807064 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

基于JAVA的ajax代理的研究实现

    博客分类:
  • AJAX
阅读更多

 

一.ajax 跨域理论基础

 

http://blog.csdn.net/jamesxu326/archive/2008/12/11/3496283.aspx

 

 

二.ajax 跨域问题 的一个演示小例子

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<HTML xmlns="http://www.w3.org/1999/xhtml">
<HEAD><TITLE>AJAX跨域验证</TITLE>

<script>
var xmlHttp;
function createXMLHttpRequest() {
    if (window.ActiveXObject) {
        xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    } 
    else if (window.XMLHttpRequest) {
        xmlHttp = new XMLHttpRequest();
    }
}

function hello() {
 var url = 'http://www.baidu.com';    
 createXMLHttpRequest();
 xmlHttp.onreadystatechange = showResponse;
 xmlHttp.open("GET", url, true);
 xmlHttp.send(null);
}

function showResponse(){
  if(xmlHttp.readyState == 4) {
 if(xmlHttp.status == 200) {         
 document.getElementById("result").setAttribute("value",xmlHttp.responseText) ;
 }
 }
}
</script>

</HEAD>

<BODY> 
 <input type="button" value="hello" onclick="hello()"><br/><br/>
 <textarea id="result" name="result" cols=100 rows=100 ></textarea>
</BODY>
</HTML>

 

 1.以上的网页对这个测试页面只有在一种情况下才能正常执行:就是通过IE打开本地文件。如果用FireFox就算是通过本地文件打开它也不能正常运行(firefox 对跨域要求比较严格)

2.把这个页面放在TOMCat 上跑 效果也是一样的

 

 

.一个自己写的 ajax 请求代理

     问题:工作环境使用的代理的方式上网,甲方因为一些原因吧google给屏蔽了,上网搜东西只能用百度了,可是百度真差劲,搜技术问题没有google 搜的全,因此想到使用google 的搜索api

 

使用帮助 见: http://code.google.com/intl/zh-CN/apis/ajaxsearch/documentation/

 

 

这个google 搜素 对外提供一个ajax 服务,由于局方封锁的是 www.google.com ,对于 http://ajax.googleapis.com 可以逃过一劫,因此考虑 ajax 技术 调用远端 google 提供的ajax搜素服务,将返回的json的 搜索结果解析后显示在页面上,然后将这个简单的服务 放在 websphere 供大家使用,类似这样

 

http://***.***.***.***:9090/google

 

这时候就遇到ajax 的跨域问题了,因为这个ajax 请求访问了 公网的 http://code.google.com ,这个外部地址和 上下文根 /google 不在同一个域中 ,因此 外网用户无法使用 IE 是 弹出一个提示框 ,确认后勉强可以使用,而火狐对ajax 跨域要求严格,不能使用ajax 服务

 

 

 解决方案:

  

           ajax 去请求 上下文跟下的一个servlet ->> servlet 中 构造一个 httpclient 对象 去请求 google ajax 服务--》》 最后将结果JSON 数据返回到前台

 

 ajax 请求代理

 

package cn.com.xinli.action.search;
import java.io.OutputStreamWriter;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpMethod;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.log4j.Logger;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import cn.com.xinli.action.BaseAction;

public class GoogleSearchAction extends BaseAction
{
	
	Logger log=Logger.getLogger(GoogleSearchAction.class);
	@Override
	public ActionForward doIt(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception
	{
        //设置代理服务器地址和端口
		HttpClient client = new HttpClient(); 
		//client.getHostConfiguration().setProxy("172.100.1.28",8080);
        //使用GET方法,如果服务器需要通过HTTPS连接,那只需要将下面URL中的http换成https
		client.setTimeout(6000);
        String queryString=request.getQueryString();
       
        log.info("queryString>>>>>>>>>:"+queryString);
        HttpMethod method = new GetMethod("http://ajax.googleapis.com/ajax/services/search/web?&rsz=large&v=1.0"+queryString);
        //使用POST方法
        //HttpMethod method = new PostMethod("http://java.sun.com");
        client.executeMethod(method);
        //打印服务器返回的状态
        log.info("服务器返回的状态:"+method.getStatusLine());
        //打印返回的信息
        String result=null;
        result=method.getResponseBodyAsString();
       // log.info("返回的信息:"+result);
        method.releaseConnection(); 
        /*将结果写到输出流里面*/
        ServletOutputStream out = response.getOutputStream();  
        OutputStreamWriter ow = new OutputStreamWriter(out,"utf-8");  
        ow.write(result);  
        ow.flush();  
        ow.close();
//		response.setContentType("text/html;charset=UTF-8");
//      response.getWriter().write("<script type='text/javascript'>alert(1);</script>");
		return null;	
	}
}


	
	


 

 

经过这样一番周折,使用servlet 作为 ajxa 请求代理,解决了跨域问题

 

附件中是完整的项目 在eclipse 中直接可以使用  (Ext+HttpClient)

 

 

 

遗留问题: 没有解决 搜索结果的分页问题, api中看到 请求参数中加 这样 start=一个整数

  

 可以完成翻页,没有试验!

       

 

分享到:
评论

相关推荐

    基于java的上商城设计与实现.pdf

    本文档是一篇关于“基于Java的上商城设计与实现”的技术性论文或说明。尽管提供的内容片段中有文字识别错误和语法混乱的问题,但依然可以提取和解析出文档中提及的多个关键知识点和技术要点。 标题“基于java的上...

    基于Java实现wps在线编辑、在线预览后台服务.zip

    【标题】基于Java实现WPS在线编辑、在线预览后台服务 在现代互联网应用中,尤其是在企业级办公环境中,提供在线文档编辑和预览功能变得越来越重要。本项目旨在利用Java技术栈,构建一个能够支持WPS文档在线编辑和...

    基于Java开发幼儿园管理系统项目

    在本项目中,我们探讨的是一个基于Java技术的幼儿园管理系统,该系统旨在提供全面的信息化管理解决方案,以满足幼儿园日常运营的需求。以下是该项目的核心知识点: 1. **Java编程语言**:作为项目的基石,Java以其...

    基于Java Web的网上选课系统

    【基于Java Web的网上选课系统】是一种利用Java Web技术构建的在线教育平台,它允许学生在互联网上浏览课程信息、选择课程,并进行相关的学习管理。这个系统通常包含多个核心功能模块,如用户管理、课程管理、选课...

    基于JAVA的购物网站(毕业论文)(20210806153052).pdf

    "基于JAVA的购物网站系统设计与实现" 本文旨在设计和实现一个基于JAVA的购物网站系统。该系统旨在解决当前购物网站的主要挑战之一,即网站的设计如何使得网页能够有效地展示自己的产品,同时方便用户的使用,使用户...

    基于java web的博客系统

    【基于Java Web的博客系统】是一个综合性的软件开发项目,主要使用Java技术栈构建一个运行在Web环境下的博客平台。这个系统通常包含多个模块,如用户管理、文章发布、评论互动、分类管理、搜索功能等,为用户提供了...

    休闲娱乐代理售票系统-休闲娱乐代理售票系统源码-基于springboot的休闲娱乐代理售票系统-休闲娱乐代理售票管理系统java

    休闲娱乐代理售票-休闲娱乐代理售票系统-休闲娱乐代理售票系统源码-休闲娱乐代理售票管理系统-休闲娱乐代理售票管理系统java代码-休闲娱乐代理售票系统设计与实现-基于springboot的休闲娱乐代理售票系统-基于Web的...

    基于Java web的工作日志管理系统文档 .doc

    【基于Java Web的工作日志管理系统文档】 工作日志管理系统是一个重要的工具,用于提升工作效率和团队协作,尤其在当今数字化时代,信息安全和数据管理的需求日益增长。传统的纸质日志或通知方式已经不能满足现代...

    基于java网上点餐系统

    《基于Java的网上点餐系统实现详解》 在信息技术飞速发展的今天,餐饮行业的数字化转型已成为必然趋势。本文将深入探讨一个基于Java的网上点餐系统,该系统利用SpringBoot、Vue.js和ElementUI等现代技术,实现了...

    问答系统基于java web

    【标题】"问答系统基于Java Web"所涉及的知识点主要集中在构建一个基于Java技术栈的Web应用程序,特别是后端架构和前端开发模式。这个系统利用了Spring、Struts和Hibernate(SSH)三大框架来构建后端逻辑,同时采用...

    基于Java+JSP的 JAVA旅游网站毕业设计实现+源码毕业设计实现+源码.rar

    该资源是一个基于Java和JSP技术的旅游网站毕业设计项目,包含了完整的源代码。这个项目旨在帮助学生或开发者了解如何运用Java和JSP构建一个功能完善的在线旅游服务平台。以下是该项目可能涉及的关键知识点: 1. **...

    基于java的购物网站()本科毕业论文.doc

    "基于 Java 的购物网站的设计和实现" 本科毕业论文中介绍了基于 Java 的购物网站的设计和实现。该论文的主要目的是为了解决目前购物网站的普遍问题,即用户难以找到自己想要的商品,或者找到了却由于其他原因而放弃...

    基于java web的超市管理系统(包含源文件)

    【基于Java Web的超市管理系统】是一个综合性的应用项目,它利用了Java Web技术来实现对小型超市日常运营的信息化管理。这个系统的核心功能是管理超市的用户会员、供应商以及账单信息,支持基本的CRUD(创建Create、...

    基于java的新闻发布管理信息系统

    总结,基于Java的新闻发布管理信息系统利用了Java的强类型和面向对象特性,结合现代Web开发的最佳实践,实现了从前端展示到后台管理的完整流程。它集成了Spring框架、ORM工具、数据库技术以及多种安全措施,确保了...

    基于java的美食网站的设计与实现.zip

    在本项目"基于Java的美食网站的设计与实现"中,我们深入探讨了如何利用Java技术栈构建一个功能完善的在线美食平台。这个项目涵盖了从需求分析、系统设计到开发实现的全过程,旨在展示Java在Web开发领域的强大应用...

    计算机毕业设计-基于java的航空订票系统源码实现

    《基于Java的航空订票系统源码实现》 在当今数字化时代,航空订票系统是航空公司及在线旅行代理的重要组成部分,它为旅客提供方便快捷的机票预订服务。本项目是针对计算机毕业设计的一个实例,主要使用Java编程语言...

    计算机毕业设计-基于java的办公自动化系统源码实现

    【标题】: "基于Java的办公自动化系统源码实现" 在计算机科学领域,尤其是软件工程专业,毕业设计是一项重要的实践性学习环节。本项目聚焦于“基于Java的办公自动化系统”,旨在让学生掌握企业级应用开发的基本技能...

Global site tag (gtag.js) - Google Analytics