文件名:MyHttpServerTest.java 
import java.io.* ; import java.net.* ; import java.util.* ; 
/**  * main  */ public class MyHttpServerTest{ 
 String m_szServerName;//server name   String m_szVersion;//server version  int m_nServerPort;//port    public MyHttpServerTest(String szServerName,String szVersion,int nServerPort){   this.m_szServerName =szServerName;   this.m_szVersion =szVersion;   this.m_nServerPort=nServerPort;  }    /**   * show version information   */  public void showServerInformation(){   System.out.println("欢迎使用Newman的HTTP服务器!");   System.out.println("Server Name   : "+this.m_szServerName);   System.out.println("Server Version: "+this.m_szVersion  );  }    public void start (){   this.showServerInformation(); 
  try{    ServerSocket server=new ServerSocket(this.m_nServerPort );    while(true){     Socket client=server.accept();     (new HttpClientThread(client)).run();    }   }   catch(Exception e){    e.printStackTrace();       System.exit(1);   }    }    public static void main(String args[]){   MyHttpServerTest server=new MyHttpServerTest("MyHttpServerTest","1.0",80);   server.start();     }  }
  
class HttpClientThread implements Runnable {  Socket m_sClient;  HTTPRequest m_Request;    HttpClientThread(Socket sClient)throws IOException{   this.m_sClient =sClient;   this.m_Request =new HTTPRequest(this.m_sClient );  }    public void run(){   try{    System.out.println(this.getConnectInfo());    BufferedOutputStream out=new BufferedOutputStream(this.m_sClient .getOutputStream ());       System.out.println( this.m_Request.getLog()); 
   if(this.m_Request.isGetRequest())     this.processGetRequest(this.m_Request,out);    System.out.println("Request completed. Closing connection.");    this.m_sClient .close ();      }   catch(IOException e){    System.out.println("IOException occurred .");       e.printStackTrace();   }    } 
 /**   * get Connect Info   */  public String getConnectInfo(){   String szClientHostName=this.m_sClient .getInetAddress().getHostName ();   String szClientAddress=this.m_sClient .getInetAddress ().getHostAddress();   int ClientPort=this.m_sClient .getPort ();   String szRet="";   szRet="Accepted connection from "+szClientHostName+"("+szClientAddress+") "+"on port "+ClientPort+".";   return szRet;  } 
 void processGetRequest(HTTPRequest request,BufferedOutputStream out)throws IOException {   String szFileName=request.getFileName ();   File file=new File (szFileName);      if(file.exists ())    this.sendFile (out,file);   else{//文件不存在时        System.out.println ("File "+file.getCanonicalPath()+" does not exist.");       String notfound="<html><head><title>Not Found</title></head><body><h1>"+        "Error 404-file not found</h1><p>"+        "File Name: "+file+" not found"+"<br>"+        "<a href=index.htm>Return Index</a>"+        "</body></html>";     
   file://out.write(new String("HTTP/1.0 404 no found").getBytes ());     out.write (new String ("HTTP/1.0 200 OK\r\n").getBytes ());    out.write(new String("Content_Length:"+notfound.length()+2).getBytes());     out.write(new String("Content_Type:text/html\r\n\r\n").getBytes ());        out.write(new String(" ").getBytes());     out.write(notfound.getBytes ());     out.flush();   }  }    void sendFile(BufferedOutputStream out,File file){   try{    DataInputStream din=new DataInputStream (new FileInputStream (file ));    int len=(int)file.length();    byte buffer[]=new byte [len];    din.readFully (buffer);    din.close();    out.write (new String ("HTTP/1.0 200 OK\r\n").getBytes ());    out.write (new String ("Content-Length:  "+buffer.length +"\r\n").getBytes ());    out.write (new String ("Content-Type: text/html\r\n\r\n").getBytes ());    out.write (buffer);    out.flush ();    out.close ();    System.out.println("File sent: "+file.getCanonicalPath());       System.out.println("Number of bytes: "+len);   }   catch(Exception e){    try{        out.write(("HTTP/1.0 400 " + "No can do" + "\r\n").getBytes());        out.write("Content-Type: text/html\r\n\r\n".getBytes());       }       catch(IOException ioe){        System.out.println("Error retrieving "+file);    }     }  } }
  
 Vector m_vLines=new Vector ();  Socket m_sClient;  HttpInputStream m_In;    HTTPRequest(Socket client)throws IOException{   this.m_sClient =client;   this.m_In =new HttpInputStream(this.m_sClient.getInputStream());   this.getRequest ();  } 
 public String getLog(){   StringBuffer szRet=new StringBuffer() ;   szRet.append ("Received the following request:"+"\n");      Enumeration enum=m_vLines.elements ();   String szstr1="";   while(enum.hasMoreElements()){    szstr1=(String)enum.nextElement();    szRet.append (szstr1+"\n");   }   return szstr1.toString();  }    boolean isGetRequest() {   if(this.m_vLines .size ()>0){    String firstline=(String)this.m_vLines.elementAt (0);    if(firstline.length ()>0)     if(firstline.substring(0,3).equalsIgnoreCase ("GET"))      return true;   }   return false;   }    String getFileName() {   if(this.m_vLines .size ()>0){    String firstline=(String)this.m_vLines.elementAt (0);    String filename=firstline.substring (firstline.indexOf (" ")+1);    int n=filename.indexOf (" ");        if(n!=-1)     filename=filename.substring (0,n);        try{     if(filename.charAt(0)=='/' )      filename=filename.substring (1);    }    catch(StringIndexOutOfBoundsException ex){    }        if(filename.equals (""))     filename="index.htm";    if(filename.charAt (filename.length ()-1)=='/')     filename+="index.htm";//not understand    return filename;   }   else     return "";  }    public HttpInputStream getInputStream(){   return this.m_In ;   }    public HTTPRequest getRequest() throws IOException {       String line;   while(true){    line=this.m_In.readLine ();              if(line.length ()>0)     this.m_In.addLine(line);    else     break;   }   return this;  }     /**  * only use to recognize methed "get"  */ class HttpInputStream extends FilterInputStream {  HttpInputStream(InputStream in){   super(in);  }    public void addLine(String line) {   m_vLines .addElement(line);  }    public String readLine() throws IOException {   StringBuffer result=new StringBuffer ();           boolean finished=false;   boolean isenter=false;     while(!finished){    int ch=-1;    ch=read();           if((isenter)&&(ch==10)){// if it is "\n\r"     result.setLength(result.length()-1);//had added "\n",remove it     return result.toString ();    }        if(ch==13)//if enter pressed     isenter=true;    else     isenter=false; 
   if(ch==-1)//end     return result.toString ();    else      result.append ((char)ch);      }   return result.toString ();  }  } }
  
请多指教
   
 
  |