亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? dynaserver.java

?? 最新的關于精通rmi這本書的源碼
?? JAVA
?? 第 1 頁 / 共 2 頁
字號:
/*
 * Copyright 2000 by dreamBean Software,
 * All rights reserved.
 */
package com.dreambean.dynaserver;

import java.io.*;
import java.net.*;
import java.util.*;

/**
 *   A mini webserver that can be embedded in another application as a JavaBean. It can serve any file that is available from
 *   classloaders that are registered with it, including class-files.
 *
 *   Its primary purpose is to simplify dynamic class-loading in RMI. Create an instance of it, register a classloader 
 *   with your classes, start it, and you'll be able to let RMI-clients dynamically download classes from it.
 *
 *   Note: the use of the synchronized is mainly due to the thread synch. issues with the JVM spec
 *
 *   @author $Author: Rickard 謆erg (rickard@dreambean.com)$
 *   @version $Revision: 1.0$
 */
public final class DynaServer
{
   // Constants -----------------------------------------------------
   /** 
    * List of ports to try during portscan
    * Try anonymous (0) if all else fails
    */
   public final String PORTS = "8080,8081,8082,80,81,82,0";
   
   /** 
    * Time out for server socket.
    */
   public final int SO_TIMEOUT = 10000; // ServerSocket timeout to allow it to check "running" flag
    
   // Attributes ----------------------------------------------------
   private ArrayList classLoaders = new ArrayList();
   private List requests = new ArrayList();
   
   private int port = 8080;
   private int backLog = 50; // Nr of requests to queue in ServerSocket. 50 is JDK default, so use that
   private boolean portScan = true; // If port is taken, try to scan for free ones
   private boolean debug = false; // The server shows some debugging info if this is true
   private int nrOfHandlers = 5; // Nr of request handlers
   
   private Properties mimeTypes = new Properties(); // The MIME type mapping
   
   private boolean running;
   
   // Static --------------------------------------------------------

   // Constructors --------------------------------------------------
   public DynaServer()
   {
      initMimetypes();
   }

   // Public --------------------------------------------------------
   public synchronized void setPort(int p) { port = p; }
   public synchronized int getPort() { return port; }
   
   public synchronized void setPortScan(boolean portScan) { this.portScan = portScan; }
   public synchronized boolean getPortScan() { return portScan; }
   
   public synchronized void setBackLog(int b) { backLog = b; }
   public synchronized int getBackLog() { return backLog; }
   
   public synchronized void setDebug(boolean d) { debug = d; }
   public synchronized boolean isDebug() { return debug; }

   public synchronized void setNrOfHandlers(int nrOfHandlers) { this.nrOfHandlers = nrOfHandlers; }
   public synchronized int getNrOfHandlers() { return nrOfHandlers; }
   
   public synchronized boolean isRunning() { return running; }
   
   public synchronized void start()
      throws IOException
   {
      if (isRunning())
         return;
         
      try
      {
         running = true;
         
         // Start socket listener
         new RequestListener();
         
         // Start request handlers
         for (int i = 0; i < nrOfHandlers; i++)
         {
            new RequestHandler();
         }
         
         initCodebase();
         
         debug("Started on port " + getPort());
      } catch (IOException e)
      {
         debug("Could not start on port " + getPort());
         throw e;
      }
   }
   
   public synchronized void stop()
   {
      // Close already accepted requests
      Iterator enum = requests.iterator();
      while (enum.hasNext())
      {
         try
         {
            Socket request = (Socket)enum.next();
            request.close();
         } catch (IOException e)
         {
            // Ignore
         }
      }
   
      // Change state to not running and notify handlers
      running = false;
      notifyAll();
      
      try
      {
         wait(SO_TIMEOUT); // Wait for listener to finish
      } catch (InterruptedException e)
      {
         // Ignore
      }
   }
   
   public synchronized void addClassLoader(ClassLoader cl)
   {
      ArrayList arr = (ArrayList)classLoaders.clone();
      arr.add(cl);
      classLoaders = arr;
   }
   
   public synchronized void removeClassLoader(ClassLoader cl)
   {
      ArrayList arr = (ArrayList)classLoaders.clone();
      arr.remove(cl);
      classLoaders = arr;
   }
   
   public synchronized Collection getClassLoaders()
   {
      return classLoaders;
   }
   

   // Package protected ---------------------------------------------
   synchronized void debug(String msg)
   {
      if (isDebug())
         System.out.println(msg);
   }
    
   // Protected -----------------------------------------------------
   
   /**
    * Returns the path to the class file obtained from
    * parsing the HTML header.
    */
   
   protected String getMimeType(String path)
   {
      String ext = path.substring(path.lastIndexOf(".")+1);
      String type = mimeTypes.getProperty(ext);
      if (type == null)
      {
         debug("No MIME-type registered for:"+ext);
         return "text/plain";
      }
      else
         return type;
   }
   
   protected synchronized void addRequest(Socket request)
   {
      requests.add(request);
      notifyAll();
   }
    
   protected synchronized Socket getRequest()
      throws IllegalStateException
   {
      while (requests.isEmpty() && isRunning())
      {
         try
         {
            wait();
         } catch (InterruptedException e)
         {
            // Ignore
         }
      }
      
      if (isRunning())
         return (Socket)requests.remove(0);
      else
         throw new IllegalStateException();   
   }
   
   // Private -------------------------------------------------------
   private void initCodebase()
   {
      // Compute codebase
      String host = System.getProperty("java.rmi.server.hostname");
      if (host ==null)
      {
         try
         {
            host = InetAddress.getLocalHost().getHostName(); 
         } catch (UnknownHostException e)
         {
            // Notify about problem, but ignore
            debug("Could not get hostname");
         }
      }
   
      String codebase = "http://"+host+":"+getPort()+"/";
   
      // Try setting codebase if not set, 
      // or if different from computed codebase (port may have changed because of port scanning!)
      String currentCodebase = System.getProperty("java.rmi.server.codebase");
      if (currentCodebase == null || !currentCodebase.equals(codebase))
      {
         System.setProperty("java.rmi.server.codebase", codebase);
         debug("Codebase set to "+codebase);
      }      
   }

   private void initMimetypes()
   {
      // Load the file mime.types into the mapping list
      try
      {
         InputStream in = getClass().getResourceAsStream("/mime.types");
         if (in != null)
            mimeTypes.load(in);
         else
      	   System.err.println("No mime-type mappings found!");   
      } catch (IOException e)
      {
         e.printStackTrace(System.err);
      }
   }
   
   // Inner classes -------------------------------------------------
   class RequestListener
      implements Runnable
   {
      ServerSocket serverSocket;
   
      RequestListener()
         throws IOException
      {
         try

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲午夜视频在线观看| 91美女精品福利| 91麻豆精品秘密| 日韩午夜在线观看视频| 一区二区欧美在线观看| 风流少妇一区二区| 欧美人伦禁忌dvd放荡欲情| 国产精品久久久久影院色老大| 免费观看久久久4p| 在线观看www91| 18成人在线观看| 成人综合日日夜夜| 久久久久久久精| 久久成人羞羞网站| 欧美一区二区在线观看| 亚洲综合在线视频| 色综合久久久久综合99| 国产精品无遮挡| 粉嫩一区二区三区在线看| 日韩精品中午字幕| 蜜臀a∨国产成人精品| 欧美日韩国产影片| 亚洲一区二区美女| 欧美影视一区二区三区| 亚洲精品国产精华液| 色先锋aa成人| 玉米视频成人免费看| 丁香桃色午夜亚洲一区二区三区| 欧美tickling网站挠脚心| 日韩极品在线观看| 欧美日本一区二区| 日本成人在线视频网站| 91精品国产91久久久久久一区二区| 日韩午夜在线观看| 三级精品在线观看| 国产精品电影院| 国产精品家庭影院| 国产一区免费电影| 精品一区二区三区欧美| 一区二区三区在线视频免费观看| 盗摄精品av一区二区三区| 国产精品天干天干在线综合| 成人免费视频一区二区| 国产精品视频九色porn| 福利视频网站一区二区三区| 国产精品水嫩水嫩| 色婷婷综合五月| 日韩不卡在线观看日韩不卡视频| 日韩一区二区在线免费观看| 国精产品一区一区三区mba视频 | 亚洲黄色免费网站| 一本色道久久综合精品竹菊| 亚洲在线观看免费| 日韩免费视频一区二区| 成人丝袜18视频在线观看| 亚洲三级在线看| 欧美乱熟臀69xxxxxx| 捆绑调教一区二区三区| 欧美国产日韩亚洲一区| 91福利精品视频| 麻豆91免费观看| 亚洲欧洲三级电影| 欧美麻豆精品久久久久久| 国产美女主播视频一区| 亚洲免费观看高清在线观看| 制服丝袜在线91| 粉嫩欧美一区二区三区高清影视| 亚洲精品成人悠悠色影视| 日韩三级精品电影久久久| 大胆欧美人体老妇| 首页国产欧美日韩丝袜| 日本一区二区在线不卡| 欧美色精品天天在线观看视频| 精品无人码麻豆乱码1区2区| 亚洲乱码国产乱码精品精可以看| 欧美一级片在线观看| 99在线视频精品| 免费在线观看精品| 亚洲免费在线观看视频| 久久综合狠狠综合久久激情 | 国产精品毛片高清在线完整版| 欧美日韩午夜精品| 波多野结衣中文一区| 久久99久久久欧美国产| 亚洲精品国产成人久久av盗摄| 久久网站热最新地址| 欧美精品自拍偷拍动漫精品| 91视频在线观看| 国产精品 欧美精品| 污片在线观看一区二区| 亚洲丝袜另类动漫二区| 久久中文娱乐网| 日韩一区二区视频| 欧美日韩国产小视频| 91一区一区三区| 国产成人午夜片在线观看高清观看| 亚洲不卡av一区二区三区| 日韩伦理电影网| 国产欧美日韩另类一区| 精品精品欲导航| 337p亚洲精品色噜噜噜| 欧美吻胸吃奶大尺度电影| 99久久精品情趣| 成人黄色av电影| 成人影视亚洲图片在线| 国产馆精品极品| 国产精品一区二区男女羞羞无遮挡| 日韩二区三区四区| 日韩电影免费在线观看网站| 亚洲国产婷婷综合在线精品| 亚洲精品免费播放| 亚洲欧美色一区| 日韩一区日韩二区| 亚洲你懂的在线视频| 亚洲啪啪综合av一区二区三区| 国产精品天美传媒| 亚洲欧洲精品天堂一级| 国产精品护士白丝一区av| 国产精品乱码久久久久久| 欧美激情一区不卡| 日韩一区欧美一区| 亚洲精品中文在线| 亚洲电影你懂得| 日韩国产一二三区| 裸体一区二区三区| 国产露脸91国语对白| 国产成人免费视| 99久久精品国产观看| 在线免费视频一区二区| 欧美日韩电影一区| 日韩视频免费观看高清在线视频| 日韩一区二区三区免费看| 精品国产一区二区三区四区四| 久久色.com| 国产精品久久777777| 一区二区在线观看视频在线观看| 亚洲欧美激情小说另类| 一区二区三区精品在线| 日韩av不卡一区二区| 国产在线一区二区综合免费视频| 国产成人在线观看免费网站| 99免费精品在线观看| 欧美欧美欧美欧美| 久久综合九色综合欧美就去吻| 国产精品日产欧美久久久久| 依依成人综合视频| 九九精品一区二区| 色综合久久久网| 日韩女优视频免费观看| 中文字幕av一区 二区| 亚洲成av人片一区二区梦乃| 韩国欧美国产一区| 一道本成人在线| 日韩视频免费直播| 亚洲精品免费在线| 国产美女在线观看一区| 欧美性xxxxx极品少妇| 精品国精品自拍自在线| 亚洲你懂的在线视频| 国产最新精品精品你懂的| 91精品办公室少妇高潮对白| 精品国产一二三区| 亚洲一区在线看| 国产精品1024| 日韩视频在线观看一区二区| 日韩毛片在线免费观看| 国产一区二区三区| 欧美日韩色一区| 亚洲视频免费观看| 国产福利视频一区二区三区| 91精品视频网| 一区二区三区中文在线| 国产成人免费9x9x人网站视频| 56国语精品自产拍在线观看| 亚洲少妇屁股交4| 国产风韵犹存在线视精品| 欧美一区二区精品| 一区二区三区国产精品| 波多野结衣在线aⅴ中文字幕不卡| 欧美xxxx老人做受| 日本中文在线一区| 欧美午夜寂寞影院| 一区二区三区蜜桃| 国产一区二区伦理| 欧美一区二区三区男人的天堂| 亚洲欧美成aⅴ人在线观看| 成人午夜精品一区二区三区| wwww国产精品欧美| 狠狠网亚洲精品| 91精品国产一区二区| 偷拍亚洲欧洲综合| 欧美亚洲日本国产| 自拍偷拍国产精品| www.综合网.com| 国产精品高潮久久久久无| 成人一区二区在线观看| 国产欧美日韩精品a在线观看| 国内精品久久久久影院色| 精品欧美久久久| 国内精品伊人久久久久影院对白|