1.java的System.getProperty()方法可以獲取的值
java.version | Java 運(yùn)行時(shí)環(huán)境版本 |
java.vendor | Java 運(yùn)行時(shí)環(huán)境供應(yīng)商 |
java.vendor.url | Java 供應(yīng)商的 URL |
java.home | Java 安裝目錄 |
java.vm.specification.version | Java 虛擬機(jī)規(guī)范版本 |
java.vm.specification.vendor | Java 虛擬機(jī)規(guī)范供應(yīng)商 |
java.vm.specification.name | Java 虛擬機(jī)規(guī)范名稱 |
java.vm.version | Java 虛擬機(jī)實(shí)現(xiàn)版本 |
java.vm.vendor | Java 虛擬機(jī)實(shí)現(xiàn)供應(yīng)商 |
java.vm.name | Java 虛擬機(jī)實(shí)現(xiàn)名稱 |
java.specification.version | Java 運(yùn)行時(shí)環(huán)境規(guī)范版本 |
java.specification.vendor | Java 運(yùn)行時(shí)環(huán)境規(guī)范供應(yīng)商 |
java.specification.name | Java 運(yùn)行時(shí)環(huán)境規(guī)范名稱 |
java.class.version | Java 類格式版本號 |
java.class.path | Java 類路徑 |
java.library.path | 加載庫時(shí)搜索的路徑列表 |
java.io.tmpdir | 默認(rèn)的臨時(shí)文件路徑 |
java.compiler | 要使用的 JIT 編譯器的名稱 |
java.ext.dirs | 一個(gè)或多個(gè)擴(kuò)展目錄的路徑 |
os.name | 操作系統(tǒng)的名稱 |
os.arch | 操作系統(tǒng)的架構(gòu) |
os.version | 操作系統(tǒng)的版本 |
file.separator | 文件分隔符(在 UNIX 系統(tǒng)中是“/”) |
path.separator | 路徑分隔符(在 UNIX 系統(tǒng)中是“:”) |
line.separator | 行分隔符(在 UNIX 系統(tǒng)中是“/n”) |
user.name | 用戶的賬戶名稱 |
user.home | 用戶的主目錄 |
user.dir | 用戶的當(dāng)前工作目錄 |
2.java 通過System.getProperties()獲取系統(tǒng)參數(shù)
Properties props=System.getProperties(); //系統(tǒng)屬性
System.out.println("Java的運(yùn)行環(huán)境版本:"+props.getProperty("java.version"));
System.out.println("Java的運(yùn)行環(huán)境供應(yīng)商:"+props.getProperty("java.vendor"));
System.out.println("Java供應(yīng)商的URL:"+props.getProperty("java.vendor.url"));
System.out.println("Java的安裝路徑:"+props.getProperty("java.home"));
System.out.println("Java的虛擬機(jī)規(guī)范版本:"+props.getProperty("java.vm.specification.version"));
System.out.println("Java的虛擬機(jī)規(guī)范供應(yīng)商:"+props.getProperty("java.vm.specification.vendor"));
System.out.println("Java的虛擬機(jī)規(guī)范名稱:"+props.getProperty("java.vm.specification.name"));
System.out.println("Java的虛擬機(jī)實(shí)現(xiàn)版本:"+props.getProperty("java.vm.version"));
System.out.println("Java的虛擬機(jī)實(shí)現(xiàn)供應(yīng)商:"+props.getProperty("java.vm.vendor"));
System.out.println("Java的虛擬機(jī)實(shí)現(xiàn)名稱:"+props.getProperty("java.vm.name"));
System.out.println("Java運(yùn)行時(shí)環(huán)境規(guī)范版本:"+props.getProperty("java.specification.version"));
System.out.println("Java運(yùn)行時(shí)環(huán)境規(guī)范供應(yīng)商:"+props.getProperty("java.specification.vender"));
System.out.println("Java運(yùn)行時(shí)環(huán)境規(guī)范名稱:"+props.getProperty("java.specification.name"));
System.out.println("Java的類格式版本號:"+props.getProperty("java.class.version"));
System.out.println("Java的類路徑:"+props.getProperty("java.class.path"));
System.out.println("加載庫時(shí)搜索的路徑列表:"+props.getProperty("java.library.path"));
System.out.println("默認(rèn)的臨時(shí)文件路徑:"+props.getProperty("java.io.tmpdir"));
System.out.println("一個(gè)或多個(gè)擴(kuò)展目錄的路徑:"+props.getProperty("java.ext.dirs"));
System.out.println("操作系統(tǒng)的名稱:"+props.getProperty("os.name"));
System.out.println("操作系統(tǒng)的構(gòu)架:"+props.getProperty("os.arch"));
System.out.println("操作系統(tǒng)的版本:"+props.getProperty("os.version"));
System.out.println("文件分隔符:"+props.getProperty("file.separator")); //在 unix 系統(tǒng)中是"/"
System.out.println("路徑分隔符:"+props.getProperty("path.separator")); //在 unix 系統(tǒng)中是":"
System.out.println("行分隔符:"+props.getProperty("line.separator")); //在 unix 系統(tǒng)中是"/n"
System.out.println("用戶的賬戶名稱:"+props.getProperty("user.name"));
System.out.println("用戶的主目錄:"+props.getProperty("user.home"));
System.out.println("用戶的當(dāng)前工作目錄:"+props.getProperty("user.dir"));
3.
用Java編寫通過代理訪問的應(yīng)用程序
本技巧將向您講述如何編寫可通過代理訪問因特網(wǎng)上的Web服務(wù)器的Java應(yīng)用程序。在Java應(yīng)用程序中加入代理支持只需額外編寫幾行代碼,且不依賴任何安全性“漏洞”。
將Java和代理結(jié)合起來的秘訣即在Java運(yùn)行時(shí)激活特定的系統(tǒng)屬性。這些屬性未被寫入正式文件,只是作為Java傳說的一部分在Java編程人員中秘傳。為了支持代理,Java應(yīng)用程序不僅需要指定代理本身的信息,而且需要指定用于認(rèn)證的用戶信息。在開始使用網(wǎng)際協(xié)議之前,您需要在程序中添加以下幾行代碼:
//通知Java您要通過代理進(jìn)行連接
System.getProperties().put("proxySet","true");
//指定代理所在的服務(wù)器
System.getProperties().put("proxyHost","myProxyMachineName");
//指定代理監(jiān)聽的端口
System.getProperties().put("proxyPort","85");
有些代理在授權(quán)用戶訪問因特網(wǎng)之前,要求用戶輸入用戶名和口令。如果您使用位于防火墻之內(nèi)的Web瀏覽器,您就可能碰到過這種情況。以下是執(zhí)行認(rèn)證的方法:
URLConnection connection=url.openConnection();
String password="username:password";
String encodedPassword=base64Encode(password);
connection.setRequestProperty("Proxy-Authorization",encodedPassword);
這段代碼的思想是,您必須調(diào)整HTTP標(biāo)頭以發(fā)出用戶信息。這是通過調(diào)用setRequestProperty()來實(shí)現(xiàn)的。這種方法允許您在發(fā)出請求之前處理HTTP標(biāo)頭。HTTP要求用base64對用戶名和口令進(jìn)行編碼。幸運(yùn)的是,有一組公用域API,它們將代您執(zhí)行編碼(請參閱參考資源部分)。
如您所見,在Java應(yīng)用程序中加入代理支持并不需要做多少工作。有了現(xiàn)在的知識,再做一點(diǎn)研究(您必須查明您的代理是如何處理您感興趣的協(xié)議以及如何進(jìn)行用戶認(rèn)證的),您就能用其他協(xié)議實(shí)現(xiàn)代理。
HTTP代理:(例子)
Properties props = System.getProperties();
props.put("http.proxyHost", "192.168.0.150");
props.put("http.proxyPort", "808");
FTP代理
ScottD.Taylor提出這個(gè)秘訣來處理FTP協(xié)議代理:
defaultProperties.put("ftpProxySet","true");
defaultProperties.put("ftpProxyHost","proxy-host-name");
defaultProperties.put("ftpProxyPort","85");
接下來您便可以通過以下代碼使用"ftp"協(xié)議訪問文件URL:
URL url=newURL("ftp://ftp.netscape.com/pub/navigator/3.04/windows/readme.txt");
如果有人有使用其他網(wǎng)際協(xié)議代理的例子,我很想看看。
注意:代碼示例(Example.java)僅在JDK1.1.4下測試過。
后續(xù)技巧!
對于仍在使用JDK1.1.7(配合WebSphere3.0)的開發(fā)人員而言,將proxyHost和proxyPort設(shè)為系統(tǒng)屬性不起作用;conn.getInputStream()或者返回連接超時(shí),或者是找不到主機(jī)路徑。但是,我使用接受Host和Port為參數(shù)的URL構(gòu)造函數(shù)解決了這一問題(使用我的代理主機(jī)和端口):
public URL(String protocol,String host,int port,String file).
借助用戶名和口令進(jìn)行認(rèn)證的方法不起作用。應(yīng)將"Basic"置于認(rèn)證字符串的開頭;例如:
String encodedPassword=base64Encode(password);
應(yīng)該是:
String encodedPassword="Basic"+base64Encode(password);
您也不必用一個(gè)單獨(dú)的程序來進(jìn)行64位編碼。您可以使用sun.misc.BASE64Encoder()類。下面是完成這兩處改動之后的代碼:
System.getProperties().put("proxySet","true");
System.getProperties().put("proxyHost",proxyHost);
System.getProperties().put("proxyPort",proxyPort);
String authString="userid:password";
String auth="Basic"+newsun.misc.BASE64Encoder().encode(authString.getBytes());
URL url=newURL("http://java.sun.com/");
URLConnection conn=url.openConnection();
conn.setRequestProperty("Proxy-Authorization",auth);
下面是使用socks4代理服務(wù)器的方法:
System.getProperty("socksProxySet",true);
System.getProperty("socksProxyHost",proxyHostName);
System.getProperty("socksProxyPort",proxyPort);
Usually the proxyPort for Socks 4 is port 1080
posted on 2012-01-04 14:37
RoyPayne 閱讀(8335)
評論(0) 編輯 收藏 所屬分類:
java高級