Java Socket編程(五) 簡(jiǎn)單的WEB服務(wù)器
發(fā)布時(shí)間:2008-12-07 閱讀數(shù): 次 來(lái)源:網(wǎng)樂(lè)原科技
簡(jiǎn)單的WEB服務(wù)器
一個(gè)簡(jiǎn)單的WEB服務(wù)器將由列表9.2這樣構(gòu)建.當(dāng)然,還必須要對(duì)方法和回應(yīng)事件進(jìn)行改進(jìn).簡(jiǎn)單的服務(wù)器不會(huì)分析和存儲(chǔ)請(qǐng)求頭.新的WEB服務(wù)器將分析和存儲(chǔ)請(qǐng)求,為以后的處理作準(zhǔn)備.為了達(dá)到這個(gè)目的,你必須有一個(gè)包含HTTP請(qǐng)求的類.
HTTPrequest類
列表9.5列出了一個(gè)完整的HTTPrequest類.這個(gè)類必須包括一個(gè)請(qǐng)求頭所需的所有信息.
列表9.5.HTTPrequest類.
import java.io.*;
import java.util.*;
import java.net.*;
import NameValue;
/**
* 這個(gè)類有一個(gè)HTTP請(qǐng)求的所有信息
*/
public class HTTPrequest
{
public String version;
public String method;
public String file;
public Socket clientSocket;
public DataInputStream inbound;
public NameValue headerpairs[];
/**
* 建立一個(gè)這個(gè)類的實(shí)例
*/
public HTTPrequest()
{
version = null;
method = null;
file = null;
clientSocket = null;
inbound = null;
inbound = null;
headerpairs = new NameValue[0];
}
/**
* 加入一個(gè)名稱/值對(duì)到核心數(shù)組
*/
public void addNameValue(String name, String value)
{
try
{
NameValue temp[] = new NameValue[ headerpairs.length + 1 ];
System.arraycopy(headerpairs, 0, temp, 0, headerpairs.length);
temp[ headerpairs.length ] = new NameValue(name, value);
headerpairs = temp;
}
catch (NullPointerException npe)
{
System.out.println("NullPointerException while adding name-value:
" + npe);
}
}
/**
* 以字符串的形式歸還這個(gè)類
*/
public String toString()
{
String s = method + " " + file + " " + version + "\n";
for (int x = 0; x < headerpairs.length; x++ )
s += headerpairs[x] + "\n";
return s;
}
}
NameValue類簡(jiǎn)單地存儲(chǔ)了兩個(gè)字符串:name 和 value.當(dāng)一個(gè)新的對(duì)要被加入時(shí),一個(gè)新的數(shù)組將被分配.新的數(shù)組接受了舊的數(shù)組和新的成員.舊的數(shù)組然后被一個(gè)新建的對(duì)象覆蓋了.