Jsonp和java操作例子

      介绍JSONP之前,先简单的介绍一些JSON。JSON是JavaScript Object Notation的缩写,是一种轻量的、可读的基于文本的数据交换开放标准。源于JavsScript编程语言中对简单数据结构和关联数组的展示功能。它是仅含有数据对和简单括号结构的纯文本,因此可通过许多途径进行JSON消息的传递。

 

1. JSONP定义
    JSONP是英文JSON with Padding的缩写,是一个非官方的协议。它允许在服务器端生成script tags返回至客户端,通过javascript callback的形式来实现站点访问。 JSONP是一种script tag的注入,将server返回的response添加到页面实现特定功能。

2.JSONP由来

    要解释JSONP的来由,先要说一下浏览器的“同源策略(SOP:Same Origin Policy)”。 简而言之,就是浏览器限制脚本程序只能和同协议、同域名、同端口的脚本进行交互,这包括共享和传递变量等。cookie的传递也是遵从同样策略。这就造成一些涉及到多个服务器的应用在整合时一些麻烦。跨域访问的问题造成A站点的Ajax代码无法访问B站点的数据。

     如何解决跨域访问呢?那就要借助浏览器的一个特性:尽管浏览器不允许页面中的脚本程序跨域读取数据,但却允许HTML引用跨域的资源,如图片,CSS和脚本程序。对于脚本程序的引用比较特殊,它被浏览器解析以后,就和本地的脚本程序别无二致且可立即进行解释并执行。如在B站点的一个js文件,一个简单的提示框:alert(“This is Victor!”);。在A站点引用这个js,这个脚本就会在B站点的应用中执行,显示一个alert信息。由于站外脚本的引用是通过script tag来实现的,而脚本程序又可通过DOM的方式可以对HTML页面的所有标签进行控制(包括动态的创建script标签),这就可以实现通过调用站外程序对本地资源进行更改了。另外,通过<script> 标记的使用,就可从服务端直接返回可执行的JavaScript函数调用或者JSON数据。

 

3. JSONP原理与实现
    首先在客户端注册一个callback, 然后把callback的名字传给服务器。此时,服务器先生成 JSON数据。然后以JavaScript 语法的方式,生成一个function, function名字就是传递上来的参数jsonp.  

    然后,将JSON数据直接以入参的方式,放置到function中,这样就生成了一段 js 语法的文档,返回给客户端。 

    最后,在客户端浏览器中解析script标签,并执行返回的JavaScript文档,此时数据作为参数,传入到了客户端预先定义好的回调函数里(动态执行回调函数) 。

 

 

其实 JSONP是个很简单的一个东西。主要是利用了 <script/>标签对javascript文档的动态解析来实现。(其实也可以用eval函数) 。

 

4.下面分别用js和jquery实现代码如下:

test.jsp中的js代码:

 

js:

 或jquery代码:

 

 

jsonp.jsp代码:

当然,后台可以用action或servlet等实现。

 

最后,只要是浏览器输入http://localhost:8080/Jsonp/test.jsp就会弹出John了。

 

<think>好的,用户现在想了解JSONPJSONPath之间的区别与联系。我需要先回顾一下这两个概念,确保自己理解正确,然后组织一个清晰易懂的解释。 首先,用户之前的问题是关于EditPlus替换功能报错的问题,现在突然转向JSONPJSONPath,看起来是新的主题。但根据提供的引用内容,用户可能在处理JSON数据时遇到了相关工具的使用,比如JSONPath,然后可能混淆了JSONPJSONPath,因此需要明确两者的区别。 首先,JSONPJSON with Padding)是一种跨域数据获取的技术,主要用于解决浏览器的同源策略限制。它通过动态创建script标签来请求数据,服务器返回的数据被包裹在一个函数调用中,这样客户端可以预先定义该函数来处理数据。例如,请求的URL可能包含一个回调函数名,服务器返回如`callbackFunction({data})`,这样客户端脚本就能接收到数据。 而JSONPath是一种查询语言,用于在JSON结构中定位提取数据,类似于XPath在XML中的应用。用户可以使用特定的表达式,如`$.store.book[0].title`来获取JSON中的特定值。这在数据解析提取时非常有用,尤其是在处理复杂的嵌套结构时。 接下来需要明确两者的区别:JSONP是解决跨域问题的数据传输方法,而JSONPath是数据查询工具。它们的用途完全不同,但都涉及JSON数据的处理。联系方面,可能在于它们都是处理JSON数据的工具,但应用场景不同。例如,一个网站可能使用JSONP从不同域的API获取数据,然后使用JSONPath解析返回的JSON数据。 需要确保解释时用简单明了的例子,比如JSONP的工作流程JSONPath的查询示例,帮助用户直观理解。同时,避免技术术语过于复杂,保持口语化。 另外,用户提供的引用中提到了JSONPath的语法应用,比如在Python中的使用,但未提及JSONP。可能需要补充JSONP的典型应用场景,比如在Web开发中的跨域请求,而JSONPath用于解析本地或服务器返回的JSON数据。 还要注意用户可能存在的混淆点,比如名称相似但功能不同,强调两者虽然名字相近,但解决的问题完全不同。可能需要提醒用户注意拼写,避免混淆。 最后,总结区别联系,确保用户能够清晰区分两者的用途适用场景。</think>### JSONPJSONPath 的区别与联系 #### 一、核心概念 1. **JSONPJSON with Padding)** - **跨域数据获取技术**:通过动态创建`<script>`标签绕过浏览器的同源策略限制,实现跨域请求[^1]。 - **实现方式**:服务器返回数据时,将JSON包裹在客户端指定的回调函数中,例如: ```javascript callbackFunction({"name": "Alice", "age": 30}); ``` - **典型应用场景**:早期跨域API调用(如获取第三方天气数据)[^2]。 2. **JSONPath** - **JSON数据查询语言**:类似XPath对XML的定位能力,通过表达式从JSON结构中提取特定数据[^3]。 - **语法示例**: ```plaintext $.store.book[?(@.price > 10)].title // 提取价格超过10的书籍标题 ``` - **典型应用场景**:爬虫数据解析、接口测试(如使用Python的`jsonpath`库)[^4]。 --- #### 二、核心区别 | **特性** | **JSONP** | **JSONPath** | |----------------|------------------------------|-----------------------------| | **用途** | 跨域数据传输 | JSON数据查询与提取 | | **技术类型** | 数据传输协议 | 数据查询语言 | | **依赖关系** | 需要服务端配合返回回调函数 | 仅依赖本地解析库 | | **安全性** | 存在安全风险(如XSS攻击) | 无跨域风险 | | **示例工具** | jQuery的`$.ajax`(JSONP模式)| Python的`jsonpath`库 | --- #### 三、实际联系 1. **数据流程中的协作** 在Web开发中,可能先用JSONP跨域获取数据,再用JSONPath解析响应内容: ```javascript // 前端通过JSONP获取数据 function handleResponse(data) { // 使用JSONPath提取所需字段 const titles = jsonpath.query(data, "$.store.book[*].title"); } ``` 2. **名称相似性** 两者均涉及JSON数据处理,但**功能完全独立**: - JSONP解决“如何获取数据” - JSONPath解决“如何提取数据” --- #### 四、常见误区 - **误区1**:认为JSONPJSON的增强格式 **纠正**:JSONP是数据传输的“包装协议”,与JSON格式无关。 - **误区2**:混淆JSONPathXPath的作用范围 **纠正**:JSONPath专为JSON设计,而XPath仅用于XML(但语法设计有借鉴)。 --- #### 五、选择建议 - **需要跨域获取数据** ➔ 优先用**CORS**(现代标准),次选JSONP(旧方案) - **需要精准提取JSON字段** ➔ 使用**JSONPath**(Python/Java均有成熟库) ```python # Python中使用JSONPath的示例 import jsonpath data = {"store": {"book": [{"title": "A", "price": 8}, {"title": "B", "price": 12}]}} result = jsonpath.jsonpath(data, "$.store.book[?(@.price > 10)].title") # 输出:['B'] ``` ---
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值