import java.net.*;
import java.util.*;
class Webserver {
public static void main(String arg[]) throws Exception {
String requestMessageLine; //請求信息的壹行信息
String filename; //文件名
ServerSocket listenSocket = new ServerSocket(2222); //創建個服務端的Socket,端口為:2222
Socket connectionSocket = listenSocket.accept(); //監聽並接受客戶端
BufferedReader inFromClient = new BufferedReader(new InputStreamReader(
connectionSocket.getInputStream())); //根據socket輸入流,創建個緩沖讀取的對象
DataOutputStream outToClient = new DataOutputStream(connectionSocket
.getOutputStream()); //根據socket輸入流,創建個數據輸出流,返回客戶端的。
requestMessageLine = inFromClient.readLine(); //讀取第壹行信息
StringTokenizer tokenizerLine = new StringTokenizer(requestMessageLine); //將第壹行信息轉換成StringTokenizer對象
if (tokenizerLine.nextToken().equals("GET")) { //如果遇到"GET"
filename = tokenizerLine.nextToken(); //將下壹個值賦值給filename
if (filename.startsWith("/") == true) //如果filename中有/
filename = filename.substring(1); //去掉/
File file = new File(filename); //根據文件名創建個文件對象
int numOfBytes = (int) file.length(); //獲得到這個文件的大小
FileInputStream inFile = new FileInputStream(filename); //創建這個文件的輸入流
byte[] fileInBytes = new byte[numOfBytes]; //定義個文件大小的字節數組
inFile.read(fileInBytes); //將文件讀入到字節數組中
outToClient.writeBytes("HTTP/1.0 200 Document Follows\r\n"); //將字符返回給客戶端
if (filename.endsWith(".jpg")) //如果文件是jpg格式的
outToClient.writeBytes("Content-Type:image/jpeg\r\n"); //將文件類型jpeg發送給客戶端
if (filename.endsWith(".gif")) //如果文件是gif格式的
outToClient.writeBytes("Content-Type:image/gif\r\n"); //將文件類型gif發送給客戶端
outToClient.writeBytes("Content-Length:" + numOfBytes + "\r\n"); //將文件大小發送給客戶端
outToClient.writeBytes("\r\n"); //換行
outToClient.write(fileInBytes, 0, numOfBytes); //將文件的字節流形式發送給客戶端
connectionSocket.close(); //關閉socket
} else
System.out.println("Bad Resquest Message"); //如果請求信息中沒有“GET”,控制臺輸出此信息
}
}