简单Web服务器(Java实现)

计算机网络实验,做一个简单的web服务器 ,是根据文档编写出来的。可能会与有些大神写的类似

//============================================================================
// Name        : webServer.java
// Author      : Aen
// Copyright   : Your copyright notice
// Description : WebServer 
// Time        : 2017/11/15
//============================================================================
package webServer;
import java.io.* ;
import java.net.* ;
import java.util.* ;


public final class webServer
{
	    public static int port = 10086;
	    
        public static void main(String argv[]) throws Exception
        {
        	ServerSocket SS = new ServerSocket(port);
        	
        	while(true){
        		Socket server = SS.accept();
        		HttpRequest request = new HttpRequest(server);
        		 
        		// Create a new thread to process the request.
        		Thread thread = new Thread(request);
        		 
        		// Start the thread.
        		thread.start();
        	}
        }
}
 
final class HttpRequest implements Runnable
{
	final static String CRLF = "\r\n";
    Socket socket;
	private String requestLine;

    // Constructor
    public HttpRequest(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 = socket.getInputStream();
        InputStreamReader iss = new InputStreamReader(is);
        DataOutputStream os = new  DataOutputStream(socket.getOutputStream());  
 
        // Set up input stream filters.
        BufferedReader br = new BufferedReader(iss);
 
        //
        // Get the request line of the HTTP request message.
         requestLine = br.readLine();	
        //requestLine = br.readLine();		 
        // Display the request line.
        System.out.println();
        System.out.println(requestLine);
        System.out.println("---------1----------");
        
        String headerLine = null;  
        while ((headerLine = br.readLine()).length() != 0) {  
                System.out.println(headerLine);  System.out.println("---------2----------");
        }  
        //B 开始
        
        // 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;
        
        // 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.1 200 OK"+CRLF; 
                contentTypeLine = "Content-type: " + contentType( fileName ) + CRLF;
        } else {
        	// 不是 not found
                statusLine ="HTTP/1.1 200 ok"+CRLF;  
                contentTypeLine = "Content-type: text/html"+CRLF;  
                entityBody = "<HTML>" + 
                       "<HEAD><TITLE>NOT FOUND</TITLE></HEAD>" +
                       "<BODY>没有找到对应的文件</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);
        }
        
        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(".jpg")) {
                   return "image/jpeg";
            }
            
            return "application/octet-stream";
    }
}

相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页