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

📄 webserverb.java

📁 一个多线程的Web服务器
💻 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 + -