⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 webserver.java

📁 WEB服务器的Java实现
💻 JAVA
字号:
import java.io.* ;
import java.net.* ;
import java.util.* ;

public final class WebServer
{
        public static void main(String argv[]) throws Exception
        {
       
             int port = 9998;


           ServerSocket    listenSocket =
                  new  ServerSocket (port);


            while (true) {
                  // Listen for a TCP connection request.
              Socket    connectionSocket =
                 listenSocket.accept();


                  
              HttpRequest request = new HttpRequest( connectionSocket );

                  // Create a new thread to process the request.
              Thread thread = new Thread( request );

                  // Start the thread.
              thread.start();
            }
          }
        }


/*HttpRequest*/

final class HttpRequest implements Runnable
{
        final static String CRLF = "\r\n";
        Socket socket;

        // Constructor
        public HttpRequest(Socket socket) throws Exception
        {
                this.socket = socket;
                System.out.print("socket receive");
        }


        // Implement the run() method of the Runnable interface
        public void run()
        {
            try {
                    processRequest();
            } catch (Exception e) {
                    System.out.println(e);
            }
        }


    private void processRequest() throws Exception
    {
        // Get a reference to the socket's input and output streams.

        DataOutputStream os =
            new  DataOutputStream(
              socket.getOutputStream());


        // Set up input stream filters.
        BufferedReader br =
            new BufferedReader(
                  new InputStreamReader(
                      socket.getInputStream()));


       // Get the request line of the HTTP request message.
       String requestLine = br.readLine();


       // Display the request line.
       System.out.println();
       System.out.println( requestLine );


       // Get and display the header lines.
       String headerLine = null;
       while ((headerLine = br.readLine()).length() != 0) {
                System.out.println(headerLine);
       }


      // Extract the filename from the request line.
      StringTokenizer tokens = new StringTokenizer(requestLine);
      tokens.nextToken();  // skip over the method, which should be "GET"
      String fileName = tokens.nextToken();

      // Prepend a "." so that file request is within the current directory.
      fileName = "." + fileName;
      System.out.println(fileName);

      // Open the requested file.
      FileInputStream fis = null;
      boolean fileExists = true;
      try {
              fis = new FileInputStream( fileName );
      } catch (FileNotFoundException e) {
              fileExists = false;
      }


      // Construct the response message.
      String statusLine = null;
      String contentTypeLine = null;
      String entityBody = null;
      if (fileExists) {
              statusLine = "HTTP/1.0 200 OK";
              contentTypeLine = "Content-Type:" +
                            contentType( fileName ) + CRLF;
      } else {
              statusLine = "HTTP/1.0 404 Bad Request";
              contentTypeLine = "Content-Type:" +
                          "html" + CRLF;
              entityBody = "<HTML>" +
                      "<HEAD><TITLE>Not Found</TITLE></HEAD>" +
                      "<BODY>Not Found</BODY></HTML>";
      }


      // Send the status line.
      os.writeBytes(statusLine);


      // Send the content type line.
      os.writeBytes(contentTypeLine);

      // Send a blank line to indicate the end of the header lines.
      os.writeBytes(CRLF);


      // Send the entity body.
      if ( fileExists )	{
              sendBytes(fis, os);
              fis.close();
      } else {
              os.writeBytes(entityBody);
      }


      // Close streams and socket.
        os.close();
        br.close();
  }

  private static void sendBytes(FileInputStream fis, DataOutputStream os)
          throws Exception
    {
       // Construct a 1K buffer to hold bytes on their way to the socket.
       byte[] buffer = new byte[1024];
       int bytes = 0;

       // Copy requested file into the socket's output stream.
       while((bytes = fis.read(buffer)) != -1 ) {
          os.write(buffer, 0, bytes);
       }
    }


    private static String contentType(String fileName)
    {
            if(fileName.endsWith(".htm") || fileName.endsWith(".html")) {
                    return "text/html";
            }
            if(fileName.endsWith(".jpg")) {
                    return "image/jpeg";
            }
            if(fileName.endsWith(".gif")) {
                    return "image/gif";
            }
            if(fileName.endsWith(".txt")) {
                return "image/txt";
            }
            return "application/octet-stream";
    }


}



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -