home *** CD-ROM | disk | FTP | other *** search
/ PC Pro 1999 April / DPPCPRO0499.ISO / April / Notes / 50b2wic.exe / DATA1.CAB / NotesProgramFilesJavaSupport / icsclass.jar / lotus / domino / servlet / ServletManager.class (.txt) < prev    next >
Encoding:
Java Class File  |  1998-11-15  |  6.4 KB  |  218 lines

  1. package lotus.domino.servlet;
  2.  
  3. import java.io.File;
  4. import java.io.FileInputStream;
  5. import java.io.IOException;
  6. import java.text.SimpleDateFormat;
  7. import java.util.Date;
  8. import java.util.Enumeration;
  9. import java.util.Hashtable;
  10. import java.util.Properties;
  11. import java.util.StringTokenizer;
  12. import javax.servlet.Servlet;
  13.  
  14. public class ServletManager {
  15.    private ServletManagerConfig i_config;
  16.    private Hashtable i_invokerTable;
  17.    protected static Hashtable c_servletTable = new Hashtable();
  18.    protected static DominoSessionContext c_sessionContext;
  19.    private StringListTable i_serviceTable;
  20.    private Hashtable i_ssiTable;
  21.    private String i_errorLog;
  22.    private String i_configFilename;
  23.    protected static String c_configPath;
  24.    protected static Properties c_servletManagerProps = new Properties();
  25.    public static final boolean debugOutput = false;
  26.  
  27.    private void loadNewConfiguration(String var1, String var2) {
  28.       this.unloadConfiguration();
  29.       this.i_config = new ServletManagerConfig();
  30.       this.i_config.initialize(var1, var2);
  31.       c_sessionContext = new DominoSessionContext();
  32.       this.i_serviceTable = this.i_config.getServiceTable();
  33.       this.i_ssiTable = this.i_config.getSSITable();
  34.       this.i_invokerTable = this.i_config.getInvokerTable();
  35.    }
  36.  
  37.    private void unloadConfiguration() {
  38.       this.destroyServlets();
  39.    }
  40.  
  41.    public static Hashtable getServletTable() {
  42.       return c_servletTable;
  43.    }
  44.  
  45.    public static DominoSessionContext getSessionContext() {
  46.       return c_sessionContext;
  47.    }
  48.  
  49.    public static String getConfigPath() {
  50.       return c_configPath;
  51.    }
  52.  
  53.    public static boolean getBoolProp(String var0, boolean var1) {
  54.       String var2 = c_servletManagerProps.getProperty(var0);
  55.       return var2 != null ? var2.equals("true") : var1;
  56.    }
  57.  
  58.    public static long getLongProp(String var0, long var1) {
  59.       String var3 = c_servletManagerProps.getProperty(var0);
  60.       long var4 = var1;
  61.       if (var3 != null && var3.trim().length() > 0) {
  62.          try {
  63.             var4 = Long.parseLong(var3);
  64.          } catch (NumberFormatException var6) {
  65.          }
  66.       }
  67.  
  68.       return var4;
  69.    }
  70.  
  71.    public static int getIntProp(String var0, int var1) {
  72.       String var2 = c_servletManagerProps.getProperty(var0);
  73.       int var3 = var1;
  74.       if (var2 != null && var2.trim().length() > 0) {
  75.          try {
  76.             var3 = Integer.parseInt(var2);
  77.          } catch (NumberFormatException var4) {
  78.          }
  79.       }
  80.  
  81.       return var3;
  82.    }
  83.  
  84.    private void destroyServlets() {
  85.       if (this.i_invokerTable != null) {
  86.          Enumeration var1 = this.i_invokerTable.elements();
  87.  
  88.          while(var1.hasMoreElements()) {
  89.             DominoServletInvoker var2 = (DominoServletInvoker)var1.nextElement();
  90.             var2.destroy();
  91.          }
  92.       }
  93.  
  94.    }
  95.  
  96.    public int invokeSSI() {
  97.       try {
  98.          String var1 = NativeStub.extract("SERVLET_NAME");
  99.          if (var1 == null) {
  100.             return 500;
  101.          } else {
  102.             DominoServletInvoker var2 = (DominoServletInvoker)this.i_ssiTable.get(var1);
  103.             return var2 == null ? 0 : var2.invokeSSI();
  104.          }
  105.       } catch (Throwable var3) {
  106.          var3.printStackTrace(System.err);
  107.          return 500;
  108.       }
  109.    }
  110.  
  111.    public int serverInit() {
  112.       try {
  113.          System.getProperty("os.name");
  114.          String var1 = (new SimpleDateFormat("MMMddyyyy")).format(new Date());
  115.          String var2 = System.getProperty("file.separator");
  116.          String var3 = NativeStub.extract("SERVER_ROOT") + var2;
  117.          this.i_configFilename = NativeStub.extract("INIT_STRING");
  118.          if (File.separatorChar == '\\') {
  119.             this.i_configFilename = this.i_configFilename.replace('/', '\\');
  120.          }
  121.  
  122.          if (this.i_configFilename.equals("")) {
  123.             this.i_configFilename = "servlet.cnf";
  124.             System.err.println("Servlet initialization warning: no configuration filename was given so will assume it is " + this.i_configFilename);
  125.          }
  126.  
  127.          if (this.i_configFilename.indexOf("/") == -1 && this.i_configFilename.indexOf("\\") == -1) {
  128.             String var4 = NativeStub.extract("CONFIG_PATH");
  129.             this.i_configFilename = var4 + this.i_configFilename;
  130.          }
  131.  
  132.          this.i_errorLog = var3 + var2 + "servlet-log." + var1;
  133.          NativeStub.set("SERVLET_LOG", this.i_errorLog);
  134.          File var9 = new File(this.i_configFilename);
  135.          if (!var9.exists()) {
  136.             NativeStub.log_error("Servlet Initialization error: servlet configuration file (" + this.i_configFilename + ") does not exist");
  137.             System.err.println(this.i_configFilename + " is not a valid configuration file, it doesn't exist");
  138.             return 500;
  139.          } else if (!var9.isFile()) {
  140.             NativeStub.log_error("Servlet Initialization error: " + this.i_configFilename + "is not a valid configuration file");
  141.             System.err.println(this.i_configFilename + " is not a valid configuration file, it's a directory");
  142.             return 500;
  143.          } else if (!var9.canRead()) {
  144.             NativeStub.log_error("Servlet Initialization error: " + this.i_configFilename + "is not readable, check permissions");
  145.             System.err.println("Server does not have read permissions to configuration file: " + this.i_configFilename);
  146.             return 500;
  147.          } else {
  148.             c_configPath = var9.getParent();
  149.             String var5 = c_configPath + "/" + "domino.properties";
  150.  
  151.             try {
  152.                FileInputStream var6 = new FileInputStream(var5);
  153.                c_servletManagerProps.load(var6);
  154.                var6.close();
  155.             } catch (IOException var7) {
  156.             }
  157.  
  158.             this.loadNewConfiguration(this.i_configFilename, this.i_errorLog);
  159.             return 200;
  160.          }
  161.       } catch (Throwable var8) {
  162.          System.err.println("Exception was thrown during Server Initialization:");
  163.          var8.printStackTrace(System.err);
  164.          return 500;
  165.       }
  166.    }
  167.  
  168.    public int service() {
  169.       int var1 = 0;
  170.       Object var2 = null;
  171.       Object var3 = null;
  172.       Object var4 = null;
  173.  
  174.       try {
  175.          String var5 = NativeStub.extract("SCRIPT_NAME");
  176.          String var9 = this.i_serviceTable.get(var5);
  177.          if (var9 == null) {
  178.             System.err.println("Servlet Error: No servlet maps to " + var5);
  179.             return 0;
  180.          }
  181.  
  182.          NativeStub.set("CONTENT_TYPE", "text/html");
  183.  
  184.          for(StringTokenizer var6 = new StringTokenizer(var9, ","); var6.hasMoreTokens() && var1 == 0; var1 = var10.service()) {
  185.             String var8 = var6.nextToken();
  186.             var10 = (DominoServletInvoker)this.i_invokerTable.get(var8);
  187.             if (var10 == null) {
  188.                NativeStub.log_error("Servlet Error: couldn't find Servlet " + var8);
  189.                return 500;
  190.             }
  191.          }
  192.       } catch (Throwable var7) {
  193.          NativeStub.log_error(var7.toString());
  194.          System.err.println("Error in Servlet " + var2 + " while executing service function");
  195.          var7.printStackTrace(System.err);
  196.          return 500;
  197.       }
  198.  
  199.       if (var1 == 0) {
  200.          var1 = 200;
  201.       }
  202.  
  203.       return var1;
  204.    }
  205.  
  206.    public int serverTerm() {
  207.       Enumeration var1 = c_servletTable.elements();
  208.  
  209.       while(var1.hasMoreElements()) {
  210.          Servlet var2 = (Servlet)var1.nextElement();
  211.          var2.destroy();
  212.       }
  213.  
  214.       c_sessionContext.terminate();
  215.       return 200;
  216.    }
  217. }
  218.