zoukankan      html  css  js  c++  java
  • SimpleHttpServer的学习之UML

    如何分析一个稍微大点的源码呢?

      静态分析

    除了看代码,就是 uml图,UML虽然在书本类与类之间的关系很复杂,可能要一本书,但是最核心的其实很简单;

    (1)继承 extends

    (2)实现接口 implements

    以上两个没啥说的,很easy.

    (3)关联和依赖,这两者我一块说,不区分。简单来说,就是当前类直接使用哪些类。我们看项目中的主类依赖关系,从主类别开始逐层深入不断分析。

    代码和和图一结合,很简单吧

    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
    package org.simpleHTTPServer;
    
    import java.io.File;
    import java.util.logging.Level;
    import java.util.logging.Logger;
    
    /**
     *
     * @author romain
     */
    public class SimpleHTTPServer {
    
        //默认端口
        public static final int DEFAULT_PORT = 8000;
        //默认目录
        public static final File DEFAULT_FILE = new File(".");
        //自定义端口
        private final int port;
        //自定义目录
        private final File rootDir;
        //最大线程数
        private int maxThreads = 10;
        //连接超时时间
        private int clientTimeoutInMillis = 1000;
        //依赖的一个类,多线程的为用户服务
        private ServerMultiThreadedWorkers server;
        private boolean started = false;
    
        public SimpleHTTPServer() {
            this(DEFAULT_PORT, DEFAULT_FILE);
        }
    
        public SimpleHTTPServer(int port, File rootDir) {
            this.port = port;
            this.rootDir = rootDir;
        }
    
        public void start() {
            if (!started) {
                System.out.println("Serving HTTP on 0.0.0.0 port 8000 ...");
                //z请求处理类,此处又直接依赖RequestHandlerFactory类,和RequestHandlerStaticSiteFactory
                RequestHandlerFactory requestHandlerFactory = new RequestHandlerStaticSiteFactory(rootDir);
                server = new ServerMultiThreadedWorkers(port, clientTimeoutInMillis, maxThreads, requestHandlerFactory);
                server.start();
                started = true;
            } else {
                throw new RuntimeException("Server already started (HTTP port=" + port + ", rootDir=" + rootDir.getAbsolutePath() + ")");
    
            }
        }
    
        public void stop() {
            if (started) {
                server.terminate();
                try {
                    //直接使用了Thread类
                    Thread.sleep(500);
                } catch (InterruptedException ex) {
                    Logger.getLogger(SimpleHTTPServer.class.getName()).log(Level.SEVERE, null, ex);
                }
            } else {
                System.out.println("Server not started (HTTP port=" + port + ", rootDir=" + rootDir.getAbsolutePath() + ")");
            }
        }
    
        /**
         * @param maxThreads the maxThreads to set
         */
        public void setMaxThreads(int maxThreads) {
            this.maxThreads = maxThreads;
        }
    
        /**
         * @param clientTimeoutInMillis the clientTimeoutInMillis to set
         */
        public void setClientTimeoutInMillis(int clientTimeoutInMillis) {
            this.clientTimeoutInMillis = clientTimeoutInMillis;
        }
    
        /**
         *
         * @param args. First arg is the port number.
         */
        public static void main(String[] args) {
            int port = DEFAULT_PORT;
            if (args.length > 0) {
                port = Integer.parseInt(args[0]);
            }
            SimpleHTTPServer server = new SimpleHTTPServer(port, DEFAULT_FILE);
            server.start();
    
            //Use Ctrl + C to stop.
        }
    }
     
  • 相关阅读:
    LeetCode 769. Max Chunks To Make Sorted
    LeetCode 845. Longest Mountain in Array
    LeetCode 1059. All Paths from Source Lead to Destination
    1129. Shortest Path with Alternating Colors
    LeetCode 785. Is Graph Bipartite?
    LeetCode 802. Find Eventual Safe States
    LeetCode 1043. Partition Array for Maximum Sum
    LeetCode 841. Keys and Rooms
    LeetCode 1061. Lexicographically Smallest Equivalent String
    LeetCode 1102. Path With Maximum Minimum Value
  • 原文地址:https://www.cnblogs.com/hansongjiang/p/4213491.html
Copyright © 2011-2022 走看看