Java 中怎样在程序中设置代理服务器

Java 中怎样在程序中设置代理服务器,第1张

从JDK15开始,Java在javanet包下提供了Proxy和ProxySelector两个类,其中Proxy代表一个代理服务器,可以在打开URLConnection连接时指定所用的Proxy实例,也可以在创建Socket连接时指定Proxy实例。而ProxySelector代表一个代理选择器,它提供了对代理服务器更加灵活的控制,它可以对HTTP、HTTPS、FTP、SOCKS等分别设置,而且还可以设置不需要通过代理服务器的主机和地址。通过使用ProxySelector可以达到像在Internet Explorer、FireFox等软件中设置代理服务器类似的效果。

代理服务器的功能就是代理网络用户去取得网络信息。我们使用网络浏览器直接连接其他Internet站点取得网络信息时,通常需要发送Request请求来等到响应。代理服务器是介于浏览器和Web服务器之间的一台服务器,有了它之后,浏览器不是直接到Web服务器去取得网页数据而是向代理服务器发出请求,Request请求会先送到代理服务器,由代理服务器来取回浏览器所需要的信息并送回给网络浏览器。而且,大部分代理服务器都具有缓冲的功能,就好像一个大的Cache,它有很大的存储空间,它不断将新取得的数据储存到它本机的存储器上,如果浏览器所请求的数据在它本机的存储器上已经存在而且是最新的,那么它就不重新从Web服务器取数据,而直接将存储器上的数据传送给用户的浏览器,这样就能显著提高浏览速度和效率。归纳起来代理服务器主要提供如下两个功能:

突破自身IP限制,对外隐藏自身IP地址。突破IP限制包括访问国外受限站点,访问国内特定单位、团体的内部资源。

提高访问速度,代理服务器提供的缓冲功能可以避免每个用户都直接访问远程主机,从而提高客户端访问速度。

1751 直接使用Proxy创建连接

Proxy有如下一个构造器:Proxy(ProxyType type, SocketAddress sa):创建表示代理服务器的Proxy对象。而sa参数指定代理服务器的地址,其中type是该代理服务器的类型,该服务器类型有如下三种:

(1)ProxyTypeDIRECT:表示直接连接或缺少代理。

(2)ProxyTypeHTTP:表示高级协议的代理,如 HTTP 或 FTP。

(3)ProxyTypeSOCKS:表示 SOCKS(V4 或 V5)代理。

一旦创建了Proxy对象之后,程序就可以在使用URLConnection打开连接时,或创建Socket连接时传入一个Proxy对象,作为本次连接所使用的代理服务器。

其中URL包含了一个URLConnection openConnection(Proxy proxy)方法,该方法使用指定的代理服务器来打开连接;而Socket则提供了一个Socket(Proxy proxy)构造器,该构造器使用指定的代理服务器创建一个没有连接的Socket对象。

下面以URLConnection为例来介绍如何在URLConnection中使用代理服务器。

程序清单:codes/17/17-5/ProxyTestjava

上面代码第一行粗体字代码创建了一个Proxy对象,第二行粗体字代码就是用Proxy对象来打开URLConnection连接。除此之外,该程序的其他地方就是对URLConnection的使用了。由此可见, JDK15提供了对代理服务器很好的支持。

1752 使用ProxySelector选择代理服务器

前面介绍的直接使用Proxy对象可以在打开URLConnection或Socket时指定代理服务器,使用这种方式需要每次打开连接都显式设置代理服务器。如果想让系统打开连接时总是具有默认的代理服务器,则可以使用javanetProxySelector,它可以它根据不同的连接使用不同的代理服务器。

系统默认的ProxySelector会检测各种系统属性和URL协议,然后决定怎样连接不同的主机。当然,程序也可以调用ProxySelector类的setDefaultI()静态方法来设置默认代理服务器,也可以调用getDefault()方法获得系统当前默认的代理服务器。

程序可以通过System类来设置系统的代理服务器属性,关于代理服务器常用的属性名有如下三个:

httpproxyHost:设置HTTP访问所使用的代理服务器地址。该属性名的前缀可以改为https、ftp等,分别用于设置HTTP访问、安全HTTP访问和FTP访问所用的代理服务器地址。

httpproxyPort:设置HTTP访问所使用的代理服务器端口。该属性名的前缀可以改为https、ftp等,分别用于设置HTTP访问、安全HTTP访问和FTP访问所用的代理服务器端口。

httpnonProxyHosts:设置HTTP访问中不需要使用代理服务器的远程主机,可以使用通配符,如果有多个地址,多个地址用竖线(|)分隔。

下面程序示范了通过改变系统属性来改变默认的代理服务器。

程序清单:codes/17/17-5/ ProxySelectorTestjava

上面程序中三行粗体字代码设置Java打开HTTP访问时的代理服务器属性,其中前两行代码设置代理服务器的地址和端口,第三行代码设置该代理HTTP访问哪些主机时不需要使用代理服务器。上面程序的①行代码处直接打开一个URLConnection,但系统会为打开该URLConnection时使用代理服务器。

运行上面程序,将会看到程序长时间等待,因为192168096通常并不是有效的代理服务器(当然,如果读者运行的机器恰好可以使用地址为192168096的代理服务器又另当别论)。

系统提供了默认的ProxySelector子类作为代理选择器,开发者可以实现自己的代理选择器,程序可以通过继承ProxySelector来实现自己的代理选择器。继承ProxySelector需要重写两个方法:

List<Proxy> select(URI uri):实现该方法让代理选择器根据不同的URI来使用不同的代理服务器,该方法就是代理选择器管理网络连接使用代理服务器的关键。

connectFailed(URI uri, SocketAddress sa, IOException ioe):当系统通过默认的代理服务器建立连接失败后,代理选择器将会自动调用该方法。通过重写该方法可以对连接代理服务器失败的情形进行处理。

系统默认的代理服务器选择器也重写了connectFailed方法,它重写该方法的处理策略是:当系统设置的代理服务器失败时,默认代理选择器将会采用直连的方式连接远程资源,所以当运行上面程序等待了足够长时间时,程序依然可以打印出该远程资源的所有内容。

windows系统配置方法大同小异,以下为本说明所要用到的软件:

Apache 224 -- wwwapachecom

PHP 520 -- wwwphpnet

MySQL 5027 -- wwwmysqlcom

Zend Optimizer 320 -- wwwzendcom

phpMyAdmin 292 -- wwwphpmyadminnet

严重注意:在进行下列操作前,Windows XP应无安装IIS、PHP、APACHE、MYSQL、ZEND。

≡ Apache 224 的安装 ≡

1打开我的电脑,进入D盘,在其下新建一个文件夹,名为 local 。

2到其官方站点下载 apache_224-win32-x86-no_sslmsi 并执行。

3按3次Next按钮,安装程序要求输入你的Network Domain(网络域名)、Server Domain(服务器域名)和网站管理员的E-mail,有的话就如实填写,本说明介绍的是本地自建测试环境,所以随便一下,前两个填 localhost ,邮件写自己的即可。

4进入Next后,默认的安装路径是"C:\Program Files\Apache Software Foundation\Apache22\",修改路径,改为前面所述的"D:\local\Apache2"。

5然后一路下去,直到安装结束;此时,打开D盘下的local文件夹,可以看到有一个名为Apache2的文件夹。

6打开IE,然后在地址栏输入:"localhost" 或者 "127001" 可以看到Apache安装完成的成功页面;以后网页的存在位置就在 "D:\local\Apache2\htdocs" 目录。

≡ PHP 520 的安装 ≡

1到其官方站点下载 php-520-Win32zip 并解压(在此不要下载及使用它的Installer,这种方式虽然很自动化、很智能,但也存在很多方面的限制,因为不推荐。)

2将PHP文件解压到一个目录下,目录地址为 "D:\local\php"。

3将PHP目录(D:\local 2;php)下的phpini-dist复制到windows(有的系统是winnt目录)目录下,并改名为phpini。

4复制D:\local\php目录下的所有dll文件到windows的系统文件夹里,即:C:\windows\system32。

≡ MySQL 5027 的安装 ≡

1打开我的电脑,进入D:\local,在其下新建一个文件夹,名为 mysql 。

2到其官方站点下载 Mysql 5027 Installer 并执行。

3按Next,然后选择Custom安装方式。

4点击Change,改变安装路径;原路径是"C:\Program Files\MySQL\MySQL Server 50\",这里改为:"D:\local\mysql\"。

5等安装进度条load完时,会出现一个Sign Up向导,这里不用理,选择最下面的那个Skip Sign-Up,然后Next,上面有个 "Configure the MySQL Server now" 是打勾的,不要去掉,直接点Finish。

6现在开始安装最后的配置,点Next,选择Detailed Configuration,然后选择第二个Server Machine。

7再Next,选择Non-Transactional Database Only。

8再Next,选择Manual Setting,连接数选择200到300,在此因为是本机测试,所以此项并不重要。

9再Next,是设置其的端口,默认是3306,不要动它。

10再Next,选择Manual Selected Default Character Set / Collation,在下面的 Character Set选择gbk。

11再Next,在Include Bin Directory in Windows PATH前打勾。

12再Next,在Modify Security Settings前的勾取消,因为是本地环境,非服务器和虚拟主机。

13最后一个Next再加Execute,可以看到上面的步骤全部完成。

14MySQL的帐号是:root,密码为空。

15检测MySQL,键盘的Win + R,弹出运行对话框,输入cmd后回车,进入命令提示符,然后输入:"mysql -uroot -p",回车后要求输入密码,因为密码为空,所以直接再按回车即可。

在windows下安装apache

php

mysql

从各官方网站下了apache2050、php5、mysql4020、phpmyadmin257

apache_2050-win32-x86-no_sslmsi

php-500-win32zip

mysql-4020d-winzip

phpmyadmin-257zip

系统

win2003

系统盘为:

d盘

第一步:

安装apache

并配置支持php

点击安装文件apache_2050-win32-x86-no_sslmsi

将apache安装在

d:\apache2

目录(随自己喜好)下

将php-500-win32zip

里内容解压到

d:\php

找到

php目录里的

phpini-dist

重命名为

phpini

并拷到

windows目录里(win2k

里为winnt)

如我的phpini是拷到

d:\windows目录

再将php目录里的

php5tsdll,libmysqldll

拷到

系统目录(system/system32)

如我的是d:\windows\system里

配置apache里的httpdconf

打开

d:\apache2\conf\httpdconf

这个文件

找到

adddefaultcharset

iso-8859-1

将其改为

adddefaultcharset

gb2312

(让默认语言编码为简体中文)

找到

documentroot

"d:/apache2/htdocs"

将其改为你的web目录(可不改)如我的为

documentroot

"d:/website"

找到

directoryindex

indexhtml

indexhtmlvar

在后面加入

indexhtm

indexphp

选择安装模式:

模块化模式安装

cgi模式安装

(选一样即可)

--------------模块化安装配置------------------------------------

找到

#loadmodule

ssl_module

modules/mod_sslso

这行,在此行后加入一行

loadmodule

php5_module

d:/php/php5apache2dll

其中d:/php/php5apache2dll

为你php目录中php5apache2dll所在的位置

找到

addtype

application/x-gzip

gz

tgz

这行,在此行后加入一行

addtype

application/x-httpd-php

php

---------------------------------------------------------------

--------------cgi安装配置--------------------------------------

找到

addtype

application/x-gzip

gz

tgz

这行,加入如下即可

scriptalias

/php/

"d:/php/"

addtype

application/x-httpd-php

php

action

application/x-httpd-php

"/php/php-cgiexe"

---------------------------------------------------------------

此时php环境基本已经配置成功

在web根目录(如我的d:\website)里建一个名为testphp的文件内容如下

echo

phpinfo();

重新启动apache服务

用浏览器打开

http://localhost/testphp

如果可以看到php配置输出信息就ok了

你只问了搭建php服务器啊。

Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

让我们一起学习下这个“汤姆猫”的安装过程 哈哈

Tomcat的安装可以说是非常简单的,我们选择直接下载已编译的软件包,就不自己编译安装了。安装Tomcat前必须先安装 JDK。大家可以去 oracle官网获取最新的JDK,从 Apache官网获取Tomcat。

首先我们先解压JDK和Tomcat的软件包。建议将软件安装包,源码包等放到/usr/local/src 目录中,方便管理。 # tar xf jdk-8u31-linux-x64targz # tar xf apache-tomcat-8017targz 然后将解压后的JDK和Tomcat移动到 /usr/local/ 中去,并将Tomcat命名为Tomcat8 # mv jdk180_31/ /usr/local/ # mv apache-tomcat-8017 /usr/local/tomcat8

接下来就是配置JDK的环境变量了,让系统认识JDK在哪里。我选用的做法是在 /etc/profiled/ 中添加脚本。 # vim /etc/profiled/jdk18sh 添加以下内容: JAVA_HOME=/usr/local/jdk180_31/JAVA_BIN=/usr/local/jdk180_31/bin/JRE_HOME=/usr/local/jdk180_31/jre/JRE_BIN=/usr/local/jdk180_31/jre/bin/CLASSPATH=/usr/local/jdk180_31/jre/lib:/usr/local/jdk180_31/lib:/usr/local/jdk180_31/jre/lib/charsetsjarPATH=$PATH:$JAVA_BIN:$JRE_BINexport JAVA_HOME JAVA_BIN JRE_HOME JRE_BIN PATH CLASSPATH

之后保存退出vim编辑器,并给脚本文件添加可执行权限,然后加载此脚本。 # chmod +x /etc/profiled/jdk18sh # source /etc/profiled/jdk18sh 环境变量添加成功后输入命令 java就会显示出一串这个命令的用法 接下来我们就可以进行下一步 配置Tomcat了

我们进入到 Tomcat 的安装目录下看看。其中 bin就是各脚本的路径了, 我们可以看到连 Windows的 bat批处理脚本也在其中,也就是说只要你的Windows 主机安装好JDK后也是可以使用这个 Tomcat 软件包的。 Tomcat的配置文件为 conf中的 serverxml。其中的 webapps就是发布网站的根目录。我们再看看 lib下的文件,发现都是以 jar为后缀的文件,根本不是以 so 结尾的库文件,原来Tomcat跨平台的原因在这里啊。jar 文件是交给 JVM虚拟机执行的,只要安装了 JDK的平台都可以运行。

好啦 接下来我们就该把 Tomcat 启动起来试试了,执行 /usr/local/tomcat8/bin 下的 startupsh脚本。 # /usr/local/tomcat8/bin/startupsh 它会列出一些使用的变量及路径,只要最后显示 Tomcat started就证明启动成功了。Tomcat 默认监听的是 8080端口,我们可以 netstat看一下。注意,它启动的是一个叫做 java的进程。 # netstat -anpt | grep "java" 我们看到监听的还有 8005和 8009端口,这些都有其他用处,只有 8080才是提供 HTTP服务的端口

记得要关闭 iptables或者清空 iptables规则 ,如果你会编写 iptables 豁免规则那最好不过了。对了 SElinux也顺手关闭了吧!这里只讲解如何临时关闭 iptables 和 SElinux。 我这里就手懒了,只清空了 iptables 规则: # iptables -F 如果想关闭iptables服务: # service iptables stop 临时关闭SElinux: # setenforce 0

接下来当然是用浏览器访问下我们的站点看看效果啦,因为端口默认不是80,我们就必须指定端口了。 在浏览器输入 http://服务器的IP地址:8080 如果出现了如下图所示的页面就证明成功了。

相信聪明的你已经看到 Tomcat 的 bin 目录下有个 shutdownsh了吧,不要误会成这是关机脚本,这只是关闭 Tomcat 服务的脚本。咦!还有个 configtestsh脚本,这个难道是配置文件的检查脚本?我们用这些脚本不就可以自己写个 Tomcat 的服务控制脚本了嘛。确实如此,但是 Tomcat 已经为我们提供了个服务控制脚本,就是那个 catalinash, 遗憾的是这个脚本需要我们修改的地方不少,而且还没有 restart选项。我决定还是自己写个把。 下图为自带服务控制脚本支持的参数

终于写完了,一个拥有 { start | stop | status | restart | test } 可以添加到开机自启的 Tomcat 服务控制脚本,代码如下: #!/bin/bash # # chkconfig: 235 80 20 # description: Tomcat server # Source function library /etc/rcd/initd/functions JAVA_HOME=/usr/local/jdk180_31 # JAVA_HOME CATALINA_HOME=/usr/local/tomcat8 # TOMCAT_HOME export JAVA_HOME CATALINA_HOME start() { echo "Starting Tomcat" $CATALINA_HOME/bin/startupsh if [ $ -eq 0 ]; then touch /var/lock/tomcat fi } stop() { echo "Stopping Tomcat" $CATALINA_HOME/bin/shutdownsh if [ $ -eq 0 ]; then rm -rf /var/lock/tomcat fi } restart() { stop start } status() { if [ -e /var/lock/tomcat ]; then echo "Running" else echo "Stopped" fi } case $1 in start) start ;; stop) stop ;; status) status ;; restart) restart ;; test) /usr/local/tomcat8/bin/configtestsh ;; ) echo "Usage: tomcat {start|stop|status|restart|test}" ;; esac

把脚本复制到 /etc/initd/tomcat然后添加可执行权限,然后试试添加到开机自启动吧! # chkconfig --add tomcat 取消开机自启: # chkconfig --del tomcat

现在我们再简单的看下 Tomcat的配置文件 /usr/local/tomcat8/conf/serverxml 这是用XML可扩展标记语言作为的配置文件 其中 Connector port="8080" /这项就是设置web服务的监听端口 添加 Host /Host标签就可以添加多个虚拟主机 Host 标签中 name="localhost"指定主机名,可以随意修改 appBase="webapps"这个就是网站根目录了,默认是 Tomcat 安装目录下的webapps

好了 Tomcat 就到这里了。如果觉得有用记得点收藏哦!如果想获取更多Linux教程,也可以进我的经验中心获取,欢迎一起交流 Linux 知识

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » Java 中怎样在程序中设置代理服务器

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情