...
  HttpServer.resultLog.println("get\t" + file);
  out.println("http/1.1 200 ok");
  out.println("mime_version:1.0");
  // 需要注意一下mime :p
  // 下面这句话有点儿武断了^^
  out.println("content_type:text/htm1");  out.println("content_length:" + file.length());
  out.println("\n\n");  sendFile(out,file);
...

解决方案 »

  1.   

    我增加了content_type类型鉴别也不行
    import java.net.*;
    import java.io.*;
    import java.util.*;class ServerOne extends Thread{
    private Socket client;
    private BufferedReader in;
    private PrintWriter out; public ServerOne(Socket client) throws IOException{
    this.client = client;
    in = new BufferedReader(new InputStreamReader(client.getInputStream()));
    out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(client.getOutputStream())),true);
        start();
      }
      public void run(){
       try{
       while(true){
       String askLine = in.readLine();
       if(askLine.indexOf("GET") != -1){
       String fileName = getFileName(askLine);
       File file =new File(fileName);
       if(file.exists()){
       System.out.println("get\t" + file);
       HttpServer.resultLog.println("get\t" + file +"\r");
       out.println("http/1.0 200 ok\r");
       out.println("mime_version:1.0\r");
       int ind = fileName.lastIndexOf('.');
                String ct = null;
                if (ind > 0) {
                  ct = (String)HttpServer.map.get(fileName.substring(ind));
                }
                //else ct = "text/html";
       System.out.println("content_type: " + ct + "\r");
       out.println("content_length:" + file.length() + "\r");
       out.println("content_type: " + ct + "\r");
       out.println("\r");
       sendFile(out,file);   }
       }
       System.out.println("askLine\t" + askLine);
       HttpServer.resultLog.println("User ask \t" +askLine);
       }
       }catch(IOException e){
       }finally{
       try{
       client.close();
       }catch(IOException e){
       }
       }
      }  String getFileName(String askLine){
       askLine = askLine.substring(askLine.indexOf(' ') + 1);
       askLine = askLine.substring(0,askLine.indexOf(' '));
       System.out.println("asdf" + askLine);
       try{
       if(askLine.indexOf('/') == (askLine.length() - 1)){
       askLine = askLine.substring(1);
       askLine = askLine + "index.html";
       System.out.println("User ask \t" + askLine);
       HttpServer.resultLog.println("User ask \t" + askLine);
       }
       else{
       askLine = askLine.substring(1);
       System.out.println("User view \t" + askLine);
       HttpServer.resultLog.println("User ask \t" + askLine);
       }   }catch(Exception e){}
       return askLine;
      }//end getFileName  void sendFile(PrintWriter out,File file) throws IOException{
       BufferedReader readFile = new BufferedReader(new FileReader(file));
       String s1,s2 = new String();
       while((s1 = readFile.readLine()) != null){
       s2= s2 + s1 + "\n";
       }
       out.write(s2);
       readFile.close();
       out.flush();
       out.close();
       System.out.println(file + "\tOK");
      }}//end ServerOnepublic class HttpServer{
    static PrintWriter resultLog;//log file
    static final int PORT = 80;
    static Hashtable map = new Hashtable();//can not include basis type
      static {
       fillMap();
      }
      static void setSuffix(String k,String v){
       map.put(k, v);
      }
      static void fillMap(){
       //setSuffix("","content/unknown");
       setSuffix(".uu","application/octet-stream");
       setSuffix(".exe","application/octet-stream");
       setSuffix(".ps","application/postscript");
       setSuffix(".zip","application/zip");
       setSuffix(".sh","application/x-shar");
       setSuffix(".tar","application/x-tar");
       setSuffix(".snd","audio/basic");
       setSuffix(".au","audio/basic");
       setSuffix(".wav","audio/x-wav");
       setSuffix(".gif","image/gif");
       setSuffix(".jpg","image/jpeg");
       setSuffix(".jpeg","image/jpeg");
       setSuffix(".htm","text/html");
       setSuffix(".html","text/html");
       setSuffix(".text","text/plain");
       setSuffix(".pl","text/plain");
       setSuffix(".txt","text/plain");
      } public static void main(String[] args) throws IOException{
    resultLog = new PrintWriter(new BufferedWriter(new FileWriter("httpLog.log")),true);
    ServerSocket httpOne = new ServerSocket(PORT);
    System.out.println("Server Started");
    resultLog.println("Server Started");
    try{
    while(true){
    Socket client = httpOne.accept();
    System.out.println(client);
    resultLog.println("\n" + client);
    try{
    new ServerOne(client);
    }catch(IOException e){
    client.close();
    e.printStackTrace();
    resultLog.println(e + "\nCloseed" + "\n");
    }
    }
    }finally{
    httpOne.close();
    System.out.println("Server Closed");
    resultLog.println("Server Closed");
    }
    }
    }///:~
      

  2.   

    建议看一看 APACHE 的源代码和 HTTP/1.1 协议。
      

  3.   

    你写的程序和sun上面的sample挺像, hehehe ... 你对照下面的程序看一下吧 :)
    http://developer.java.sun.com/developer/technicalArticles/Networking/Webserver/WebServercode.html