Listing 3显示了一个很简单的main方法,可以用来测试HttpProxy类 。大部分的工作由一个静态的startProxy方法完成(见Listing 4) 。这个方法用到了一种特殊的技术,允许一个静态成员创建HttpProxy类(或HttpProxy类的子类)的实例 。它的基本思想是:把一个Class对象传递给startProxy类;然后,startProxy方法利用映像API(Reflection API)和getDeclaredConstructor方法确定该Class对象的哪一个构造函数接受一个Socket参数;最后,startProxy方法调用newInstance方法创建该Class对象 。
【Listing 3】
// 测试用的简单main方法
static public void main(String args[]) {
System.out.println("在端口808启动代理服务器\n");
HttpProxy.log=System.out;
HttpProxy.logging=false;
HttpProxy.startProxy(808,HttpProxy.class);
}
}
【Listing 4】
static public void startProxy(int port,Class clobj) {
ServerSocket ssock;
Socket sock;
try {
ssock=new ServerSocket(port);
while (true) {
Class [] sarg = new Class[1];
Object [] arg= new Object[1];
sarg[0]=Socket.class;
try {
java.lang.reflect.Constructor cons = clobj.getDeclaredConstructor(sarg);
arg[0]=ssock.accept();
cons.newInstance(arg); // 创建HttpProxy或其派生类的实例
} catch (Exception e) {
Socket esock = (Socket)arg[0];
try { esock.close(); } catch (Exception ec) {}
}
}
} catch (IOException e) {
}
}
利用这种技术,我们可以在不创建startProxy方法定制版本的情况下,扩展HttpProxy类 。要得到给定类的Class对象,只需在正常的名字后面加上.class(如果有某个对象的一个实例,则代之以调用getClass方法) 。由于我们把Class对象传递给了startProxy方法,所以创建HttpProxy的派生类时,就不必再特意去修改startProxy 。(下载代码中包含了一个派生得到的简单代理服务器) 。
结束语
利用派生类定制或调整代理服务器的行为有两种途径:修改主机的名字,或者捕获所有通过代理服务器的数据 。processHostName方法允许代理服务器分析和修改主机名字 。如果启用了日志记录,代理服务器为每一个通过服务器的字符调用writeLog方法 。如何处理这些信息完全由我们自己决定——可以把它写入日志文件,可以把它输出到控制台,或进行任何其他满足我们要求的处理 。writeLog输出中的一个Boolean标记指示出数据是来自浏览器还是Web主机 。
和许多工具一样,代理服务器本身并不存在好或者坏的问题,关键在于如何使用它们 。代理服务器可能被用于侵犯隐私,但也可以阻隔偷窥者和保护网络 。即使代理服务器和浏览器不在同一台机器上,我也乐意把代理服务器看成是一种扩展浏览器功能的途径 。例如,在把数据发送给浏览器之前,可以用代理服务器压缩数据;未来的代理服务器甚至还可能把页面从一种语言翻译成另一种语言……可能性永无止境 。
Java 中怎样在程序中设置代理服务器从JDK1.5开始,Java在java.net包下提供了Proxy和ProxySelector两个类 , 其中Proxy代表一个代理服务器 , 可以在打开URLConnection连接时指定所用的Proxy实例,也可以在创建Socket连接时指定Proxy实例 。而ProxySelector代表一个代理选择器,它提供了对代理服务器更加灵活的控制,它可以对HTTP、HTTPS、FTP、SOCKS等分别设置,而且还可以设置不需要通过代理服务器的主机和地址 。通过使用ProxySelector可以达到像在Internet Explorer、FireFox等软件中设置代理服务器类似的效果 。
代理服务器的功能就是代理网络用户去取得网络信息 。我们使用网络浏览器直接连接其他Internet站点取得网络信息时,通常需要发送Request请求来等到响应 。代理服务器是介于浏览器和Web服务器之间的一台服务器 , 有了它之后,浏览器不是直接到Web服务器去取得网页数据而是向代理服务器发出请求,Request请求会先送到代理服务器,由代理服务器来取回浏览器所需要的信息并送回给网络浏览器 。而且 , 大部分代理服务器都具有缓冲的功能,就好像一个大的Cache,它有很大的存储空间,它不断将新取得的数据储存到它本机的存储器上 , 如果浏览器所请求的数据在它本机的存储器上已经存在而且是最新的,那么它就不重新从Web服务器取数据,而直接将存储器上的数据传送给用户的浏览器,这样就能显著提高浏览速度和效率 。归纳起来代理服务器主要提供如下两个功能:
推荐阅读
- b站企业账号直播平台,b站 企业号
- python怎么将文件复制粘贴,python 复制文件夹到指定文件夹
- word大文件如何打开,doc文件太大打不开
- 电商记如何卸载,电商记怎么下载
- python的仿射函数 仿射变换matlab代码
- postgresql修改分区命名的简单介绍
- java预警代码空气质量,java预警代码空气质量是多少
- 数据接口调用php php接口调用数据库
- 路由器怎么样去改密码啊,路由器怎么改密码wifi密码