常用proxy之MemoryProxy
MemoryProxy只能从JavaScript对象获得数据,可以直接把数组,或JSON和XML格式的数据交给它处理,如下面的代码所示。
-
var proxy = new Ext.data.MemoryProxy([
-
['id1','name1','descn1'],
-
['id2','name2','descn2']
-
]);
常用proxy之HttpProxy
HttpProxy使用HTTP协议,通过Ajax去后台取数据,构造它时需要设置参数。
这里的url可以替换成任何一个合法的网址,这样HttpProxy才知道去哪里获取数据,如下面的代码所示。
- var proxy = new Ext.data.HttpProxy({url:'xxx.jsp'});
后台需要返回EXT所需要的JSON格式的数据,下面的内容就是后台使用JSP的一个范例,如下面的代码所示。
-
response.setContentType("application/x-json");
-
Writer out = response.getWriter();
-
out.print("[" +
-
"['id1','name1','descn1']" +
-
"['id2','name2','descn2']" +
-
"]");
请注意,这里的HttpProxy不支持跨域,它只能从同一域中获得数据。如果想跨域,请参考下面的ScriptTagProxy。
常用proxy之ScriptTagProxy
ScriptTagProxy的用法几乎和HttpProxy一样,如下面的代码所示。
- var proxy = new Ext.data.ScriptTagProxy({url:'xxx.jsp'});
从这里也看不出来它是如何支持跨域的,我们还需要在后台进行相应的处理,如下面的代码所示。
-
String cb = request.getParameter("callback");
-
response.setContentType("text/javascript");
-
Writer out = response.getWriter();
-
out.write(cb + "(");
-
out.print("[" +
-
"['id1','name1','descn1']" +
-
"['id2','name2','descn2']" +
-
"]");
-
out.write(");");
其中的关键就在于从请求中获得的callback参数,这个参数叫做回调函数。
Proxy会在当前的HTML页面里添加一个标签,然后把后台返回的内容添加到这个标签中这样就可以解决跨域访问数据的问题。
为了让后台返回的内容可以在动态生成的标签中运行,EXT会生成一个名为callback的回调函数,
并把回调函数的名称传递给后台,由后台生成callback(data)形式的响应内容,然后返回给前台自动运行。
虽然上述处理过程比较难理解,但是我们只需要了解ScriptTagProxy的用法就足够了。
如果还想进一步了解ScriptTagProxy的运行过程,可以使用Firebug查看动态生成的HTML以及响应的JSON内容。
最后我们来分析一下EXT的API文档中提供的示例,这段后台代码会自动判断请求的类型,
返回支持ScriptTagProxy或HttpProxy的数据,如代码清单10-2所示。
代码清单 在后台同时支持HttpProxy和ScriptTagProxy
-
boolean scriptTag = false;
-
String cb = request.getParameter("callback");
-
-
if (cb != null) {
-
scriptTag = true;
-
response.setContentType("text/javascript");
-
} else {
-
response.setContentType("application/x-json");
-
}
-
-
Writer out = response.getWriter();
-
if (scriptTag) {
-
out.write(cb + "(");
-
-
}
-
-
out.print(dataBlock.toJsonString());
-
-
if (scriptTag) {
-
out.write(");");
-
}
代码中通过判断请求中是否包含callback参数来决定返回何种数据类型。
如果包含,就返回ScriptTagProxy需要的数据;否则,就当作HttpProxy处理。
分享到:
相关推荐
PAC(Proxy Auto-Configuration)是网络管理中常用的一种技术,尤其在企业环境中,它允许网络管理员集中控制和管理用户的网络访问策略,比如通过代理服务器过滤不合适的网站或优化网络流量。 在压缩包内的文件...
2. **Callback接口**:CGLIB使用`net.sf.cglib.proxy.Callback`接口来实现类似于InvocationHandler的功能,其中最常用的是`MethodInterceptor`,它在方法调用前/后执行额外的逻辑。 3. **使用示例**:ProxyDemo可能...
在`Proxy.zip`示例代码中,我们可能看到了以下几个关键部分: 1. **代理类(Proxy)**:代理类是目标类的代理,它拥有与目标类相同的方法接口,以便客户端可以透明地调用。在代理类中,通常会包含一个目标对象的...
package org.sg.sgg.mode.proxy.jdkProxy.trendProxy2; /** * java JDK实现动态代理 * @author * */ public class Test2 { public static void main(String[] args) { UserService userService = new ...
PAC文件的基本结构通常包括一个名为“FindProxyForURL(url, host)”的函数,它会根据输入的URL和主机名返回一个字符串,指示浏览器应如何处理请求(例如,“DIRECT”表示不使用代理,“PROXY proxy.example.com:8080...
- `rw-splitting.lua` 是一个常用的Lua脚本,用于实现读写分发,即将读操作发送到只读服务器,写操作发送到主服务器。 - 其他如`auto-config.lua`, `balance.lua`, `commands.lua`, `parser.lua`, `tokenizer.lua`...
Proxy和Mycat是两种常用的中间件,用于实现这些功能。本篇文章将深入探讨proxy和Mycat的对比测试,以及如何在MySQL主从架构中进行测试。 首先,我们来看proxy。Proxy通常指的是数据库代理服务器,它位于应用服务器...
包括下列常用插件: adblock_plus-2.2.3-tb+an+sm+fx.xpi autoproxy-0.4b2.2011041023-fx+tb+sm.xpi betterprivacy-1.68-fx.xpi email_notifier-0.6.2-fx.xpi feedly-10.2-fx.xpi firebug-1.11.2-fx.xpi foxdie-15-...
9.HttpProxy.java 代理设置 10.CaptureScreen.java 截取桌面 11.XmlReaer.java 读写xml文件 12.ArrayConvers.java 数组与map/list的转换 13.NumberCalc.java 对数字进行操作 14.ServerConn.java与ClientConn 先运行...
MyInterface proxy = (MyInterface) Proxy.newProxyInstance( MyInterface.class.getClassLoader(), new Class[]{MyInterface.class}, new MyInvocationHandler(target) ); proxy.doSomething(); } } ``` 在...
教你学会几种常用的密码破解法教你学会几种常用的密码破解法教你学会几种常用的密码破解法
5. **缓存机制**:为了减少网络延迟,库可能包含本地缓存策略,将常用数据存储在本地,提升数据访问速度。 6. **异步操作**:在处理大量I/O操作时,使用异步编程模型可以提高并发性能,backend.ai_storage_proxy...
- 可能还有一个动态代理类(DynamicProxy),使用了`Proxy.newProxyInstance()`方法来创建代理对象,并实现了`InvocationHandler`接口,用于处理接口方法的调用。 此外,压缩包可能还包含测试类(Test)来展示如何...
在IT领域,串口(Serial Port)是早期计算机常用的一种接口,用于连接各种外设,如打印机、调制解调器等。然而,随着网络技术的发展,TCP/IP协议成为了主流的通信方式。在某些情况下,比如在使用VMware虚拟机时,...
在“netty proxy 代理例子”中,我们将会探讨如何利用 Netty 实现一个代理服务器,该代理服务器可以转发客户端的请求到目标服务器,并将响应回传给客户端。 首先,我们需要理解代理服务器的基本原理。代理服务器...
PyPI(Python Package Index)是Python开发者常用的资源库,它提供了大量的Python软件包,供用户下载和安装。这个资源"toproxy-0.2.tar.gz"就是从PyPI官网上获取的一个Python库的压缩包。该压缩包包含了特定版本...
NHibernate.dll NHibernate.ByteCode.Castle.dll NHibernate.ByteCode.Castle.dll Castle.Core.dll Castle.DynamicProxy2.dll Antlr3.Runtime.dll log4net.dll Iesi.Collections.dl NHibernate.cst
5. **启动mysql-proxy**:通过上述命令启动mysql-proxy后,它将会根据接收到的SQL语句类型(读或写),将请求转发至相应的数据库。 6. **验证读写分离是否成功**:可以通过向mysql-proxy发送SQL语句并观察其转发...
以下是对`java.lang.reflect`包中常用类和方法的详细说明。 1. **Class类**: - `Class`对象代表Java中的类型或类。每个类在内存中都有一个唯一的`Class`实例,可以通过`Class.forName()`方法获取,或者通过`...
反向代理(Reverse Proxy)是一种常用的网络架构模式,通过使用反向代理,可以将客户端的请求转发到内部服务器,提高了网络安全性和负载均衡能力。 在本文中,我们将介绍如何使用 Nginx 配置反向代理,实现 ...