• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Java 实现 web服务器的简单实例

    Java 实现 web服务器的简单实例

    实例代码:

    import java.util.*; 
     
    // Chapter 8, Listing 3 
    public class WebServerDemo { 
      // Directory of HTML pages and other files 
      protected String docroot; 
      // Port number of web server 
      protected int port; 
      // Socket for the web server 
      protected ServerSocket ss; 
     
      // Handler for a HTTP request 
      class Handler extends Thread { 
        protected Socket socket; 
        protected PrintWriter pw; 
        protected BufferedOutputStream bos; 
        protected BufferedReader br; 
        protected File docroot; 
     
        public Handler(Socket _socket, String _docroot) throws Exception { 
          socket = _socket; 
          // Get the absolute directory of the filepath 
          docroot = new File(_docroot).getCanonicalFile(); 
        } 
     
        public void run() { 
          try { 
            // Prepare our readers and writers 
            br = new BufferedReader(new InputStreamReader( 
                socket.getInputStream())); 
            bos = new BufferedOutputStream(socket.getOutputStream()); 
            pw = new PrintWriter(new OutputStreamWriter(bos)); 
     
            // Read HTTP request from user (hopefully GET /file...... ) 
            String line = br.readLine(); 
     
            // Shutdown any further input 
            socket.shutdownInput(); 
     
            if (line == null) { 
              socket.close(); 
              return; 
            } 
            if (line.toUpperCase().startsWith("GET")) { 
              // Eliminate any trailing ? data, such as for a CGI GET 
              // request 
              StringTokenizer tokens = new StringTokenizer(line, " ?"); 
              tokens.nextToken(); 
              String req = tokens.nextToken(); 
     
              // If a path character / or / is not present, add it to the 
              // document root 
              // and then add the file request, to form a full filename 
              String name; 
              if (req.startsWith("/") || req.startsWith("//")) 
                name = this.docroot + req; 
              else 
                name = this.docroot + File.separator + req; 
     
              // Get absolute file path 
              File file = new File(name).getCanonicalFile(); 
     
              // Check to see if request doesn't start with our document 
              // root .... 
              if (!file.getAbsolutePath().startsWith( 
                  this.docroot.getAbsolutePath())) { 
                pw.println("HTTP/1.0 403 Forbidden"); 
                pw.println(); 
              } 
              // ... if it's missing ..... 
              else if (!file.exists()) { 
                pw.println("HTTP/1.0 404 File Not Found"); 
                pw.println(); 
              } 
              // ... if it can't be read for security reasons .... 
              else if (!file.canRead()) { 
                pw.println("HTTP/1.0 403 Forbidden"); 
                pw.println(); 
              } 
              // ... if its actually a directory, and not a file .... 
              else if (file.isDirectory()) { 
                sendDir(bos, pw, file, req); 
              } 
              // ... or if it's really a file 
              else { 
                sendFile(bos, pw, file.getAbsolutePath()); 
              } 
            } 
            // If not a GET request, the server will not support it 
            else { 
              pw.println("HTTP/1.0 501 Not Implemented"); 
              pw.println(); 
            } 
     
            pw.flush(); 
            bos.flush(); 
          } catch (Exception e) { 
            e.printStackTrace(); 
          } 
          try { 
            socket.close(); 
          } catch (Exception e) { 
            e.printStackTrace(); 
          } 
        } 
     
        protected void sendFile(BufferedOutputStream bos, PrintWriter pw, 
            String filename) throws Exception { 
          try { 
            java.io.BufferedInputStream bis = new java.io.BufferedInputStream( 
                new FileInputStream(filename)); 
            byte[] data = new byte[10 * 1024]; 
            int read = bis.read(data); 
     
            pw.println("HTTP/1.0 200 Okay"); 
            pw.println(); 
            pw.flush(); 
            bos.flush(); 
     
            while (read != -1) { 
              bos.write(data, 0, read); 
              read = bis.read(data); 
            } 
            bos.flush(); 
          } catch (Exception e) { 
            pw.flush(); 
            bos.flush(); 
          } 
        } 
     
        protected void sendDir(BufferedOutputStream bos, PrintWriter pw, 
            File dir, String req) throws Exception { 
          try { 
            pw.println("HTTP/1.0 200 Okay"); 
            pw.println(); 
            pw.flush(); 
     
            pw.print("html>head>title>Directory of "); 
            pw.print(req); 
            pw.print("/title>/head>body>h1>Directory of "); 
            pw.print(req); 
            pw.println("/h1>table border=/"0/">"); 
     
            File[] contents = dir.listFiles(); 
     
            for (int i = 0; i  contents.length; i++) { 
              pw.print("tr>"); 
              pw.print("td>a href="/" rel="external nofollow" rel="external nofollow" mce_href="/" rel="external nofollow" rel="external nofollow" ""); 
              pw.print(req); 
              pw.print(contents[i].getName()); 
              if (contents[i].isDirectory()) 
                pw.print("/"); 
              pw.print("/">"); 
              if (contents[i].isDirectory()) 
                pw.print("Dir -> "); 
              pw.print(contents[i].getName()); 
              pw.print("/a>/td>"); 
              pw.println("/tr>"); 
            } 
            pw.println("/table>/body>/html>"); 
            pw.flush(); 
          } catch (Exception e) { 
            pw.flush(); 
            bos.flush(); 
          } 
        } 
      } 
     
      // Check that a filepath has been specified and a port number 
      protected void parseParams(String[] args) throws Exception { 
        switch (args.length) { 
        case 1: 
        case 0: 
          System.err.println("Syntax: jvm> " + this.getClass().getName() 
              + " docroot port"); 
          System.exit(0); 
     
        default: 
          this.docroot = args[0]; 
          this.port = Integer.parseInt(args[1]); 
          break; 
        } 
      } 
     
      public WebServerDemo(String[] args) throws Exception { 
        System.out.println("Checking for paramters"); 
     
        // Check for command line parameters 
        parseParams(args); 
     
        System.out.print("Starting web server...... "); 
     
        // Create a new server socket 
        this.ss = new ServerSocket(this.port); 
     
        System.out.println("OK"); 
     
        for (;;) { 
          // Accept a new socket connection from our server socket 
          Socket accept = ss.accept(); 
     
          // Start a new handler instance to process the request 
          new Handler(accept, docroot).start(); 
        } 
      } 
     
      // Start an instance of the web server running 
      public static void main(String[] args) throws Exception { 
        WebServerDemo webServerDemo = new WebServerDemo(args); 
      } 
    } 

    感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

    您可能感兴趣的文章:
    • java实现一个简单的Web服务器实例解析
    • java 与web服务器链接的实例
    • AngularJS实现与Java Web服务器交互操作示例【附demo源码下载】
    • 基于Java web服务器简单实现一个Servlet容器
    • 简单实现Java web服务器
    • Java实现简易Web服务器
    • Java中常见的5种WEB服务器介绍
    • Java Socket编程(五) 简单的WEB服务器
    • 搭建JavaWeb服务器步骤详解
    上一篇:HttpClient Post 二进制/字节流/byte[]实例代码
    下一篇:详解直接访问WEB-INF目录下的JSP页面的方法
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Java 实现 web服务器的简单实例 Java,实现,web,服务器,的,