📄 webserverb.java
字号:
package webserver;import java.io.* ;import java.net.* ;import java.util.* ;public final class WebServerB{ public static void main(String argv[]) throws Exception { // Set the port number. int port = 6789; // Establish the listen socket. ServerSocket ss=new ServerSocket(port); System.out.println("A Multi-Threaded Web Server starting......"); // Process HTTP service requests in an infinite loop. while (true) { // Listen for a TCP connection request. Socket s=ss.accept(); // Construct an object to process the HTTP request message. HttpRequestB request = new HttpRequestB(s); // Create a new thread to process the request. Thread thread = new Thread(request); // Start the thread. thread.start(); } }}final class HttpRequestB implements Runnable{ final static String CRLF = "\r\n"; Socket socket; // Constructor public HttpRequestB(Socket socket) throws Exception { this.socket = socket; } // 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. InputStream is = this.socket.getInputStream(); DataOutputStream os = new DataOutputStream(this.socket.getOutputStream()); // Set up input stream filters. BufferedReader br = new BufferedReader(new InputStreamReader(is)); // Get the request line of the HTTP request message. String requestLine = br.readLine(); // Display the request line. System.out.println(); System.out.println(requestLine); // Extract the filename from the request line. StringTokenizer tokens = new StringTokenizer(requestLine); // skip over the method, which should be "GET" tokens.nextToken(); String fileName = tokens.nextToken(); // Prepend a "." so that file request is within the current directory. fileName = "." + fileName; /*fileName=System.getProperty("user.dir") +System.getProperty("file.separator") +fileName.substring(1);*/ // 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 Not Found" ; contentTypeLine = "Content-type:text/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(); socket.close(); } private static void sendBytes(FileInputStream fis, OutputStream 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(".gif")) { return "image/gif"; } if(fileName.endsWith(".gif")) { return "image/jpeg"; } return "application/octet-stream"; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -