⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 serverarrayvalue.java

📁 RESIN 3.2 最新源码
💻 JAVA
字号:
/* * 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 Software Foundation, Inc. *   59 Temple Place, Suite 330 *   Boston, MA 02111-1307  USA * * @author Scott Ferguson */package com.caucho.quercus.env;import com.caucho.quercus.QuercusRequestAdapter;import javax.servlet.http.HttpServletRequest;import java.util.Enumeration;import java.util.Map;import java.util.Set;/** * Represents the server */public class ServerArrayValue extends ArrayValueImpl {  private static final StringValue SERVER_ADDR_V    = new StringBuilderValue("SERVER_ADDR");  private static final StringValue SERVER_NAME_V    = new StringBuilderValue("SERVER_NAME");  private static final StringValue SERVER_PORT_V    = new StringBuilderValue("SERVER_PORT");  private static final StringValue REMOTE_HOST_V    = new StringBuilderValue("REMOTE_HOST");  private static final StringValue REMOTE_ADDR_V    = new StringBuilderValue("REMOTE_ADDR");  private static final StringValue REMOTE_PORT_V    = new StringBuilderValue("REMOTE_PORT");    private static final StringValue DOCUMENT_ROOT_V    = new StringBuilderValue("DOCUMENT_ROOT");    private static final StringValue SERVER_SOFTWARE_V    = new StringBuilderValue("SERVER_SOFTWARE");    private static final StringValue SERVER_PROTOCOL_V    = new StringBuilderValue("SERVER_PROTOCOL");  private static final StringValue REQUEST_METHOD_V    = new StringBuilderValue("REQUEST_METHOD");  private static final StringValue QUERY_STRING_V    = new StringBuilderValue("QUERY_STRING");    private static final StringValue REQUEST_URI_V    = new StringBuilderValue("REQUEST_URI");  private static final StringValue SCRIPT_NAME_V    = new StringBuilderValue("SCRIPT_NAME");  private static final StringValue SCRIPT_FILENAME_V    = new StringBuilderValue("SCRIPT_FILENAME");  private static final StringValue PATH_INFO_V    = new StringBuilderValue("PATH_INFO");  private static final StringValue PATH_TRANSLATED_V    = new StringBuilderValue("PATH_TRANSLATED");    private static final StringValue PHP_SELF_V    = new StringBuilderValue("PHP_SELF");    private static final StringValue PHP_AUTH_USER_V    = new StringBuilderValue("PHP_AUTH_USER");    private static final StringValue AUTH_TYPE_V    = new StringBuilderValue("AUTH_TYPE");    private static final StringValue HTTPS_V    = new StringBuilderValue("HTTPS");    private static final StringValue HTTP_HOST_V    = new StringBuilderValue("HTTP_HOST");    private final Env _env;    private boolean _isFilled;  public ServerArrayValue(Env env)  {    _env = env;  }    /**   * Converts to an object.   */  public Object toObject()  {    return null;  }  /**   * Adds a new value.   */  public Value put(Value key, Value value)  {    if (! _isFilled)      fillMap();    return super.put(key, value);  }  /**   * Adds a new value.   */  public Value put(Value value)  {    if (! _isFilled)      fillMap();    return super.put(value);  }  /**   * Gets a new value.   */  public Value get(Value key)  {    if (! _isFilled)      fillMap();    return super.get(key);  }    /**   * Returns the array ref.   */  public Var getRef(Value key)  {    if (! _isFilled)      fillMap();        return super.getRef(key);  }    /**   * Copy for assignment.   */  public Value copy()  {    if (! _isFilled)      fillMap();        return new ArrayValueImpl(this);  }  /**   * Returns an iterator of the entries.   */  public Set<Map.Entry<Value,Value>> entrySet()  {    if (! _isFilled)      fillMap();        return super.entrySet();  }  /**   * Convenience for lib.   */  public void put(String key, String value)  {    if (! _isFilled)      fillMap();    super.put(_env.createString(key), _env.createString(value));  }  /**   * Prints the value.   * @param env   */  public void print(Env env)  {    env.print("Array");  }  /**   * Fills the map.   */  private void fillMap()  {    if (_isFilled)      return;    _isFilled = true;    for (Map.Entry<String,String> entry: System.getenv().entrySet()) {      super.put(_env.createString(entry.getKey()),		_env.createString(entry.getValue()));    }    for (Map.Entry<Value,Value> entry:        _env.getQuercus().getServerEnvMap().entrySet()) {      super.put(entry.getKey(), entry.getValue());    }        HttpServletRequest request = _env.getRequest();    if (request != null) {      super.put(SERVER_ADDR_V,                _env.createString(request.getLocalAddr()));      super.put(SERVER_NAME_V,                _env.createString(request.getServerName()));      super.put(SERVER_PORT_V,                new LongValue(request.getServerPort()));      super.put(REMOTE_HOST_V,                _env.createString(request.getRemoteHost()));      super.put(REMOTE_ADDR_V,                _env.createString(request.getRemoteAddr()));      super.put(REMOTE_PORT_V,                new LongValue(request.getRemotePort()));      // Drupal's optional activemenu plugin only works on Apache servers!      // bug at http://drupal.org/node/221867      super.put(SERVER_SOFTWARE_V,                _env.createString("Apache PHP Quercus("                                  + _env.getQuercus().getVersion()                                  + ")"));            super.put(SERVER_PROTOCOL_V,                _env.createString(request.getProtocol()));      super.put(REQUEST_METHOD_V,                _env.createString(request.getMethod()));      String queryString = QuercusRequestAdapter.getPageQueryString(request);      String requestURI = QuercusRequestAdapter.getPageURI(request);      String servletPath = QuercusRequestAdapter.getPageServletPath(request);      String pathInfo = QuercusRequestAdapter.getPagePathInfo(request);      String contextPath = QuercusRequestAdapter.getPageContextPath(request);      if (queryString != null) {        super.put(QUERY_STRING_V,                  _env.createString(queryString));      }      // XXX: a better way?      // getRealPath() returns a native path      // need to convert windows paths to resin paths      String root = request.getRealPath("/");      if (root.indexOf('\\') >= 0) {        root = root.replace('\\', '/');        root = '/' + root;      }            super.put(DOCUMENT_ROOT_V,                _env.createString(root));      super.put(SCRIPT_NAME_V,                _env.createString(contextPath +                                    servletPath));      if (queryString != null)        requestURI = requestURI + '?' + queryString;      super.put(REQUEST_URI_V,                _env.createString(requestURI));      super.put(SCRIPT_FILENAME_V,                _env.createString(request.getRealPath(servletPath)));      if (pathInfo != null) {        super.put(PATH_INFO_V,                  _env.createString(pathInfo));        super.put(PATH_TRANSLATED_V,                  _env.createString(request.getRealPath(pathInfo)));      }      if (request.isSecure())        super.put(HTTPS_V, _env.createString("on"));      if (pathInfo == null)        super.put(PHP_SELF_V, _env.createString(contextPath + servletPath));      else        super.put(PHP_SELF_V, _env.createString(contextPath + servletPath + pathInfo));      if (request.getAuthType() != null) {	super.put(AUTH_TYPE_V, _env.createString(request.getAuthType()));	if (request.getRemoteUser() != null) {	  super.put(PHP_AUTH_USER_V,		    _env.createString(request.getRemoteUser()));	}      }      Enumeration e = request.getHeaderNames();      while (e.hasMoreElements()) {        String key = (String) e.nextElement();        String value = request.getHeader(key);        if (key.equalsIgnoreCase("Host")) {          super.put(HTTP_HOST_V, _env.createString(value));        }        else {          super.put(convertHttpKey(key), _env.createString(value));        }      }    }  }  /**   * Converts a header key to HTTP_   */  private StringValue convertHttpKey(String key)  {    StringValue sb = _env.createUnicodeBuilder();    sb.append("HTTP_");    int len = key.length();    for (int i = 0; i < len; i++) {      char ch = key.charAt(i);      if (Character.isLowerCase(ch))	sb.append(Character.toUpperCase(ch));      else if (ch == '-')	sb.append('_');      else	sb.append(ch);    }    return sb;  }    //  // Java serialization code  //    private Object writeReplace()  {    if (! _isFilled)      fillMap();        return new ArrayValueImpl(this);  }}

⌨️ 快捷键说明

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