zoukankan      html  css  js  c++  java
  • My First Web Server

    My First Web Server

    HttpServer.java

     1 package com.xiejiaohui.ch1;
     2 
     3 import java.io.File;
     4 import java.io.IOException;
     5 import java.io.InputStream;
     6 import java.io.OutputStream;
     7 import java.net.InetAddress;
     8 import java.net.ServerSocket;
     9 import java.net.Socket;
    10 
    11 public class HttpServer {
    12 
    13     public static final String WEB_ROOT = System.getProperty("user.dir") + File.separator + "webroot";
    14     private static final String SHUTDOWN_COMMAND = "/SHUTDOWN";
    15 
    16     private boolean shutdown = false;
    17 
    18     public static void main(String[] args) {
    19         HttpServer server = new HttpServer();
    20         server.await();
    21     }
    22 
    23     public void await() {
    24         ServerSocket serverSocket = null;
    25         int port = 8080;
    26         try {
    27             serverSocket = new ServerSocket(port, 1, InetAddress.getByName("127.0.0.1"));
    28         } catch (IOException e) {
    29             e.printStackTrace();
    30             System.exit(1);
    31         }
    32         while(!shutdown) {
    33             Socket socket = null;
    34             InputStream input = null;
    35             OutputStream output = null;
    36             try {
    37                 socket = serverSocket.accept();
    38                 input = socket.getInputStream();
    39                 output = socket.getOutputStream();
    40                 Request request = new Request(input);
    41                 request.parse();
    42                 
    43                 Response response = new Response(output);
    44                 response.setRequest(request);
    45                 response.sendStaticResource();
    46                 
    47                 socket.close();
    48                 
    49                 shutdown = request.getUri().equals(SHUTDOWN_COMMAND);
    50             } catch (Exception e) {
    51                 e.printStackTrace();
    52                 continue;
    53             }
    54         }
    55         
    56     }
    57 
    58 }

    Request.java

     1 package com.xiejiaohui.ch1;
     2 
     3 import java.io.IOException;
     4 import java.io.InputStream;
     5 
     6 public class Request {
     7     private InputStream input;
     8     private String uri;
     9     
    10     public Request(InputStream input) {
    11         this.input = input;
    12     }
    13     
    14     public void parse() {
    15         StringBuffer request = new StringBuffer(2048);
    16         int i;
    17         byte[] buffer = new byte[2048];
    18         try {
    19             i = input.read(buffer);
    20         } catch (IOException e) {
    21             e.printStackTrace();
    22             i = -1;
    23         }
    24         for (int j = 0; j < i; j++) {
    25             request.append((char)buffer[j]);
    26         }
    27         System.out.print(request.toString());
    28         uri = parseUri(request.toString());
    29     }
    30     
    31     private String parseUri(String requestString) {
    32         int index1, index2;
    33         index1 = requestString.indexOf(' ');
    34         if (index1 != -1) {
    35             index2 = requestString.indexOf(' ', index1 + 1);
    36             if (index2 > index1) {
    37                 return requestString.substring(index1 + 1, index2);
    38             }
    39         }
    40         return null;
    41     }
    42     
    43     public String getUri() {
    44         return uri;
    45     }
    46 
    47 }

    Response.java

     1 package com.xiejiaohui.ch1;
     2 
     3 import java.io.File;
     4 import java.io.FileInputStream;
     5 import java.io.IOException;
     6 import java.io.OutputStream;
     7 
     8 public class Response {
     9     
    10     private static final int Buffer_Size = 1024;
    11     private Request request;
    12     private OutputStream output;
    13     
    14     public Response(OutputStream output) {
    15         this.output = output;
    16     }
    17     
    18     public void setRequest(Request request) {
    19         this.request = request;
    20     }
    21     
    22     public void sendStaticResource() throws IOException {
    23         byte[] bytes = new byte[Buffer_Size];
    24         FileInputStream fis = null;
    25         try {
    26             File file = new File(HttpServer.WEB_ROOT, request.getUri());
    27             if (file.exists()) {
    28                 fis = new FileInputStream(file);
    29                 int ch = fis.read(bytes, 0, Buffer_Size);
    30                 while (ch != -1) {
    31                     output.write(bytes, 0, ch);
    32                     ch = fis.read(bytes, 0, Buffer_Size);
    33                 }
    34             } else {
    35                 String errorMessage = "HTTP/1.1 404 File Not Found
    " + 
    36                         "Content-Type: text/html
    " +
    37                         "Content-Length: 23
    " +
    38                         "
    " + 
    39                         "<h1>File Not Found</h1>";
    40                 output.write(errorMessage.getBytes());
    41             }
    42         } catch (Exception e) {
    43             e.printStackTrace();
    44             System.out.println(e.toString());
    45         } finally {
    46             if (fis != null) {
    47                 fis.close();
    48             }
    49         }
    50     }
    51     
    52 
    53 }
  • 相关阅读:
    Filter (seach and replace) array of bytes in an InputStream
    Eclipse上GIT插件EGIT使用手册之一_安装EGIT插件
    JAVA如何插入MySql的datetime类型的简单的例子
    版本控制工具比较CVS,SVN,GIT
    jQuery ajax get() 方法
    wubi 安装 ubuntu
    怎样把水货E72升级后英文变中文
    中国象棋for Ubuntu
    Ubuntu技巧:Ubuntu软件安装方法完全指南[转]
    关于linux下安装oracle之后,重启系统后oracle失败的问题[转]
  • 原文地址:https://www.cnblogs.com/xiejh/p/5155289.html
Copyright © 2011-2022 走看看