private void doStart() {
		if (!PortKit.isAvailable(port)) {
			throw new IllegalArgumentException("the port is already used :"+port);
		}
		
		deletSessionData();
		/*
		 * |Server|连接 |Connector|与|Handler|
		 * |---------------------------------------------------------------------|
		 * |    ---------------          ----------            --------------    |
		 * |   |   Connector   | <----> |  Server  | <----->  |   Handler    |   |
		 * |    ---------------          ----------            --------------    |
		 * |---------------------------------------------------------------------|
		 */
		
		System.out.println("Starting JFinal :" + Const.JFINAL_VERSION);
		/*
		 * 一、概述
		 *     在Jetty框架中，Server的对象必须配合Connectpr和Handle一起使用。
		 * 也就是说Server是Connector和Handle之间的桥梁。
		 * 二、实现方案
		 *     1.实例化Server对象。
		 *     2.Connector为接口，实例化性能比较好的SelectChaanelConnector类来获取接口。
		 *       并且将Connect接口配置给Server。
		 *     3.
		 */
		server = new Server();
		SelectChannelConnector connector = new SelectChannelConnector();
		connector.setPort(port);
		server.addConnector(connector);
		
		webApp = new WebAppContext();	        // 一个WebAppContext代表一个应用程序，可以是war包或者目录。
		webApp.setResourceBase(webAppDir);      // 为应用程序配置目录，该目录的地位为WebRoot
		//webApp.setWar(war);                   // 配置warb包
		webApp.setInitParameter("org.eclipse.jetty.servlet.Default.dirAllowed", "false");
		webApp.setInitParameter("org.eclipse.jetty.servlet.Default.useFileMappedBuffer", "false");	// webApp.setInitParams(Collections.singletonMap("org.mortbay.jetty.servlet.Default.useFileMappedBuffer", "false"));
		persistSession(webApp);
		
		server.setHandler(webApp);              // 将webApp作为Handle配置给server
		changeClassLoader(webApp);
		
		if (scanIntervalSeconds > 0) {
			Scanner scanner = new Scanner(PathKit.getWebRootPath(), scanIntervalSeconds) {
				
				@Override
				public void onChange() {
					try {
						System.err.println("\nLoading Changes");
						webApp.stop();
						JFinalClassLoader classLoader = new JFinalClassLoader(webApp, System.getProperty("java.class.path"));
						webApp.setClassLoader(classLoader);
						webApp.start();
					} catch (Exception e) {
						System.err.println("/nreload falied!!!");
					}
				}
			};
			System.out.println("starting scanner with scanIntervalSeconds :"+scanIntervalSeconds);
			scanner.start();
		}
		
		try {
			System.out.println("Starting server on port : "+port);
			server.start();
			server.join();
		} catch (Exception e) {
			e.printStackTrace();
			System.exit(100);	// 非0表示异常退出
		}
	}