spring ext 跨域
发布时间:2020-12-15 01:11:22 所属栏目:大数据 来源:网络整理
导读:read方法中调用的response对象是父类BaseController的一个成员变量. spring默认bean的生命周期Score为singleton单例模式. 当多线程并发使用同一bean,并使用bean中的同一成员变量时会有问题. 比如下例中的成员变量response 以下是服务端跨域代码. @Controller
read方法中调用的response对象是父类BaseController的一个成员变量. spring默认bean的生命周期Score为singleton单例模式. 当多线程并发使用同一bean,并使用bean中的同一成员变量时会有问题. 比如下例中的成员变量response 以下是服务端跨域代码. @Controller @Scope("request") @RequestMapping("/CrossDomain") public class CrossDomainController extends BaseController { @RequestMapping("/read") @ControllerLog(description = "跨域请求") void read(@RequestParam Map<String,Object> params) throws IOException { String url = (String) params.get("url"); if(BlankUtil.isNotEmpty(url)) { HttpClient httpClient = HttpClientBuilder.create().build(); HttpPost httpPost = new HttpPost(url); // 设置请求的header httpPost.addHeader("Content-Type","application/x-www-form-urlencoded;charset=utf-8"); 设置请求的参数 List<NameValuePair> nvps = new ArrayList<NameValuePair>(); for (String key : params.keySet()) { nvps.add( BasicNameValuePair(key,String.valueOf(params.get(key)))); } httpPost.setEntity(new UrlEncodedFormEntity(nvps,"utf-8")); 执行请求 HttpResponse httpResponse = httpClient.execute(httpPost); String result = EntityUtils.toString(httpResponse.getEntity(),1)">if("xml".equalsIgnoreCase(String.valueOf(params.get("type")))) { response.setContentType("text/xml; charset=UTF-8"); } try { System.err.println("---------->" + String.valueOf(params.get("type")) + result.length()); PrintWriter out = response.getWriter(); out.write(result); out.flush(); out.close(); } catch (Exception e) { e.printStackTrace(); } } } } ?修改Bean的生命周期scope配置为request或prototype即可. ? ? JS代码(请求Java后台得到远程服务器xml文本内容,?然后在js端转换成xmldoc对象) function crossDomainloadXmlFile(config) { var doc = null; Ext.Ajax.request({ url : config.url, 请求地址 params : config.params, 请求参数 timeout: config.timeout || 30000,async : false,1)">同步请求 method : 'post',1)"> 方法 callback : (options,success,response) { if(!success) { (top.checkTimeoutAndRelogin(response.status)) { top.Ext.MessageBox.alert('错误提示'return; } console.log('crossDomainloadXmlFile:' + response.responseText) doc = parseXmlString(response.responseText); } }); doc; } parseXmlString(xmlString) { var doc; (window.ActiveXObject) { doc = new ActiveXObject("Microsoft.XMLDOM"); doc.setProperty("SelectionLanguage","XPath"); doc.async = false; doc.loadXML(xmlString); } load XML string code for Mozilla,Firefox,Opera,etc. else { var parser = DOMParser(); doc = parser.parseFromString(xmlString,"text/xml"); } doc.documentElement; } ? EXT组件: /** * Created by huangbaidong on 2016/6/30. * 简单数据字典通用Store,* 外部调用传入参数dictionaryId作为过滤条件. * 使用案例: store: Ext.create('app.component.sys.dictionary.SimpleDictionaryXmlStore',{ dictionaryId : 1 }) */ Ext.define('app.component.sys.dictionary.SimpleDictionaryXmlStore''simpleDictionaryStore'(config) { var me = this; Ext.apply(config,{ fields: [{ name: 'id' },{ name: 'name''dictionaryId' }],data:((){ var array = []; Ext.each(top.simpleDictionaryStore.getData().items,1)">(item) { if(item.data.dictionaryId == config.dictionaryId) { array.push(item); } }) array; })() }); app.component.sys.dictionary.SimpleDictionaryXmlStore.superclass.constructor.call(* * 跨域获取数据字典,并缓存为全局单例Store * @type {Ext.data.Store} top.simpleDictionaryStore = Ext.create('Ext.data.Store'true },{ name: 'name' }],proxy: { type: 'ajax''xml''@id'服务端跨域处理 url: DICTIONARY_URL,type : 'xml' } } }); ? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |