`

J2SE5.0新特性之使用代理服务器

阅读更多
5.0以前的代理服务器设置挺不友好,现在,5.0提供了对通过代理服务器的更加灵活的控制,
它可以对http,https,ftp,socks等分别设置,而且还可以设置不需要通过代理服务器的主机和地址。
这和我们在IE、firefox中设置代理服务器类似。

1.你可以在通过java -DXXXX=YYYY方式在程序启动时设置,你也可以在程序中将设置放入系统属性中,你也可以设置Proxy类,通过它来控制。

2.可以通过ProxySelector来做自己的代理服务器的负载平衡等。


package com.kuaff.jdk5package; 

import java.io.IOException; 
import java.io.InputStream; 
import java.net.InetSocketAddress; 
import java.net.MalformedURLException; 
import java.net.Proxy; 
import java.net.ProxySelector; 
import java.net.SocketAddress; 
import java.net.URI; 
import java.net.URISyntaxException; 
import java.net.URL; 
import java.net.URLConnection; 
import java.util.List; 
import java.util.Properties; 

public class NetProxy 
{ 
    // 测试本地JVM的网络缺省配置 
    public void setLocalProxy() 
    { 
        Properties prop = System.getProperties(); 
       //设置http访问要使用的代理服务器的地址 
        prop.setProperty("http.proxyHost", "10.10.0.96"); 
       //设置http访问要使用的代理服务器的端口 
        prop.setProperty("http.proxyPort", "8080"); 
       //设置不需要通过代理服务器访问的主机,可以使用*通配符,多个地址用|分隔 
        prop.setProperty("http.nonProxyHosts", "localhost|10.10.*"); 

       //设置安全访问使用的代理服务器地址与端口 
       //它没有https.nonProxyHosts属性,它按照http.nonProxyHosts 中设置的规则访问 
        prop.setProperty("https.proxyHost", "10.10.0.96"); 
        prop.setProperty("https.proxyPort", "443"); 

        //使用ftp代理服务器的主机、端口以及不需要使用ftp代理服务器的主机 
        prop.setProperty("ftp.proxyHost", "10.10.0.96"); 
        prop.setProperty("ftp.proxyPort", "2121"); 
        prop.setProperty("ftp.nonProxyHosts", "localhost|10.10.*"); 

        //socks代理服务器的地址与端口 
        prop.setProperty("socksProxyHost", "10.10.0.96"); 
        prop.setProperty("socksProxyPort", "1080"); 
    } 

    // 清除proxy设置 
    public void removeLocalProxy() 
    { 
        Properties prop = System.getProperties(); 
        prop.remove("http.proxyHost"); 
        prop.remove("http.proxyPort"); 
        prop.remove("http.nonProxyHosts"); 

        prop.remove("https.proxyHost"); 
        prop.remove("https.proxyPort"); 

        prop.remove("ftp.proxyHost"); 
        prop.remove("ftp.proxyPort"); 
        prop.remove("ftp.nonProxyHosts"); 

        prop.remove("socksProxyHost"); 
        prop.remove("socksProxyPort"); 
    } 

    // 

    // 测试http 
    public void showHttpProxy(Object... proxy) 
    { 
        URL url = null; 
        try 
        { 
            url = new URL("http://blog.csdn.com/smallnest"); 
        } 
        catch (MalformedURLException e) 
        { 
            return; 
        } 
        try 
        { 
            URLConnection conn = null; 
            switch (proxy.length) 
            { 
            case 0: 
                conn = url.openConnection(); 
                break; 
            case 1: 
                conn = url.openConnection((Proxy) proxy[0]); 
                break; 
            default: 
                break; 
            } 

            if (conn == null) 
                return; 

            conn.setConnectTimeout(3000); // 设置连接超时时间 
            InputStream in = conn.getInputStream(); 
            byte[] b = new byte[1024]; 
            try 
            { 
                while (in.read(b) > 0) 
                { 
                    System.out.println(new String(b)); 
                } 
            } 
            catch (IOException e1) 
            { 
            } 
        } 
        catch (IOException e1) 
        { 
            e1.printStackTrace(); 
        } 

    } 

    // 测试ftp 
    public void showFtpProxy(Object... proxy) 
    { 
        URL url = null; 
        try 
        { 
            url = new URL("ftp://ftp.tsinghua.edu.cn"); 
        } 
        catch (MalformedURLException e) 
        { 
            return; 
        } 
        try 
        { 
            URLConnection conn = null; 
            switch (proxy.length) 
            { 
            case 0: 
                conn = url.openConnection(); 
                break; 
            case 1: 
                conn = url.openConnection((Proxy) proxy[0]); 
                break; 
            default: 
                break; 
            } 

            if (conn == null) 
                return; 

            conn.setConnectTimeout(3000); // 设置连接超时时间 
            InputStream in = conn.getInputStream(); 
            byte[] b = new byte[1024]; 
            try 
            { 
                while (in.read(b) > 0) 
                { 
                    System.out.println(new String(b)); 
                } 
            } 
            catch (IOException e1) 
            { 
            } 
        } 
        catch (IOException e1) 
        { 
            e1.printStackTrace(); 
        } 

    } 

    // 得到一个proxy 
    public Proxy getProxy(Proxy.Type type, String host, int port) 
    { 
        SocketAddress addr = new InetSocketAddress(host,port); 
        Proxy typeProxy = new Proxy(type, addr); 
        return typeProxy; 
    } 

    public static void main(String[] args) 
    { 
        NetProxy proxy = new NetProxy(); 
        //测试代理服务器 
        proxy.setLocalProxy(); 
        proxy.showHttpProxy(); 

        //下面两行是清除系统属性,而通过Proxy类指定代理服务器 
        // proxy.removeLocalProxy 
        //proxy.showHttpProxy(proxy.getProxy(Proxy.Type.SOCKS,"10.10.0.96",1080)); 
         
                 
    } 
} 




摘自: http://www.javaresearch.org/article/19905.htm
分享到:
评论

相关推荐

    2022年J2SE5.0新特性之使用代理服务器Java教程.docx

    Java 2 Standard Edition (J2SE) 5.0,也称为 Java 5.0,引入了许多新特性,其中一项重要改进是对于代理服务器支持的增强。在J2SE 5.0之前,配置代理服务器相对复杂,但现在,Java提供了一种更灵活的方式来设置和...

    J2SE6.0中文版.rar

    Java Standard Edition(J2SE)是Java平台的核心部分,它为开发和运行桌面应用、服务器应用以及网络应用程序提供了基础框架。J2SE 6.0是Oracle公司发布的一个重要版本,包含了众多新特性、改进和优化,对于Java...

    Java SE帮助文档(从5到8的英文版)

    Java 5,也称为Java 2 Platform Standard Edition 5.0(J2SE 5.0),引入了诸多重要特性,如泛型、枚举、自动装箱/拆箱、可变参数、增强的for循环(foreach)以及注解(Annotation)。泛型允许在类、接口和方法中...

    java jdk实列宝典 光盘源代码

    16 j2se5.0 新特性 自动装箱和拆箱; 新的for循环; 枚举类型; 静态导入; 格式化输出; 使用ProcessBuilder执行本地命令; 泛型编程; 监控和管理虚拟机;新的线程执行架构; 线程锁; 线程条件; 线程同步装置:semaphore ...

    20年Java发展历程(1995-2015)

    Java编程语言自1995年诞生以来,历经20年的风雨,已经成为全球最广泛使用的编程语言之一。这篇博文将回顾Java的发展历程,探讨其重要里程碑、关键版本更新以及对IT行业的深远影响。 1. Java的诞生:1995年,由James...

    JAVA教程下载

    "JAVA视频教程_J2SE_5.0"特别强调了Java Standard Edition 5.0,这是一个重要的Java版本,引入了如枚举、泛型和动态代理等新特性,对于理解Java的历史和演化过程非常重要。 "《java编程基础》视频教程 吉林大学...

    Java JDK实例宝典

    8 代理服务器 13. 9 Telnet客户端 13. 10 UDP编程 13. 11 聊天室服务器端 13. 12 聊天室客户端 13. 13 FTP客户端 第14章 数据库 14. 1 连接各种数据库 14. 2 获得数据库和表的元...

    Java in a Nutshell

    7. **反射与动态代理**:Java反射API允许程序在运行时检查和操作类、接口、字段和方法,动态代理则允许在运行时创建具有特定接口的新类。 8. **泛型**:自Java 5.0起引入,提高了代码的类型安全性和重用性。 9. **...

    JonathanLeonardoOchoafb009

    Java泛型引入于J2SE 5.0,提高了类型安全性和代码可读性。泛型允许在编译时检查类型,避免了类型转换的麻烦和潜在的ClassCastException。 【注解(Annotation)】 注解是一种元数据,提供了将信息附加到代码中的...

    (超赞)JAVA精华之--深入JAVA API

    **2.6 应用服务器的集群策略及Java EE 5.0** - **集群策略** - 通过负载均衡提高应用的可用性和性能。 **2.7 Servlet中的Listener的应用** - **监听器** - 监听器用于响应特定事件,如应用启动、销毁等。 **...

Global site tag (gtag.js) - Google Analytics