分享

如何用 Java实现自己的Web服务器

 CevenCheng 2011-09-06
 

如何用Java实现Web服务器

 17人阅读 评论(0) 收藏 举报

http://zhidao.baidu.com/question/10672912.html?fr=qrl&cid=870&index=4&fr2=query

 

http://java./advance/519981.html

 

 

  1. package net;  
  2. import java.net.*;  
  3. import java.io.*;  
  4. import java.util.*;  
  5. public class ServerWeb03 {  
  6.  /** 
  7.   * @param args 
  8.   */  
  9.  public static void main(String[] args) {  
  10.   // TODO Auto-generated method stub  
  11.   ServerSocket ss;  
  12.   Socket  s;  
  13.   try {  
  14.    FileReader  fr = new FileReader("D://port.txt"); //端口号放在指定的文件中  
  15.    BufferedReader  br = new BufferedReader(fr);  
  16.    int port = Integer.parseInt(br.readLine());  
  17.     
  18.      
  19.      
  20.    ss = new ServerSocket(port);  
  21.    System.out.println("ServerWeb Server is listening on port "  
  22.      + ss.getLocalPort());  
  23.      
  24.    int i = 1;  
  25.    while (true){  
  26.     s = ss.accept();             //接受客户机的请求  
  27. //    System.out.println("启动线程数:" + i);  
  28.     Runnable r = new ServerWebHandler03(s , i);  
  29.     Thread  t = new Thread(r);  
  30.     t.start();  
  31.     i++;                                  //计数器  
  32.    }  
  33.   } catch (IOException e) {  
  34.    // TODO Auto-generated catch block  
  35.    e.printStackTrace();  
  36.   }  
  37.     
  38.  }  
  39. }  
  40. class  ServerWebHandler03  implements Runnable{  
  41.  Socket s = null;                              //连接web浏览器的socket字  
  42.  int i;  
  43.  public ServerWebHandler03(Socket  s, int i){  
  44.   this.s = s;  
  45.   this.i = i;  
  46.  }  
  47.  public void run(){  
  48.     
  49.     
  50.   try {  
  51.    String destIP  =  s.getLocalAddress().toString();      //客户机IP地址  
  52.      
  53.    int   destPort =  s.getPort();//客户机   端口号  
  54.      
  55.    System.out.println("Connection " + i + "  connected to" + destIP +   
  56.      "  on port :  " + destPort );  
  57.      
  58.   /* Scanner  in = new Scanner(s.getInputStream()); 
  59.         in.hasNextLine();  //boolean类型 
  60.    String line = in.nextLine();*/  
  61.      
  62.      
  63.    InputStream ips = s.getInputStream();  
  64.    BufferedReader br = new BufferedReader(new InputStreamReader(ips));  
  65.      
  66.      
  67.    PrintWriter  out = new PrintWriter(s.getOutputStream(), true);  
  68.      
  69.    String line = br.readLine();                //读取web浏览器提交的请求  
  70.    System.out.println("Received: " + line);  
  71.      
  72.    if (getRequest(line)){       //如果是GET请求  
  73.       
  74.     String fileName = getFileName(line);  
  75.       
  76.     File  file = new File(fileName);  
  77.     if (file.exists()){                      //若文件存在  将文件送给web浏览器  
  78.      System.out.println(file.getName() + "    requested");  
  79.      out.println("HTTP/1.1   200 OK");  
  80.      out.println("MIME_version: 1.0");  
  81.      out.println("Content_Type: text/html");  
  82.      int len = (int)file.length();  
  83.      out.println("Content_Length:" + len);  
  84.      out.println("");  
  85.      sendFile(out, file);             //发送文件  
  86.     }else{                               //若文件不存在  
  87.      out.println("HTTP/1.1  404  no fond");  
  88.      out.println("Content_Type: text/html");  
  89.     }  
  90.    }  
  91.    long m1 = 1;  
  92.    while (m1<11100000){  
  93.     m1++  ;   //延时  
  94.    }  
  95.    s.close();  
  96.      
  97.   } catch (IOException e) {  
  98.    // TODO Auto-generated catch block  
  99.    e.printStackTrace();  
  100.   }  
  101.     
  102.     
  103.     
  104.    }  
  105.    
  106.  boolean getRequest(String s){                                //获取请求类型是否为GET  
  107.   if (s.length()>0){  
  108.    if (s.substring(03).equalsIgnoreCase("GET")){  
  109.     return true;  
  110.    }  
  111.   }  
  112.   return false;  
  113.  }  
  114.    
  115.  String getFileName(String s){                   //获取访问的文件名  
  116.   String f = s.substring(s.indexOf(' ')+1);  
  117.   f = f.substring(0, f.indexOf(' '));  
  118.   try{  
  119.    if (f.charAt(0)=='/'){  
  120.     f.substring(1);  
  121.    }  
  122.   }catch (StringIndexOutOfBoundsException  e){  
  123.    e.printStackTrace();  
  124.   }  
  125.   if (f.equals("")){  
  126.    f = "index.html";  
  127.   }  
  128.   return f;  
  129.  }  
  130.    
  131.  void sendFile(PrintWriter out,  File file){        //把指定文件发送给浏览器  
  132.   try {  
  133. //   Scanner  in = new Scanner(new FileInputStream(file));  
  134. //   Scanner  in = new Scanner(new FileReader(file));  
  135.      
  136.    InputStreamReader  ipsr = new InputStreamReader(new FileInputStream(file));  
  137.      
  138.    BufferedReader  br = new BufferedReader(new FileReader(file));  
  139.      
  140.    String  str ;  
  141.    while ((str=br.readLine())!=null){  
  142.     out.write(str + "/r" + "/n");  
  143.    }  
  144.    br.close();  
  145.    out.close();  
  146.   } catch (FileNotFoundException e) {  
  147.    // TODO Auto-generated catch block  
  148.    e.printStackTrace();  
  149.   } catch (IOException e) {  
  150.    // TODO Auto-generated catch block  
  151.    e.printStackTrace();  
  152.   }  
  153.  }  
  154. }  
 

 

 

 

 

 

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多