`
wjjxf
  • 浏览: 238126 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

随便写个Http Web Server 玩玩,当然是简单的。只能查看文件

阅读更多

不说话,直接上代码:

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Date;


public class HttpServer {
 
	public static void main(String[] args) throws Exception {
		
		ServerSocket ss = new ServerSocket();
		InetSocketAddress sa = new InetSocketAddress(9090); 
		ss.bind(sa);
		do{
			Socket socket = ss.accept(); 
			InputStream ins = socket.getInputStream();
			BufferedReader bf = new BufferedReader(new InputStreamReader(ins)); 
			String line = bf.readLine();			
			while(line != null && !"".equals(line)){
				System.out.println(line); 
				if(line .startsWith("GET")){
					String[] head = line.split(" ");
					String fileName = "C:/Documents and Settings/Administrator/workspace/Test"+ head[1];
					System.out.println(fileName); 
					File f = null;
					FileInputStream fin  = null;
					try{
						f = new File(fileName);
						fin = new FileInputStream(f);						
					}catch(Exception e){
						//e.printStackTrace();
						//404
						OutputStream os = socket.getOutputStream();
						BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os));		
						writeHeader(os, 404, "NOT FOUND:"+head[1]); 
						
						bw.write("<h1>Not found!</h1>");
						
						bw.flush();
						bw.close();
						socket.close();
						break;
					}
					OutputStream os = socket.getOutputStream(); 
					writeHeader(os, 200, "OK");
					
					int c = 0;
					byte[] b = new byte[1024];
					c = fin.read(b);
					while(c != -1){
						os.write(b, 0, c);
						c = fin.read(b);
					};
					fin.close();
					os.flush();
					os.close();
					socket.close();
					break;
				}else{
					HttpHeader header = new HttpHeader(line);
					System.out.println(header); 
				}
				line = bf.readLine();		
			}
			if(socket.isClosed())continue;
			OutputStream os = socket.getOutputStream();
			BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os));
			//line = "hello world";
			
			writeHeader(os, 200, "OK");
			
			String body = "<h1>This is hello world !The time is:"+new Date().toLocaleString()+"。世界你好!"+"<h1>";
			bw.write(body);
			bw.flush();
			bw.close();
			os.close();
			socket.close();
		}while(true);
		
	}
	
	public static void writeHeader(OutputStream os, int httpStatus, String statusDesc) throws IOException{
		String header = "HTTP/1.1 "+httpStatus+" "+statusDesc+"\n" +
		 "Server: wbs\n" +
		 "Content-Type: text/html;charset=utf-8\n" +
		 "Content-Language: zh-CN\n" + 
		 "Date:"+new Date()+"\n\n";			
		os.write(header.getBytes());
	}

}
class RequestHeader{
	private String method;
	private String file;
	private String protocal; 
}
class HttpHeader{
	private String key;
	private String value;
	public HttpHeader(String header){
		header = header.trim();
		this.key = header.split(": ")[0];
		this.value = header.split(": ")[1];
	}
	
	public HttpHeader(String key, String value) { 
		this.key = key;
		this.value = value;
	}

	public String toString(){
		return this.key + ": "+this.value;
	}

	public String getKey() {
		return key;
	}

	public void setKey(String key) {
		this.key = key;
	}

	public String getValue() {
		return value;
	}

	public void setValue(String value) {
		this.value = value;
	}
}

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics