- 浏览: 194385 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
find13:
学习
iReport中文教程 -
coderfly:
thanks !
iReport中文教程 -
月亮不懂夜的黑:
下载 学习。thanks!
iReport中文教程 -
yanqingluo:
谢谢,先转走.再验证.
eclipse maven debug -
周佳1986:
谢谢,分享。
iReport中文教程
使用了httpclient做代理请求。
import java.io.IOException; import java.io.InputStream; import java.lang.reflect.Type; import java.net.URI; import java.net.URISyntaxException; import java.net.URL; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; import jef.database.Condition.Operator; import jef.database.QB; import jef.database.query.Query; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.utils.URIUtils; import org.apache.http.client.utils.URLEncodedUtils; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicNameValuePair; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; import com.ailk.easyframe.web.common.exception.BusinessException; import com.ailk.so.redo.MessageCode; import com.ailk.so.redo.constants.Constants; import com.ailk.so.redo.persistence.paramconf.entity.SoRedoParam; import com.ailk.so.redo.service.paramconf.SoRedoParamService; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; @Transactional public class AjaxProxyServiceImpl extends AjaxProxyServiceSkeleton implements AjaxProxyService{ private Log log = LogFactory.getLog(AjaxProxyServiceImpl.class); @Autowired protected SoRedoParamService paramconf_soRedoParamService; public void setParamconf_soRedoParamService(SoRedoParamService obj){ this.paramconf_soRedoParamService = obj; } public Map<String, Object> doRequest(Map<String,String> requestParams) { Map<String, String> dbParamMap = getDBParamMap(requestParams); /** 得到url参数*/ String requestUrl = dbParamMap.get(requestParams.get(Constants.REQUEST_URL_KEY)); if(requestUrl == null) { BusinessException ex = new BusinessException(MessageCode.E1013); log.error(ex.getFormattedMessage()); throw ex; } log.info("requestUrl:" + requestUrl); /** 建立一个NameValuePair数组,用于存储欲传送的参数*/ List<NameValuePair> qparams = new ArrayList<NameValuePair>(); HttpClient hc = new DefaultHttpClient(); /** 给数组加入参数*/ if(requestParams != null && !requestParams.isEmpty()) { Set<Entry<String, String>> pSet = requestParams.entrySet(); for(Entry<String, String> entry : pSet) { String key = entry.getKey(); String value = entry.getValue(); if(log.isDebugEnabled()) { log.debug("request param " + key + ":" + value); } if(Constants.REQUEST_URL_KEY.equals(key)) { continue; } //优先查询参数表,如果请求的code在参数表有配置,则用参数表的配置,否则直接使用页面传过来的值 if(Constants.REQUEST_CODE_KEY.equals(key)) { String codeValue = dbParamMap.get(value); if(codeValue == null || codeValue.trim().length() == 0) { log.info("can not found job code in db by key:" + key); codeValue = value; } qparams.add(new BasicNameValuePair(key, codeValue)); continue; } qparams.add(new BasicNameValuePair(key, value)); } } HttpResponse response; try { /** 创建url对象并设置编码等属性*/ URL url = new URL(requestUrl); URI uri = URIUtils.createURI(url.getProtocol(), url.getHost(), url.getPort(), url.getPath(), URLEncodedUtils.format(qparams, "UTF-8"), null); /** 创建一个get请求对象*/ HttpGet httpget = new HttpGet(uri); /** 发送get请求,并返回一个HttpResponse对象*/ response = hc.execute(httpget); HttpEntity entity = response.getEntity(); StringBuffer responseTxtSb = new StringBuffer(); /** 将返回值得到并放入stringBuffer中*/ if (entity != null) { InputStream instream = entity.getContent(); int len; byte[] tmp = new byte[2048]; while ((len = instream.read(tmp)) != -1) { if(len < 2048) { byte[] last = new byte[len]; System.arraycopy(tmp, 0, last, 0, len); responseTxtSb.append(new String(last)); } else { responseTxtSb.append(new String(tmp)); } } String responseTxt = responseTxtSb.toString(); log.info("ajax proxy response:" + responseTxt); /** 解析返回值字符串*/ if(responseTxt.length() != 0) { Type type = new TypeToken<ProxyResponse>() {}.getType(); ProxyResponse result = new Gson().fromJson(responseTxt, type); String urlKey = requestParams.get(Constants.REQUEST_URL_KEY); if(!urlKey.equals("check_status_url")) { if(!result.getSuccess()) { throw new BusinessException(-1, result.getMessage()); } } else { if(!result.getSuccess()) { log.error("check job status error."); return null; } } Object data = result.getData(); Integer tatal = result.getTotal(); Map<String, Object> resultMap = new HashMap<String, Object>(); if(data != null) { resultMap.put("data", data); } if(tatal != null) { resultMap.put("tatal", tatal); } if(!resultMap.isEmpty()) { return resultMap; } return null; } } } catch (ClientProtocolException ce) { log.error(ce.getMessage()); ce.printStackTrace(); throw new BusinessException(-1, ce.getMessage()); } catch (IOException ie) { log.error(ie.getMessage()); ie.printStackTrace(); throw new BusinessException(-1, ie.getMessage()); } catch (URISyntaxException ue) { log.error(ue.getMessage()); ue.printStackTrace(); throw new BusinessException(-1, ue.getMessage()); } return null; } private Map<String, String> getDBParamMap(Map<String,String> requestParams) { String urlKey = requestParams.get(Constants.REQUEST_URL_KEY); String code = requestParams.get(Constants.REQUEST_CODE_KEY); if(urlKey == null || urlKey.trim().length() == 0) { throw new BusinessException(MessageCode.E1012); } List<SoRedoParam> paramList = getParamList(Constants.AJAX_PROXY_PARAM_TYPE, urlKey,code); Map<String, String> paramMap = new HashMap<String, String>(); for(SoRedoParam param : paramList) { log.info("ajax request info:" + param.getParamName() + "=" + param.getParamValue()); paramMap.put(param.getParamName(), param.getParamValue()); } return paramMap; } private List<SoRedoParam> getParamList(String paramType, String... paramNames) { Query<SoRedoParam> paramQuery = QB.create(SoRedoParam.class); paramQuery.addCondition(SoRedoParam.Field.paramType, paramType); if(paramNames == null) { log.error("param name is null"); return null; } paramQuery.addCondition(SoRedoParam.Field.paramName, Operator.IN, paramNames); List<SoRedoParam> paramList = paramconf_soRedoParamService.find(paramQuery.getInstance()); if(paramList == null || paramList.size() == 0) { String errMsg = "not found param value by param name:" +paramNames; log.error(errMsg); throw new BusinessException(MessageCode.E1000, errMsg); } return paramList; } class ProxyResponse { /**成功标记*/ private Boolean success; /**错误对象 */ private String message; /**待传输数据*/ private Object data; /**数据总数 当返回结果为数组时*/ private Integer total; public Boolean getSuccess() { return success; } public void setSuccess(Boolean success) { this.success = success; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public Object getData() { return data; } public void setData(Object data) { this.data = data; } public Integer getTotal() { return total; } public void setTotal(Integer total) { this.total = total; } }; }
发表评论
-
spring事务管理的几种方式
2014-06-19 20:38 6685原文:http://sishuok.com/forum/bl ... -
【转】<maven权威指南>学习笔记
2013-06-06 12:32 1142一些常用的命令 mvn help:effective-pom ... -
ubuntu 下安装oracle客户端oracle-xe-client
2012-12-13 16:19 1685本文转自 http://os.chinaunix.net/a2 ... -
JVM监控工具介绍jstack, jconsole, jinfo, jmap, jdb, jstat
2012-12-11 23:46 5706本文转自:http://blog.csdn.net/ke ... -
【转】自动ssh登录的几种方法
2012-11-01 19:50 1088本文转自 http://blueicer.blog.51cto ... -
【转】ubuntu自动登录ssh
2012-11-01 19:47 1092本文转自 http://huqilong.b ... -
Linux下如何保持gnome-terminal窗口执行命令后停留而不立刻关闭(gnome-terminal -x)
2012-10-17 11:46 12059Linux下如何保持gnome-terminal窗口执行命令 ... -
java 分组
2012-07-24 13:04 943Map<String,List<SoRe ... -
【转】Ubuntu10.04下安装oracle客户端 oracle-ex-client, 使用sqlplus
2012-04-27 11:55 1442本文来源于:http://329937021.iteye.co ... -
Ubuntu apt.conf 代理
2012-04-24 16:19 1764Acquire::http::Proxy "h ... -
svn st 状态详解
2012-04-03 14:32 31451svn st --help status (stat, st ... -
[转]整理关于JVM方面的知识点
2012-02-22 20:05 1047转自:http://furturestrategist.ite ... -
开发一些约定而非规定
2012-02-17 10:25 9141、equals:常量在前,变量在后 如:"&q ... -
Java Selenium【转】
2011-12-29 15:51 2969本文转自 http://www.automationqa.co ... -
Java虚拟机(JVM)中的内存设置详解 【转】
2011-11-28 23:28 963在一些规模稍大的应 ... -
Java虚拟机classloader
2011-11-27 12:27 0当JVM(Java虚拟机)启动时,会形成由三个类加载器组 ... -
JVM内存模型
2011-11-27 12:25 634JVM内存模型(详见附件) -
HTTP 协议简介
2011-11-27 12:17 1094HTTP 协议简介(详见附件) 超文本传输协议( ... -
Java Enum 多态
2011-11-27 12:13 1438Enum 多态,我没说错,不过Enum是不可以被继承的, ... -
eclipse maven debug
2011-11-26 11:59 31701、Debugging with the Maven ...
相关推荐
【AJAX跨域解决办法】 在Web开发中,AJAX(Asynchronous JavaScript and XML)是一种在无需刷新整个页面的情况下更新部分网页的技术。然而,由于浏览器的同源策略限制,AJAX请求通常只能发送到与当前页面同一源的...
JavaScript跨域和Ajax跨域是Web开发中常见的问题,尤其在进行前后端分离或API调用时,由于浏览器的同源策略限制,不同域名、协议或端口的资源请求会被阻止,这就是所谓的“跨域”。本文将深入探讨JavaScript和Ajax...
**Ajax跨域详解** 在Web开发中,Ajax(Asynchronous JavaScript and XML)技术允许我们实现页面的异步更新,无需刷新整个页面即可获取并展示新数据。然而,由于浏览器的安全策略,同一源策略(Same-Origin Policy)...
**Ajax跨域访问解决方案** 在Web开发中,Ajax(Asynchronous JavaScript and XML)技术被广泛用于实现页面的异步更新,提升用户体验。然而,由于浏览器的同源策略限制,Ajax请求只能向同源(协议、域名和端口相同)...
为了解决AJAX跨域问题,开发者可以采用以下几种策略: 1. JSONP(JSON with Padding) JSONP是一种绕过同源策略的方法,它利用了`<script>`标签不受同源策略限制的特点。JSONP的工作原理是服务器提供一个可被调用的...
在Web开发中,Ajax(Asynchronous ...总之,解决Ajax跨域问题需要对同源策略有深入理解,并灵活运用JSONP、CORS、代理服务器等技术。在实际操作中,根据项目需求和安全性考虑选择合适的方法,确保跨域请求的顺利进行。
标题 "IE7 Ajax跨域问题" 涉及到的是在使用Ajax技术在Internet Explorer 7(IE7)浏览器中处理跨域请求时遇到的挑战。在Web开发中,Ajax(Asynchronous JavaScript and XML)是一种在不刷新整个页面的情况下与服务器...
Ajax跨域提交是Web开发中的一个重要概念,它涉及到前端JavaScript与后端服务器之间的异步数据交互,特别是当这种交互跨越了不同的源(域名、协议或端口)时。在了解Ajax跨域提交前,我们首先需要理解Web浏览器的同源...
### 如何实现Ajax跨域访问 在Web开发中,由于同源策略的限制,JavaScript只能对同源的页面进行操作,不能对不同源的页面进行请求。然而,在实际的应用场景中,经常会出现需要向不同域名下的服务器发起请求的情况。...
本文将详细探讨两种主要的Ajax跨域访问解决方法:JSONP和CORS。 **1. JSONP(JSON with Padding)** JSONP是一种非官方的跨域数据交互协议,它利用了`<script>`标签不受同源策略限制的特点。JSONP的工作原理是:...
但随着互联网应用的发展,这种需求变得越来越普遍,于是诞生了"ajax跨域获取数据"的技术解决方案。这个话题涵盖了多个关键知识点,包括同源策略、CORS(跨源资源共享)以及JSONP等。 1. 同源策略:同源策略是浏览器...
### Ajax跨域问题及其解决方案 #### 一、Ajax跨域问题概述 在现代Web开发中,前后端分离架构越来越流行。这种模式下,前端页面与后端服务通常部署在不同的服务器上,甚至可能位于不同的域名下。当浏览器发起对不同...
本教程将详细探讨如何解决Ajax跨域问题。 一、同源策略 同源策略是浏览器为了保障用户安全而实施的一种机制,它限制了Web页面只能读取同源(协议+域名+端口相同)的资源。当Ajax尝试向不同源发送请求时,浏览器会...
【标题】:“Ajax跨域问题解决方法——CORS详解及jar包使用” 【内容】: 在Web开发中,Ajax(Asynchronous JavaScript and XML)技术被广泛用于实现页面的异步更新,提高用户体验。然而,由于浏览器的安全策略,...
### Ajax跨域问题解决方案 #### 一、什么是Ajax跨域 **原理:** Ajax跨域问题的核心在于浏览器的“同源策略”。同源策略是一种安全措施,用于限制一个域名下的文档或脚本如何与另一个来源的资源进行交互。简单来说...
总结,Ajax跨域问题是Web开发中的常见挑战,理解并掌握JSONP、CORS以及代理服务器等解决策略,是提升Web应用性能和用户体验的关键。同时,安全始终是首要考虑,确保在提供跨域功能的同时,也要防止潜在的安全威胁。
标题“用代理避免ajax跨域请求(手机验证码)”指出了解决这个问题的一种策略,即利用代理服务器来规避浏览器的同源策略限制。下面我们将深入探讨这个主题。 首先,我们了解什么是跨域请求。在Web开发中,由于...
AJAX跨域是指在使用XMLHttpRequest (XHR) 进行AJAX请求时,由于浏览器的同源策略限制,导致不同源之间的通信受到阻碍。同源策略是浏览器为了保护用户安全而实施的一项机制,它禁止了一个源的文档或脚本去获取另一个...