costin      01/06/12 08:39:27

  Modified:    jasper34/liaison/org/apache/jasper34/servlet
                        JasperLoader.java JspEngineContext.java
                        JspServlet.java
  Log:
  Implement the changes in core and toolbox.
  
  Few changes in JasperLoader to make it independent of jasper ( try to make
  it an independent tool, might be usefull )
  
  Prepare to remove the deps on JasperLoader from JspServlet and start using
  URLClassLoader ( or SimpleClassLoader ) via jdkcompat.
  
  Revision  Changes    Path
  1.2       +42 -15    
jakarta-tomcat-jasper/jasper34/liaison/org/apache/jasper34/servlet/JasperLoader.java
  
  Index: JasperLoader.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-jasper/jasper34/liaison/org/apache/jasper34/servlet/JasperLoader.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- JasperLoader.java 2001/05/28 02:17:58     1.1
  +++ JasperLoader.java 2001/06/12 15:39:24     1.2
  @@ -95,9 +95,10 @@
    * @author Anil K. Vijendran
    * @author Harish Prabandham
    */
  -public class JasperLoader extends JspLoader {
  -//     ClassLoader parent;
  -//     Options options;
  +public class JasperLoader extends ClassLoader {
  +    ClassLoader parent;
  +    String scratchDir;
  +    //Options options;
       Object pd;
   
       /*
  @@ -107,19 +108,45 @@
        super();
       }
   
  -//     public void setParentClassLoader( ClassLoader cl) 
  -//     {
  -//   this.parent = cl;
  -//     }
  -    
  -//     public void setOptions( Options options) {
  -//   this.options = options;
  -//     }
  +    public void setParentClassLoader( ClassLoader cl) 
  +    {
  +     this.parent = cl;
  +    }
  +    
  +    //     public void setOptions( Options options) {
  +    //       this.options = options;
  +    //     }
  +    public void setScratchDir( String s ) {
  +     scratchDir=s;
  +    }
   
       public void setProtectionDomain( Object pd ) {
        this.pd=pd;
       }
  +
  +    protected Vector jars = new Vector();
       
  +    public void addJar(String jarFileName) throws IOException {
  +        if (!jars.contains(jarFileName)) {
  +            ContainerLiaison.message("jsp.message.adding_jar",
  +                              new Object[] { jarFileName },
  +                              Log.INFORMATION);
  +            
  +            jars.addElement(jarFileName);
  +        }
  +    }
  +    
  +    public String getClassPath() {
  +        StringBuffer cpath = new StringBuffer();
  +        String sep = System.getProperty("path.separator");
  +
  +        for(int i = 0; i < jars.size(); i++) {
  +            cpath.append((String)jars.elementAt(i)+sep);
  +        }
  +        
  +        return cpath.toString();
  +    }
  +
       protected synchronized Class loadClass(String name, boolean resolve)
        throws ClassNotFoundException
       {
  @@ -190,7 +217,7 @@
                   return defClass(className, classBytes);
            } else {
                   String fileName = null;
  -                String outputDir = options.getScratchDir().toString();
  +                String outputDir = scratchDir;
               
                   if (className.indexOf('$', end) != -1) {
                       // this means we're loading an inner class
  @@ -210,14 +237,14 @@
                    */
                classBytes = loadClassDataFromFile(fileName);
                   if( classBytes == null ) {
  -                    throw new ClassNotFoundException(Constants.getString(
  +                    throw new ClassNotFoundException(ContainerLiaison.getString(
                                                "jsp.error.unable.loadclass", 
                                                 new Object[] {className})); 
                   }
                   return defClass(className, classBytes);
               }
        } catch (Exception ex) {
  -            throw new ClassNotFoundException(Constants.getString(
  +            throw new ClassNotFoundException(ContainerLiaison.getString(
                                             "jsp.error.unable.loadclass", 
                                              new Object[] {className}));
        }
  @@ -318,7 +345,7 @@
       }
   
       public String toString() {
  -        Object obj = (options==null)?null: options.getScratchDir();
  +        Object obj = scratchDir;
           String s = (obj==null)?"null":obj.toString();
            return "JspLoader@"+hashCode()+"( " + s  + " ) / " + parent;
       }
  
  
  
  1.5       +15 -32    
jakarta-tomcat-jasper/jasper34/liaison/org/apache/jasper34/servlet/JspEngineContext.java
  
  Index: JspEngineContext.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-jasper/jasper34/liaison/org/apache/jasper34/servlet/JspEngineContext.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- JspEngineContext.java     2001/06/07 06:56:14     1.4
  +++ JspEngineContext.java     2001/06/12 15:39:25     1.5
  @@ -78,17 +78,15 @@
    * engine. This is a per-request/per-context data structure. Some of
    * the instance variables are set at different points.
    *
  - * JspLoader creates this object and passes this off to the "compiler"
  - * subsystem, which then initializes the rest of the variables. 
  - *
    * @author Anil K. Vijendran
    * @author Harish Prabandham
    */
  -public class JspEngineContext implements JspCompilationContext {
  +public class JspEngineContext extends ContainerLiaison
  +{
       JspReader reader;
       ServletWriter writer;
       ServletContext context;
  -    JasperLoader loader;
  +    ClassLoader loader;
       String classpath; // for compiling JSPs.
       boolean isErrPage;
       String jspFile;
  @@ -101,7 +99,7 @@
       HttpServletResponse res;
       
   
  -    public JspEngineContext(JasperLoader loader, String classpath, 
  +    public JspEngineContext(ClassLoader loader, String classpath, 
                               ServletContext context, String jspFile, 
                               boolean isErrPage, Options options, 
                               HttpServletRequest req, HttpServletResponse res) 
  @@ -135,7 +133,7 @@
        * The classpath that is passed off to the Java compiler. 
        */
       public String getClassPath() {
  -        return loader.getClassPath() + classpath;
  +        return ((JasperLoader)loader).getClassPath() + classpath;
       }
       
       /**
  @@ -167,9 +165,9 @@
           return loader;
       }
   
  -    public void addJar( String jar ) throws IOException  {
  -     loader.addJar( jar );
  -    }
  +//     public void addJar( String jar ) throws IOException  {
  +//   loader.addJar( jar );
  +//     }
   
       /**
        * Are we processing something that has been declared as an
  @@ -284,33 +282,18 @@
        * jspCompilerPlugin is not specified or is not available, the 
        * SunJavaCompiler is used.
        */
  -    public Compiler createCompiler() throws JasperException {
  +    public JavaCompiler getJavaCompiler() throws JasperException {
        String compilerPath = options.getJspCompilerPath();
  -     Class jspCompilerPlugin = options.getJspCompilerPlugin();
  -        JavaCompiler javac;
  -
  -     if (jspCompilerPlugin != null) {
  -            try {
  -                javac = (JavaCompiler) jspCompilerPlugin.newInstance();
  -            } catch (Exception ex) {
  -             Constants.message("jsp.warning.compiler.class.cantcreate",
  -                               new Object[] { jspCompilerPlugin, ex }, 
  -                               Log.FATAL);
  -                javac = new SunJavaCompiler();
  -         }
  -     } else {
  -            javac = new SunJavaCompiler();
  -     }
  +     String jspCompilerPlugin = options.getJspCompilerPlugin();
   
  +     JavaCompiler javac=JavaCompiler.createJavaCompiler( this,
  +                                                         jspCompilerPlugin);
           if (compilerPath != null)
               javac.setCompilerPath(compilerPath);
   
  -        Compiler jspCompiler = new JspCompiler(this);
  -     jspCompiler.setJavaCompiler(javac);
  -         
  -        return jspCompiler;
  +     return javac;
       }
  -    
  +
       /** 
        * Get the full value of a URI relative to this compilations context
        */
  @@ -372,6 +355,6 @@
        TagLibReader reader=new TagLibReader( this, libs );
        reader.readTagLib( tl, prefix, uri );
       }
  -
  +    
      
   }
  
  
  
  1.4       +91 -62    
jakarta-tomcat-jasper/jasper34/liaison/org/apache/jasper34/servlet/JspServlet.java
  
  Index: JspServlet.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-jasper/jasper34/liaison/org/apache/jasper34/servlet/JspServlet.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- JspServlet.java   2001/06/09 21:26:20     1.3
  +++ JspServlet.java   2001/06/12 15:39:25     1.4
  @@ -76,6 +76,8 @@
   import org.apache.jasper34.runtime.*;
   import org.apache.jasper34.core.*;
   import org.apache.jasper34.generator.*;
  +import org.apache.jasper34.jsptree.*;
  +import org.apache.jasper34.liaison.*;
   import org.apache.jasper34.core.Compiler;
   
   import org.apache.tomcat.util.log.Log;
  @@ -89,7 +91,7 @@
   public class JspServlet extends HttpServlet {
   
       Log loghelper = Log.getLog("JASPER_LOG", "JspServlet");
  -
  +    
       class JspServletWrapper {
           Servlet theServlet;
        String jspUri;
  @@ -138,15 +140,15 @@
               } else 
                   accordingto = "according to the Servlet Engine";
               
  -            Constants.message("jsp.message.cp_is", 
  +            ContainerLiaison.message("jsp.message.cp_is", 
                                 new Object[] { 
                                     accordingto,
                                     cp == null ? "" : cp
                                 }, 
                                 Log.INFORMATION);
   
  -            if (loadJSP(jspUri, cp, isErrorPage, req, res) 
  -                    || theServlet == null) {
  +            if ( loadJSP(jspUri, cp, isErrorPage, req, res) 
  +              || theServlet == null) {
                   load();
               }
        }
  @@ -177,14 +179,14 @@
                try {
                       if (insecure_TMI) {
                           response.sendError(HttpServletResponse.SC_NOT_FOUND, 
  -                                           Constants.getString
  +                                           ContainerLiaison.getString
                                              ("jsp.error.file.not.found.TMI", 
                                               new Object[] {
                                                   ex.getMessage()
                                               }));
                       } else {
                           response.sendError(HttpServletResponse.SC_NOT_FOUND, 
  -                                           Constants.getString
  +                                           ContainerLiaison.getString
                                              ("jsp.error.file.not.found", 
                                               new Object[] {
                                                   // Too Much Information -- 
ex.getMessage()
  @@ -192,17 +194,17 @@
                       }
                } catch (IllegalStateException ise) {
                       // logs are presumed to be secure, thus the TMI info can be 
logged
  -                 Constants.jasperLog.log(Constants.getString
  -                                         ("jsp.error.file.not.found.TMI",
  +                 ContainerLiaison.message(ContainerLiaison.getString
  +                                          ("jsp.error.file.not.found.TMI",
                                             new Object[] {
                                                 ex.getMessage()
  -                                          }), ex,
  +                                          }), 
                                            Log.ERROR);
                    // rethrow FileNotFoundException so someone higher up can handle
                       if (insecure_TMI)
                           throw ex;
                       else
  -                     throw new FileNotFoundException(Constants.getString
  +                     throw new FileNotFoundException(ContainerLiaison.getString
                                              ("jsp.error.file.not.found", 
                                               new Object[] {
                                                   // Too Much Information -- 
ex.getMessage()
  @@ -223,10 +225,10 @@
       protected Hashtable jsps = new Hashtable();
       //    protected Hashtable loadedJSPs = new Hashtable();
       protected ServletConfig config;
  -    protected JasperLoader loader;
  +    protected ClassLoader loader;
       protected Options options;
       protected ClassLoader parentClassLoader;
  -    protected ServletEngine engine;
  +    //    protected ServletEngine engine;
       protected String serverInfo;
       
       /** Set to true to provide Too Much Information on errors */
  @@ -250,7 +252,7 @@
        this.context = config.getServletContext();
           this.serverInfo = context.getServerInfo();
           
  -     options = new EmbededServletOptions(config, context);
  +     options = new OptionsServletConfig(config, context);
   
        parentClassLoader = (ClassLoader) 
context.getAttribute(Constants.SERVLET_CLASS_LOADER);
        if (parentClassLoader == null)
  @@ -258,13 +260,13 @@
               
        // getClass().getClassLoader() returns null in JDK 1.1.6/1.1.8
        if (parentClassLoader != null) {
  -            Constants.message("jsp.message.parent_class_loader_is", 
  +            ContainerLiaison.message("jsp.message.parent_class_loader_is", 
                                 new Object[] {
                                     parentClassLoader.toString()
                                 }, Log.DEBUG);
               }
        else {
  -            Constants.message("jsp.message.parent_class_loader_is", 
  +            ContainerLiaison.message("jsp.message.parent_class_loader_is", 
                                 new Object[] {
                                     "<none>"
                                 }, Log.DEBUG);
  @@ -282,18 +284,18 @@
            if( loader==null )
                loader = new JasperLoader();
   
  -         loader.setParentClassLoader(parentClassLoader);
  -         loader.setOptions(options);
  +         ((JasperLoader)loader).setParentClassLoader(parentClassLoader);
  +         ((JasperLoader)loader).setScratchDir(options.getScratchDir().toString());
            Object pd=context.getAttribute("org.apache.tomcat.protection_domain");
  -         loader.setProtectionDomain( pd );
  +         ((JasperLoader)loader).setProtectionDomain( pd );
        }
        if (firstTime) {
            firstTime = false;
  -         Constants.message("jsp.message.scratch.dir.is", 
  +         ContainerLiaison.message("jsp.message.scratch.dir.is", 
                              new Object[] { 
                                  options.getScratchDir().toString() 
                              }, Log.INFORMATION );
  -         Constants.message("jsp.message.dont.modify.servlets", Log.INFORMATION);
  +         ContainerLiaison.message("jsp.message.dont.modify.servlets", 
Log.INFORMATION);
            JspFactory.setDefaultFactory(new JspFactoryImpl());
        }
       }
  @@ -365,25 +367,25 @@
   
               boolean precompile = preCompile(request);
   
  -         Log jasperLog = Constants.jasperLog;
  +//       Log jasperLog = Constants.jasperLog;
            
  -            if (jasperLog != null &&
  -             jasperLog.getLevel() >= Log.INFORMATION)
  -             {
  -                 jasperLog.log("JspEngine --> "+jspUri);
  -                 jasperLog.log("\t     ServletPath: "+request.getServletPath());
  -                 jasperLog.log("\t        PathInfo: "+request.getPathInfo());
  -                 jasperLog.log("\t        RealPath: "
  -                               
+getServletConfig().getServletContext().getRealPath(jspUri));
  -                 jasperLog.log("\t      RequestURI: "+request.getRequestURI());
  -                 jasperLog.log("\t     QueryString: "+request.getQueryString());
  -                 jasperLog.log("\t  Request Params: ");
  -                 Enumeration e = request.getParameterNames();
  -                 while (e.hasMoreElements()) {
  -                     String name = (String) e.nextElement();
  -                     jasperLog.log("\t\t "+name+" = "+request.getParameter(name));
  -                 }
  -             }
  +//             if (jasperLog != null &&
  +//           jasperLog.getLevel() >= Log.INFORMATION)
  +//           {
  +//               jasperLog.log("JspEngine --> "+jspUri);
  +//               jasperLog.log("\t     ServletPath: "+request.getServletPath());
  +//               jasperLog.log("\t        PathInfo: "+request.getPathInfo());
  +//               jasperLog.log("\t        RealPath: "
  +//                             
+getServletConfig().getServletContext().getRealPath(jspUri));
  +//               jasperLog.log("\t      RequestURI: "+request.getRequestURI());
  +//               jasperLog.log("\t     QueryString: "+request.getQueryString());
  +//               jasperLog.log("\t  Request Params: ");
  +//               Enumeration e = request.getParameterNames();
  +//               while (e.hasMoreElements()) {
  +//                   String name = (String) e.nextElement();
  +//                   jasperLog.log("\t\t "+name+" = "+request.getParameter(name));
  +//               }
  +//           }
               serviceJspFile(request, response, jspUri, null, precompile);
        } catch (RuntimeException e) {
            throw e;
  @@ -404,15 +406,14 @@
       }
   
       public void destroy() {
  -     if (Constants.jasperLog != null)
  -         Constants.jasperLog.log("JspServlet.destroy()", Log.INFORMATION);
  +     //      if (Constants.jasperLog != null)
  +     ContainerLiaison.message("JspServlet.destroy()", Log.INFORMATION);
   
        Enumeration servlets = jsps.elements();
        while (servlets.hasMoreElements()) 
            ((JspServletWrapper) servlets.nextElement()).destroy();
       }
   
  -
       /*  Check if we need to reload a JSP page.
        *
        *  Side-effect: re-compile the JSP page.
  @@ -426,9 +427,11 @@
       {
        // Loader knows how to set the right priviledges, and call
        // doLoadeJsp
  -     return loader.loadJSP( this,jspUri, classpath, isErrorPage, req, res );
  +     return ((JasperLoader)loader).loadJSP( this,jspUri, classpath, isErrorPage, 
req, res );
       }
   
  +
  +
       /*  Check if we need to reload a JSP page.
        *
        *  Side-effect: re-compile the JSP page.
  @@ -446,44 +449,61 @@
        }
        //      Class jspClass = (Class) loadedJSPs.get(jspUri);
        boolean firstTime = jsw.servletClass == null;
  -   JspCompilationContext ctxt = new JspEngineContext(loader, classpath,
  +   JspEngineContext ctxt = new JspEngineContext(loader, classpath,
                                                        context, jspUri, 
                                                        isErrorPage, options,
                                                        req, res);
  +   
        boolean outDated = false; 
  +     ContainerLiaison containerL=ctxt;
  +     
  +        Compiler compiler = new Compiler(ctxt);
  +     //compiler.setJavaCompiler(ctxt.getJavaCompiler());
   
  -        Compiler compiler = ctxt.createCompiler();
  +     ManglerOld mangler=new ManglerOld();
  +        JspPageInfo pageInfo=new JspPageInfo( ctxt, options,
  +                                           mangler );
  +       
  +     pageInfo.setJspFile( jspUri );
  +     pageInfo.setErrorPage( isErrorPage );
  +     
  +     mangler.init(pageInfo.getJspFile(), containerL.getOutputDir());
  +     //      compiler.setMangler( mangler );
  +     
           
           try {
  -            outDated = compiler.isOutDated();
  +            outDated = isOutDated( containerL, pageInfo.getJspFile(), mangler);
               if ( (jsw.servletClass == null) || outDated ) {
                   synchronized ( this ) {
                       if ((jsw.servletClass == null) ||
  -                     (compiler.isOutDated() ))  {
  -                        outDated = compiler.compile();
  +                     ( isOutDated(containerL, pageInfo.getJspFile(),
  +                                  mangler) ))  {
  +                        outDated = compiler.compile(pageInfo,
  +                                                 ctxt.getJavaCompiler());
                       }
                }
               }
           } catch (FileNotFoundException ex) {
  -                       compiler.removeGeneratedFiles();
  +         compiler.removeGeneratedFiles(pageInfo);
               throw ex;
           } catch (JasperException ex) {
               throw ex;
           } catch (Exception ex) {
  -         throw new JasperException(Constants.getString("jsp.error.unable.compile"),
  +         throw new 
JasperException(ContainerLiaison.getString("jsp.error.unable.compile"),
                                         ex);
        }
   
        // Reload only if it's outdated
        if((jsw.servletClass == null) || outDated) {
            try {
  -             if( null ==ctxt.getServletClassName() ) {
  -                 compiler.computeServletClassName();
  -             }
  -             jsw.servletClass = loader.loadClass(ctxt.getFullClassName());
  +//           if( null ==ctxt.getServletClassName() ) {
  +//               compiler.computeServletClassName();
  +//           }
  +             jsw.servletClass =
  +                 loader.loadClass(pageInfo.getFullClassName());
                           //loadClass(ctxt.getFullClassName(), true);
            } catch (ClassNotFoundException cex) {
  -             throw new 
JasperException(Constants.getString("jsp.error.unable.load"), 
  +             throw new 
JasperException(ContainerLiaison.getString("jsp.error.unable.load"), 
                                          cex);
            }
            
  @@ -493,18 +513,28 @@
        return outDated;
       }
   
  -        /**
  +    /**
        * Determines whether the current JSP class is older than the JSP file
        * from whence it came
        */
  -    public boolean isOutDated(File jsp, JspCompilationContext ctxt,
  -                           Mangler mangler ) {
  +    public boolean isOutDated(ContainerLiaison containerL, String jspS,
  +                           Mangler mangler)
  +    {
  +     boolean outDated=false;
  +     File jsp=new File( jspS );
           File jspReal = null;
  -     boolean outDated;
  -     
  -        jspReal = new File(ctxt.getRealPath(jsp.getPath()));
  +
  +        String realPath = containerL.getRealPath(jsp.getPath());
  +        if (realPath == null)
  +            return true;
   
  -        File classFile = new File(mangler.getClassFileName());
  +        jspReal = new File(realPath);
  +     
  +     if(!jspReal.exists()){
  +         return true;
  +     }
  +     
  +     File classFile = new File(mangler.getClassFileName());
           if (classFile.exists()) {
               outDated = classFile.lastModified() < jspReal.lastModified();
           } else {
  @@ -513,5 +543,4 @@
   
           return outDated;
       }
  -
   }
  
  
  

Reply via email to