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.
    }
}

 

 

 
posted @ 2015-01-09 15:35  hansongjiang8  阅读(375)  评论(2编辑  收藏  举报