FileDocCategorySizeDatePackage
JasperLoader.javaAPI DocApache Tomcat 6.0.146697Fri Jul 20 04:20:36 BST 2007org.apache.jasper.servlet

JasperLoader

public class JasperLoader extends URLClassLoader
Class loader for loading servlet class files (corresponding to JSP files) and tag handler class files (corresponding to tag files).
author
Anil K. Vijendran
author
Harish Prabandham
author
Jean-Francois Arcand

Fields Summary
private PermissionCollection
permissionCollection
private CodeSource
codeSource
private String
className
private ClassLoader
parent
private SecurityManager
securityManager
Constructors Summary
public JasperLoader(URL[] urls, ClassLoader parent, PermissionCollection permissionCollection, CodeSource codeSource)

	super(urls, parent);
	this.permissionCollection = permissionCollection;
	this.codeSource = codeSource;
	this.parent = parent;
	this.securityManager = System.getSecurityManager();
    
Methods Summary
public final java.security.PermissionCollectiongetPermissions(java.security.CodeSource codeSource)
Get the Permissions for a CodeSource. Since this ClassLoader is only used for a JSP page in a web application context, we just return our preset PermissionCollection for the web app context.

param
codeSource Code source where the code was loaded from
return
PermissionCollection for CodeSource

        return permissionCollection;
    
public java.io.InputStreamgetResourceAsStream(java.lang.String name)
Delegate to parent

see
java.lang.ClassLoader#getResourceAsStream(java.lang.String)

        InputStream is = parent.getResourceAsStream(name);
        if (is == null) {
            URL url = findResource(name);
            if (url != null) {
                try {
                    is = url.openStream();
                } catch (IOException e) {
                    is = null;
                }
            }
        }
        return is;
    
public java.lang.ClassloadClass(java.lang.String name)
Load the class with the specified name. This method searches for classes in the same manner as loadClass(String, boolean) with false as the second argument.

param
name Name of the class to be loaded
exception
ClassNotFoundException if the class was not found


        return (loadClass(name, false));
    
public java.lang.ClassloadClass(java.lang.String name, boolean resolve)
Load the class with the specified name, searching using the following algorithm until it finds and returns the class. If the class cannot be found, returns ClassNotFoundException.
  • Call findLoadedClass(String) to check if the class has already been loaded. If it has, the same Class object is returned.
  • If the delegate property is set to true, call the loadClass() method of the parent class loader, if any.
  • Call findClass() to find this class in our locally defined repositories.
  • Call the loadClass() method of our parent class loader, if any.
If the class was found using the above steps, and the resolve flag is true, this method will then call resolveClass(Class) on the resulting Class object.

param
name Name of the class to be loaded
param
resolve If true then resolve the class
exception
ClassNotFoundException if the class was not found


        Class clazz = null;                
                                           
        // (0) Check our previously loaded class cache
        clazz = findLoadedClass(name);     
        if (clazz != null) {               
            if (resolve)                   
                resolveClass(clazz);       
            return (clazz);        
        }                          
                          
        // (.5) Permission to access this class when using a SecurityManager
        if (securityManager != null) {     
            int dot = name.lastIndexOf('.");
            if (dot >= 0) {                
                try {        
                    // Do not call the security manager since by default, we grant that package.
                    if (!"org.apache.jasper.runtime".equalsIgnoreCase(name.substring(0,dot))){
                        securityManager.checkPackageAccess(name.substring(0,dot));
                    }
                } catch (SecurityException se) {
                    String error = "Security Violation, attempt to use " +
                        "Restricted Class: " + name;
                    se.printStackTrace();
                    throw new ClassNotFoundException(error);
                }                          
            }                              
        }

	if( !name.startsWith(Constants.JSP_PACKAGE_NAME) ) {
            // Class is not in org.apache.jsp, therefore, have our
            // parent load it
            clazz = parent.loadClass(name);            
	    if( resolve )
		resolveClass(clazz);
	    return clazz;
	}

	return findClass(name);