servletmapping.java
来自「RESIN 3.2 最新源码」· Java 代码 · 共 277 行
JAVA
277 行
/* * 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.server.dispatch;import com.caucho.config.ConfigELContext;import com.caucho.config.ConfigException;import com.caucho.config.program.ContainerProgram;import com.caucho.el.EL;import com.caucho.el.MapVariableResolver;import com.caucho.server.webapp.WebApp;import com.caucho.util.L10N;import javax.el.ELContext;import javax.servlet.ServletContext;import javax.servlet.ServletException;import java.util.ArrayList;import java.util.HashMap;import java.util.logging.Level;import java.util.regex.*;/** * Configuration for a servlet. */public class ServletMapping extends ServletConfigImpl { private static final L10N L = new L10N(ServletMapping.class); private ArrayList<Mapping> _mappingList = new ArrayList<Mapping>(); private boolean _isStrictMapping; /** * Creates a new servlet mapping object. */ public ServletMapping() { } /** * Sets the url pattern */ public void addURLPattern(String pattern) { if (pattern.indexOf('\n') > -1) throw new ConfigException(L.l("`{0}' cannot contain newline", "url-pattern")); _mappingList.add(new Mapping(pattern, null)); // server/13f4 if (getServletNameDefault() == null) setServletNameDefault(pattern); } /** * Sets the url regexp */ public void addURLRegexp(String pattern) { _mappingList.add(new Mapping(null, pattern)); } /** * True if strict mapping should be enabled. */ public boolean isStrictMapping() { return _isStrictMapping; } /** * Set if strict mapping should be enabled. */ public void setStrictMapping(boolean isStrictMapping) { _isStrictMapping = isStrictMapping; } /** * initialize. */ public void init(ServletMapper mapper) throws ServletException { boolean hasInit = false; if (getServletName() == null) setServletName(getServletNameDefault()); for (int i = 0; i < _mappingList.size(); i++) { Mapping mapping = _mappingList.get(i); String urlPattern = mapping.getUrlPattern(); String urlRegexp = mapping.getUrlRegexp(); if (getServletName() == null && getServletClassName() != null && urlPattern != null) { setServletName(urlPattern); } if (urlPattern != null && ! hasInit) { hasInit = true; super.init(); if (getServletClassName() != null) mapper.getServletManager().addServlet(this); } if (urlPattern != null) { mapper.addUrlMapping(urlPattern, getServletName(), this); } else mapper.addUrlRegexp(urlRegexp, this); } /* if (_urlRegexp == null) { if (getServletName() == null && getServletClassName() != null) { // server/13f4 } } */ } /** * Initialize for a regexp. */ String initRegexp(ServletContext webApp, ServletManager manager, ArrayList<String> vars) throws ServletException { ELContext env = EL.getEnvironment(); HashMap<String,Object> map = new HashMap<String,Object>(); map.put("regexp", vars); ELContext mapEnv = new ConfigELContext(new MapVariableResolver(map)); String rawName = getServletName(); String rawClassName = getServletClassName(); if (rawName == null) rawName = rawClassName; if (rawClassName == null) rawClassName = rawName; try { String servletName = EL.evalString(rawName, mapEnv); if (manager.getServletConfig(servletName) != null) return servletName; String className = EL.evalString(rawClassName, mapEnv); try { WebApp app = (WebApp) getServletContext(); Class cl = Class.forName(className, false, app.getClassLoader()); } catch (ClassNotFoundException e) { log.log(Level.WARNING, e.toString(), e); return null; } ServletConfigImpl config = new ServletConfigImpl(); config.setServletName(servletName); config.setServletClass(className); config.setServletContext(webApp); ContainerProgram program = getInit(); if (program != null) config.setInit(program); config.init(); manager.addServlet(config); return servletName; } catch (RuntimeException e) { throw e; } catch (ServletException e) { throw e; } catch (Throwable e) { throw new ServletException(e); } } /** * Returns a printable representation of the servlet config object. */ public String toString() { StringBuilder builder = new StringBuilder(); builder.append("ServletMapping["); for (int i = 0; i < _mappingList.size(); i++) { Mapping mapping = _mappingList.get(i); if (mapping.getUrlPattern() != null) { builder.append("url-pattern="); builder.append(mapping.getUrlPattern()); builder.append(", "); } else if (mapping.getUrlRegexp() != null) { builder.append("url-regexp="); builder.append(mapping.getUrlRegexp()); builder.append(", "); } } builder.append(", name="); builder.append(getServletName()); builder.append("]"); return builder.toString(); } static class Mapping { private final String _urlPattern; private final String _urlRegexp; Mapping(String urlPattern, String urlRegexp) { _urlPattern = urlPattern; _urlRegexp = urlRegexp; } String getUrlPattern() { return _urlPattern; } String getUrlRegexp() { return _urlRegexp; } public String toString() { return "ServletMapping[" + _urlPattern + ", " + _urlRegexp + "]"; } }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?