




已阅读5页,还剩9页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
JSON介绍一、JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。易于人阅读和编写。同时,也易于机器解析和生成。二、JSON数据格式解析:和XML一样,JSON也是基于存文本的数据格式。您可以用JSON传输一个简单的String、Number、Boolean,也可以传输一个数组或者一个复杂的Object对象。例如:1、用JSON表示一个简单String “abc”,其格式为:”abc”。除了字符“,/ 和一些控制符(b,n,t等)需要编码外,其他Unicode字符可以直接输出。2、用JSON表示一个数组对象,使用“ “包含所有元素,每个元素用逗号分隔,元素可以使任意的value,例如,一下数组包含了一个String、Number、Boolean、和一个null:“abc”,123,false,null。3、Object对象在JSON中用“ “包含一系列无序的Key-Value键值对表示,实际上此处的Object相当于Java中的Map。注意Key只能用String表示。例如:一个Address对象包含如下Key-Value:“city”:”beijing”,”street”:”chaoyang”,”postcode”:100025。三、JAVASCRIPT处理JSON数据Function demo()var v=“name”:”SMITH”,”address”: “city”:”beijing”,”street”:”chaoyang”,”postcode”:100025;document.write();document.write(v.address.city);四:JSON和XML的比较XML和JSON都是用结构化方法来标记数据,下面来做一个简单的比较。中国黑龙江哈尔滨大庆用JSON表示如下:name:”中国”,province:Name:”黑龙江”,citys:“哈尔滨”,”大庆”XML比JSON更有可读性。不过,我们读起来费解的语言,恰恰是适合机器阅读的。编写的手写难度来说,XML还是舒服一些,好读当然就好写。不过写出来的字符JSON就明显少很多。去掉空白制表以及换行的话,JSON就是有用数据,而XML却包含很多重复的标记字符。五、下面列举两个对象:JSONArray和JSONObject在写有关于JSON的程序时首先要加入六个JAR包:commons-beanutils-1.7.0.jar、commons-collections.jar、commons-lang-2.2.jar、ezmorph-1.0.4.jar、json-lib-2.1-jdk15.jar、xom-1.1d2.jar(1)JSONArray 例子: List list = new ArrayList(); list.add(a); list.add(b); JSONArray jso = JSONArray.fromObject(list); System.out.println(list); 输出的结果是:“a”,”b” 。(2)JSONObject 例子: Map map = new HashMap(); map.put( int, new Integer(1) ); map.put( arr, new Stringa,b ); map.put( func, function(i) return this.arr; ); JSONObject json = JSONObject.fromObject( map ); System.out.println( json ); 输出的结果是:arr:a,b,int:1,func:function(i) return this.arr; (3)JSONObject to XML 例子: JSONObject json = JSONObject.fromObject(name:json,bool:true,int:1); XMLSerializer xmlSerializer = new XMLSerializer(); String xml = xmlSerializer.write(json); System.out.println(xml); XML to JSONObject 例子: String xmls = 1 + json; XMLSerializer xmlSerializer = new XMLSerializer(); JSON json = xmlSerializer.read(xmls); System.out.println( json.toString(2) ); 六、下面列举AJAX和JSON的例子 1、环境struts、hibernate、JSON、AJAX 2、首先,加载struts和hibernate框架,然后再把JSON的JAR包放到lib下。创建一个Action: Action的内容如下: PrintWriter out = response.getWriter(); JSONObject obj = new JSONObject(); JSONArray js = new JSONArray(); /这里的数据封装是从数据库查询来的 MesDao md = new MesDao(); List list = md.findMess(); for(int i=0;ilist.size();i+) JSONObject objtemp = new JSONObject(); TMessage tm = (TMessage) list.get(i); objtemp.put(id, tm.getId(); objtemp.put(name, tm.getName(); js.add(objtemp); obj.put(js,js); out.print(obj.toString(); 然后,创建一个JSP页面: 其内容如下: function demo() new Ajax.Updater(content,test.do); 获取数据 正在获取内容.然后创建toolpro.jstoolpro.js的内容如下:function getcomplex()var url = test.do; var ajax = new Ajax.Request(url, method:post,Complete:showcomplex); function showcomplex(dataResponse) var data = eval( + dataResponse.responseText + );var str=;for(var i=0;idata.js.length;i+)str+=;str+=+data.js.id+;str+=++;str+=;document.getElementById(content).innerHTML=str;import net.sf.json.JSONArray;import net.sf.json.JSONObject;import java.util.*;/* author derek*/public class JavaTest public static void main(String args)JSONObject obj=new JSONObject();obj.put(derek,23);obj.put(dad,49);obj.put(mom,45);System.out.println(通过构造器的方式创建的JSONObject对象:+obj);Map map=new LinkedHashMap();map.put(derek,23);map.put(dad,49);map.put(mom,45);System.out.println(通过fromObject方法将map对象转换为JSONObject对象:+JSONObject.fromObject(map);JSONArray arr=new JSONArray();arr.add(0,derek);arr.add(1,dad);arr.add(2,mom);System.out.println(通过构造器的方式创建的JSONArray:+arr);ArrayList list=new ArrayList();list.add(derek);list.add(dad);list.add(mom);System.out.println(通过fromObject方法将Arraylist对象转换为JSONArray对象:+JSONArray.fromObject(list);System.out.println(将HashMap对象通过fromObject方法转换为JSONArray对象+JSONArray.fromObject(map);String str=derek:23,dad:49,mom:45;System.out.println(解析之后的JSON对象:+JSONObject.fromObject(str);/遍历输出Iterator it=obj.keys();while(it.hasNext()String key=it.next();System.out.println(key+:+obj.get(key);运行结果如下:通过构造器的方式创建的JSONObject对象:derek:23,dad:49,mom:45通过fromObject方法将map对象转换为JSONObject对象:derek:23,dad:49,mom:45通过构造器的方式创建的JSONArray:derek,dad,mom通过fromObject方法将Arraylist对象转换为JSONArray对象:derek,dad,mom将HashMap对象通过fromObject方法转换为JSONArray对象derek:23,dad:49,mom:45解析之后的JSON对象:derek:23,dad:49,mom:45derek:23dad:49mom:45URIs, URLs, and URNs首先,URI,是uniform resource identifier,统一资源标识符,用来唯一的标识一个资源。而URL是uniform resource locator,统一资源定位器,它是一种具体的URI,即URL可以用来标识一个资源,而且还指明了如何locate这个资源。而URN,uniform resource name,统一资源命名,是通过名字来标识资源,比如mailto:。也就是说,URI是以一种抽象的,高层次概念定义统一资源标识,而URL和URN则是具体的资源标识的方式。URL和URN都是一种URI。在Java的URI中,一个URI实例可以代表绝对的,也可以是相对的,只要它符合URI的语法规则。而URL类则不仅符合语义,还包含了定位该资源的信息,因此它不能是相对的,schema必须被指定。ok,现在回答文章开头提出的问题,到底是imgUrl好呢,还是imgUri好?显然,如果说imgUri是肯定没问题的,因为即使它实际上是url,那它也是uri的一种。那么用imgUrl有没有问题呢?此时则要看它的可能取值,如果是绝对路径,能够定位的,那么用imgUrl是没问题的,而如果是相对路径,那还是不要用ImgUrl的好。总之,用imgUri是肯定没问题的,而用imgUrl则要视实际情况而定。第二个,从HttpServletRequest的javadoc中可以看出,getRequestURI返回一个String,“the part of this requests URL from the protocol name up to the query string in the first line of the HTTP request”,比如“POST /some/path.html?a=b HTTP/1.1”,则返回的值为”/some/path.html”。现在可以明白为什么是getRequestURI而不是getRequestURL了,因为此处返回的是相对的路径。而getRequestURL返回一个StringBuffer,“The returned URL contains a protocol, server name, port number, and server path, but it does not include query string parameters.”,完整的请求资源路径,不包括querystring。总结一下:URL是一种具体的URI,它不仅唯一标识资源,而且还提供了定位该资源的信息。URI是一种语义上的抽象概念,可以是绝对的,也可以是相对的,而URL则必须提供足够的信息来定位,所以,是绝对的,而通常说的relative URL,则是针对另一个absolute URL,本质上还是绝对的。注:这里的绝对(absolute)是指包含scheme,而相对(relative)则不包含scheme。Java网络连接之HttpURLConnection与HttpClient 区别及联系TTP 协议可能是现在 Internet 上使用得最多、最重要的协议了,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源。在 JDK 的 包中已经提供了访问 HTTP 协议的基本功能:HttpURLConnection。 HttpURLConnection是java的标准类,HttpURLConnection继承自URLConnection,可用于向指定网站发送GET请求、POST请求。它在URLConnection的基础上提供了如下便捷的方法: int getResponseCode():获取服务器的响应代码。 StringgetResponseMessage():获取服务器的响应消息。 StringgetResponseMethod():获取发送请求的方法。 void setRequestMethod(String method):设置发送请求的方法。 在一般情况下,如果只是需要Web站点的某个简单页面提交请求并获取服务器响应,HttpURLConnection完全可以胜任。但在绝大部分情况下,Web站点的网页可能没这么简单,这些页面并不是通过一个简单的URL就可访问的,可能需要用户登录而且具有相应的权限才可访问该页面。在这种情况下,就需要涉及Session、Cookie的处理了,如果打算使用HttpURLConnection来处理这些细节,当然也是可能实现的,只是处理起来难度就大了。 为了更好地处理向Web站点请求,包括处理Session、Cookie等细节问题,Apache开源组织提供了一个HttpClient项目,看它的名称就知道,它是一个简单的HTTP客户端(并不是浏览器),可以用于发送HTTP请求,接收HTTP响应。但不会缓存服务器的响应,不能执行HTML页面中嵌入的Javascript代码;也不会对页面内容进行任何解析、处理。 简单来说,HttpClient就是一个增强版的HttpURLConnection,HttpURLConnection可以做的事情HttpClient全部可以做;HttpURLConnection没有提供的有些功能,HttpClient也提供了,但它只是关注于如何发送请求、接收响应,以及管理HTTP连接。 使用HttpClient发送请求、接收响应很简单,只要如下几步即可。1. 创建HttpClient对象。2. 如果需要发送GET请求,创建HttpGet对象;如果需要发送POST请求,创建HttpPost对象。3. 如果需要发送请求参数,可调用HttpGet、HttpPost共同的setParams(HetpParams params)方法来添加请求参数;对于HttpPost对象而言,也可调用setEntity(HttpEntity entity)方法来设置请求参数。4. 调用HttpClient对象的execute(HttpUriRequest request)发送请求,执行该方法返回一个HttpResponse。5. 调用HttpResponse的getAllHeaders()、getHeaders(String name)等方法可获取服务器的响应头;调用HttpResponse的getEntity()方法可获取HttpEntity对象,该对象包装了服务器的响应内容。程序可通过该对象获取服务器的响应内容。 另外,Android已经成功地集成了HttpClient,这意味着开发人员可以直接在Android应用中使用Httpclient来访问提交请求、接收响应。 比如一个Android应用需要向指定页面发送请求,但该页面并不是一个简单的页面,只有当用户已经登录,而且登录用户的用户名有效时才可访问该页面。如果使用HttpURLConnection来访问这个被保护的页面,那么需要处理的细节就太复杂了。 其实访问Web应用中被保护的页面,使用浏览器则十分简单,用户通过系统提供的登录页面登录系统,浏览器会负责维护与服务器之间的Sesion,如果用户登录的用户名、密码符合要求,就可以访问被保护资源了。 在Android应用程序中,则可使用HttpClient来登录系统,只要应用程序使用同一个HttpClient发送请求,HttpClient会自动维护与服务器之间的Session状态,也就是说程序第一次使用HttpClient登录系统后,接下来使用HttpClient即可访问被保护页而了。android之HttpURLConnection1.HttpURLConnection连接URL1)创建一个URL对象URL url = new URL();2)利用HttpURLConnection对象从网络中获取网页数据HttpURLConnection conn = (HttpURLConnection) url.openConnection();3)设置连接超时conn.setConnectTimeout(6*1000);4)对响应码进行判断if (conn.getResponseCode() != 200) /从Internet获取网页,发送请求,将网页以流的形式读回来throw new RuntimeException(请求url失败);5)得到网络返回的输入流InputStream is = conn.getInputStream();6)String result = readData(is, GBK); /文件流输入 出文件用outStream.write7)conn.disconnect();总结:-记得设置连接超时,如果网络不好,Android系统在超过默认时间会收回资源中断操作.-返回的响应码200,是成功.-在Android中对文件流的操作和JAVA SE上面是一样的.-在对大文件的操作时,要将文件写到SDCard上面,不要直接写到手机内存上.-操作大文件是,要一遍从网络上读,一遍要往SDCard上面写,减少手机内存的使用.这点很重要,面试经常会被问到.-对文件流操作完,要记得及时关闭.2.向Internet发送请求参数步骤:1)创建URL对象:URL realUrl = new URL(requestUrl);2)通过HttpURLConnection对象,向网络地址发送请求HttpURLConnection conn = (HttpURLConnection) realUrl.openConnection();3)设置容许输出:conn.setDoOutput(true);4)设置不使用缓存:conn.setUseCaches(false);5)设置使用POST的方式发送:conn.setRequestMethod(POST);6)设置维持长连接:conn.setRequestProperty(Connection, Keep-Alive);7)设置文件字符集:conn.setRequestProperty(Charset, UTF-8);8)设置文件长度:conn.setRequestProperty(Content-Length, String.valueOf(data.length);9)设置文件类型:conn.setRequestProperty(Content-Type,application/x-www-form-urlencoded);10)以流的方式输出.总结:-发送POST请求必须设置允许输出-不要使用缓存,容易出现问
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年保密教育知识题库及答案
- 中医中级考试试题及答案
- 中国移动四平市2025秋招笔试模拟题及答案
- 中国广电池州市2025秋招笔试题库含答案
- 中国广电汉中市2025秋招面试典型题目及答案
- 中国联通楚雄自治州2025秋招技术岗专业追问清单及参考回答
- 安顺市中石油2025秋招面试半结构化模拟题及答案油品分析质检岗
- 国家能源桂林市2025秋招面试典型题目及答案
- 福建道教考试试题及答案
- 2025年小儿高热考试题及答案
- 《国庆假期安全教育》课件
- 2025年辅警招聘考试试题库及完整答案(历年真题)
- 2025湖北宜昌市不动产交易和登记中心招聘编外聘用人员17人考试参考题库及答案解析
- 2025下半年四川内江市隆昌诚信农业产业化融资担保有限责任公司招聘4人考试参考题库及答案解析
- 《春江花月夜》课件+2025-2026学年统编版高二语文选择性必修上册
- 广州中侨置业投资控股集团有限公司债权资产评估报告
- 脑梗的课件和提纲
- 监控工程试运行方案(3篇)
- 2025年秋季学期学校红领巾监督岗工作实施细则
- 政务信息化统一建设项目监理服务方案投标文件(技术方案)
- 本科院校纪检监察室招聘笔试经典考题含答案
评论
0/150
提交评论