📄 context.java
字号:
initializationParameters.put(name, value ); } public Enumeration getInitParameterNames() { return initializationParameters.keys(); } public Object getAttribute(String name) { if (name.startsWith("org.apache.tomcat")) { // XXX XXX XXX XXX Security - servlets may get too much access !!! // right now we don't check because we need JspServlet to // be able to access classloader and classpath if (name.equals("org.apache.tomcat.jsp_classpath")) { String cp= getServletLoader().getClassPath(); return cp; } if( name.equals( "org.apache.tomcat.protection_domain") ) { return getProtectionDomain(); } if(name.equals("org.apache.tomcat.classloader")) { return this.getServletLoader().getClassLoader(); } if( name.equals(FacadeManager.FACADE_ATTRIBUTE)) { if( ! allowAttribute(name) ) return null; return this.getFacadeManager(); } return null; // org.apache.tomcat namespace is reserved in tomcat } else { Object o = attributes.get(name); return attributes.get(name); } } public Enumeration getAttributeNames() { return attributes.keys(); } public void setAttribute(String name, Object object) { attributes.put(name, object); } public void removeAttribute(String name) { attributes.remove(name); } public String getDescription() { return this.description; } public void setDescription(String description) { this.description = description; } public void setIcon( String icon ) { } public boolean isDistributable() { return this.isDistributable; } public void setDistributable(boolean isDistributable) { this.isDistributable = isDistributable; } public void setDistributable(String s) { // XXX } public int getSessionTimeOut() { return this.sessionTimeOut; } public void setSessionTimeOut(int sessionTimeOut) { this.sessionTimeOut = sessionTimeOut; } public FileNameMap getMimeMap() { return mimeTypes; } public void addContentType( String ext, String type) { mimeTypes.addContentType( ext, type ); } public String getErrorPage(int errorCode) { return getErrorPage(String.valueOf(errorCode)); } public void addErrorPage( String errorType, String value ) { this.errorPages.put( errorType, value ); } public String getErrorPage(String errorCode) { return (String)errorPages.get(errorCode); } /** Authentication method, if any specified */ public String getAuthMethod() { return authMethod; } /** Realm to be used */ public String getRealmName() { return realmName; } public String getFormLoginPage() { return formLoginPage; } public String getFormErrorPage() { return formErrorPage; } public void setFormLoginPage( String page ) { formLoginPage=page; } public void setFormErrorPage( String page ) { formErrorPage=page; } public void setLoginConfig( String authMethod, String realmName, String formLoginPage, String formErrorPage) { // System.out.println("Login config: " + authMethod + " " + realmName + " " + // formLoginPage + " " + formErrorPage); this.authMethod=authMethod; this.realmName=realmName; this.formLoginPage=formLoginPage; this.formErrorPage=formErrorPage; } // -------------------- Mappings -------------------- /** * Maps a named servlet to a particular path or extension. * If the named servlet is unregistered, it will be added * and subsequently mapped. * * Note that the order of resolution to handle a request is: * * exact mapped servlet (eg /catalog) * prefix mapped servlets (eg /foo/bar/*) * extension mapped servlets (eg *jsp) * default servlet * */ public void addServletMapping(String path, String servletName) throws TomcatException { if( mappings.get( path )!= null) { log( "Removing duplicate " + path + " -> " + mappings.get(path) ); mappings.remove( path ); Container ct=(Container)containers.get( path ); removeContainer( ct ); } ServletWrapper sw = (ServletWrapper)servlets.get(servletName); if (sw == null) { // Workaround for frequent "bug" in web.xmls // Declare a default mapping log("Mapping with unregistered servlet " + servletName ); sw = addServlet( servletName, servletName ); } if( "/".equals(path) ) defaultServlet = sw; mappings.put( path, sw ); Container map=new Container(); map.setContext( this ); map.setHandler( sw ); map.setPath( path ); contextM.addContainer( map ); containers.put( path, map ); } /** Will add a new security constraint: For all paths: if( match(path) && match(method) && match( transport ) ) then require("roles") This is equivalent with adding a Container with the path, method and transport. If the container will be matched, the request will have to pass the security constraints. */ public void addSecurityConstraint( String path[], String methods[], String roles[], String transport) throws TomcatException { for( int i=0; i< path.length; i++ ) { Container ct=new Container(); ct.setContext( this ); ct.setTransport( transport ); ct.setRoles( roles ); ct.setPath( path[i] ); ct.setMethods( methods ); // XXX check if exists, merge if true. constraints.put( path[i], ct ); //contextM.addSecurityConstraint( this, path[i], ct); contextM.addContainer( ct ); } } public Enumeration getContainers() { return containers.elements(); } public Enumeration getContainerLocations() { return containers.keys(); } public Container getContainer( String path ) { return (Container)containers.get(path); } // return the container associated with this context - // which is also the default container public Container getContainer() { return defaultContainer; } public void removeContainer( Container ct ) { containers.remove(ct.getPath()); }// public ServletWrapper getDefaultServlet() {// if( defaultServlet==null)// defaultServlet=getServletByName(Constants.DEFAULT_SERVLET_NAME );// return defaultServlet;// } // -------------------- Servlets management -------------------- // XXX do we need that ?? /** Remove the servlet with a specific name */ public void removeServletByName(String servletName) throws TomcatException { servlets.remove( servletName ); } public ServletWrapper getServletByName(String servletName) { return (ServletWrapper)servlets.get(servletName); } /** * Add a servlet with the given name to the container. The * servlet will be loaded by the container's class loader * and instantiated using the given class name. * * Called to add a new servlet from web.xml */ public void addServlet(ServletWrapper wrapper) throws TomcatException { wrapper.setContext( this ); String name=wrapper.getServletName(); // System.out.println("Adding servlet " + name + " " + wrapper); // check for duplicates if (servlets.get(name) != null) { log("Removing duplicate servlet " + name + " " + wrapper); removeServletByName(name); // getServletByName(name).destroy(); } servlets.put(name, wrapper); } public ServletWrapper addServlet(String name, String classN) throws TomcatException { ServletWrapper sw = new ServletWrapper(); sw.setContext(this); sw.setServletName(name); if ( classN.startsWith("/")) { sw.setPath(classN); } else { sw.setServletClass(classN); } addServlet( sw ); return sw; } public Enumeration getServletNames() { return servlets.keys(); } // -------------------- Loading and sessions -------------------- public void setServletLoader(ServletLoader loader ) { this.servletL=loader; } public ServletLoader getServletLoader() { return servletL; } /* -------------------- Utils -------------------- */ public void setDebug( int level ) { if(level>0) log( "Set debug to " + level ); debug=level; } public void setDebug( String level ) { try { setDebug( Integer.parseInt(level) ); } catch (Exception e) { log("Trying to set debug to '" + level + "':", e, Logger.ERROR); } } public int getDebug( ) { return debug; } // ------------------- Logging --------------- LogHelper loghelper = new LogHelper("tc_log", this); LogHelper loghelperServlet = new LogHelper("servlet_log", null); /** Internal log method */ public final void log(String msg) { loghelper.log(msg); } /** Internal log method */ public void log(String msg, Throwable t) { loghelper.log(msg, t); } /** Internal log method */ public void log(String msg, Throwable t, int level) { loghelper.log(msg, t, level); } /** User-level log method ( called from a servlet) */ public void logServlet( String msg , Throwable t ) { msg = ("path=\"" + path + "\" :" + msg); loghelperServlet.log(msg, t); } public String toString() { return "Ctx( " + (vhost==null ? "" : vhost + ":" ) + path + " )"; } // -------------------- Facade methods -------------------- public Context getContext(String path) { if (! path.startsWith("/")) { return null; // according to spec, null is returned // if we can't return a servlet, so it's more probable // servlets will check for null than IllegalArgument } // Return null if cross context lookups are not allowed if (!crossContext) return null; // absolute path Request lr=contextM.createRequest( path ); if( vhost != null ) lr.setServerName( vhost );
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -