webappregexpdeploygenerator.java

来自「RESIN 3.2 最新源码」· Java 代码 · 共 205 行

JAVA
205
字号
/* * Copyright (c) 1998-2008 Caucho Technology -- all rights reserved * * This file is part of Resin(R) Open Source * * Each copy or derived work must preserve the copyright notice and this * notice unmodified. * * Resin Open Source is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * Resin Open Source is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, or any warranty * of NON-INFRINGEMENT.  See the GNU General Public License for more * details. * * You should have received a copy of the GNU General Public License * along with Resin Open Source; if not, write to the *   Free SoftwareFoundation, Inc. *   59 Temple Place, Suite 330 *   Boston, MA 02111-1307  USA * * @author Scott Ferguson */package com.caucho.server.webapp;import com.caucho.config.types.PathBuilder;import com.caucho.log.Log;import com.caucho.server.deploy.DeployContainer;import com.caucho.server.deploy.DeployGenerator;import com.caucho.vfs.Path;import java.util.ArrayList;import java.util.HashMap;import java.util.logging.Level;import java.util.logging.Logger;import java.util.regex.Matcher;import java.util.regex.Pattern;/** * The generator for the web-app deploy */public class WebAppRegexpDeployGenerator  extends DeployGenerator<WebAppController> {  private static final Logger log = Log.open(WebAppSingleDeployGenerator.class);  private WebAppContainer _container;    private WebAppController _parent;  private WebAppConfig _config;    private ArrayList<WebAppConfig> _webAppDefaults =    new ArrayList<WebAppConfig>();  private ArrayList<WebAppController> _entries =    new ArrayList<WebAppController>();  /**   * Creates the new host deploy.   */  public WebAppRegexpDeployGenerator(DeployContainer<WebAppController> deployContainer)  {    super(deployContainer);  }  /**   * Creates the new host deploy.   */  public WebAppRegexpDeployGenerator(DeployContainer<WebAppController> deployContainer,			    WebAppContainer container,			    WebAppConfig config)  {    super(deployContainer);        setContainer(container);    _config = config;  }  /**   * Gets the webApp container.   */  public WebAppContainer getContainer()  {    return _container;  }  /**   * Sets the webApp container.   */  public void setContainer(WebAppContainer container)  {    _container = container;  }  /**   * Sets the parent webApp.   */  public void setParent(WebAppController parent)  {    _parent = parent;  }    /**   * Returns the current array of webApp entries.   */  public WebAppController generateController(String name)  {    Pattern regexp = _config.getURLRegexp();    Matcher matcher = regexp.matcher(name);    if (! matcher.find() || matcher.start() != 0) {      return null;    }    int length = matcher.end() - matcher.start();    String contextPath = matcher.group();            ArrayList<String> vars = new ArrayList<String>();    //WebAppDeployControlleryController entry = new WebAppDeployControlleryController(this, contextPath);    HashMap<String,Object> varMap = new HashMap<String,Object>();    // entry.getVariableMap();            for (int j = 0; j <= matcher.groupCount(); j++) {      vars.add(matcher.group(j));      varMap.put("app" + j, matcher.group(j));    }    varMap.put("regexp", vars);    Path appDir = null;        try {      String appDirPath = _config.getDocumentDirectory();      if (appDirPath == null)	appDirPath = "./" + matcher.group(0);            appDir = PathBuilder.lookupPath(appDirPath, varMap);      if (! appDir.isDirectory() || ! appDir.canRead()) {	return null;      }    } catch (Exception e) {      log.log(Level.FINER, e.toString(), e);            return null;    }    WebAppController controller = null;        Thread thread = Thread.currentThread();    ClassLoader oldLoader = thread.getContextClassLoader();    try {      thread.setContextClassLoader(getParentClassLoader());            synchronized (_entries) {	for (int i = 0; i < _entries.size(); i++) {	  controller = _entries.get(i);	  if (appDir.equals(controller.getRootDirectory()))	    return controller;	}	controller = new WebAppController(name, name, appDir, _container);	// XXX: not dynamic-deploy in the sense that the mappings are known	//controller.setDynamicDeploy(true);	controller.getVariableMap().putAll(varMap);	controller.setRegexpValues(vars);	controller.setConfig(_config);	// _controller.setJarPath(_archivePath);	for (int i = 0; i < _webAppDefaults.size(); i++)	  controller.addConfigDefault(_webAppDefaults.get(i));      	_entries.add(controller);      }    } finally {      thread.setContextClassLoader(oldLoader);    }    controller.setSourceType("regexp");        //controller.deploy();    return controller;  }  public String toString()  {    if (_config == null)      return "WebAppRegexpDeployGenerator[]";    else      return "WebAppRegexpDeployGenerator[" + _config.getURLRegexp().pattern() + "]";  }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?