Class XJspCompiler


public class XJspCompiler
extends JDTCompiler
Class that enabled compilation of custom JSP pages that are part of an extension that uses classes from the extension JAR file (eg. a JAR file in the /WEB-INF/extensions directory).

To make this compiler work the following is required:

  • The JSP file must have a '.xjsp' extension.
  • This compiler class must be installed in Tomcat's /lib directory.
  • The '.xjsp' extensions must be mapped to the regular JSP servlet with the 'compilerClass' parameter set to this class.
Note! This feature is experimental. We only test it at unregular intervals and since it depends on internal implementation details of Tomcat it may or may not work with future or older versions of Tomcat.
Version:
2.7
Author:
nicklas
Last modified
$Date:2008-03-20 12:15:25 +0100 (Thu, 20 Mar 2008) $
  • Field Details

    • RESOURCES_URL

      public static final String RESOURCES_URL
      The location where the extensions resources are extracted.
      See Also:
      Constant Field Values
    • PATH_MATCH

      private static final Pattern PATH_MATCH
      Path to JSP must match: /extensions/[jar-file-name]/[jsp-path].xjsp group(1) = JAR name, group(2) = JSP path
    • log

      private final Log log
    • pluginsDir

      private File pluginsDir
    • isXJsp

      private boolean isXJsp
    • extensionsJar

      private File extensionsJar
    • lastModified

      private long lastModified
  • Constructor Details

    • XJspCompiler

      public XJspCompiler()
  • Method Details

    • init

      public void init​(JspCompilationContext ctxt, JspServletWrapper jsw)
      Initialises the compiler. The JSP name is matched against the required pattern and the name of the extensions JAR file is extracted from the request path.
      Overrides:
      init in class Compiler
    • compile

      public void compile​(boolean compileClass, boolean jspcMode) throws FileNotFoundException, JasperException, Exception
      Called when a JSP page needs recompiling. We check if the extension JAR file has been modified and update the class loader if it has.
      Overrides:
      compile in class Compiler
      Throws:
      FileNotFoundException
      JasperException
      Exception
    • isOutDated

      public boolean isOutDated​(boolean checkClass)
      Checks if the extensions JAR file has been modified. If not, calls super.isOutDated(checkClass)
      Overrides:
      isOutDated in class Compiler
    • setContextClassLoader

      protected void setContextClassLoader() throws Exception
      Sets the context class loader if this JSP page is an extension JSP page and if the extensions JAR file has been modified since the last time the class loader was set. This method does nothing if the JSP file is not an extensions JSP file, or if the JAR file hasn't changed since the last use.
      Throws:
      Exception
    • getExtensionClassLoader

      protected URLClassLoader getExtensionClassLoader() throws Exception
      Get a class loader that can load classes from the current web application as well as the extensions JAR file. The class loader for the current web application can be found in JspRuntimeContext.getParentClassLoader(). The extensions class loader is loaded from JarClassLoader in BASE.
      Throws:
      Exception
    • getWebAppClassLoader

      protected ClassLoader getWebAppClassLoader()
      Get the class loader for the web application this JSP is located in. Default implementation returns JspRuntimeContext.getParentClassLoader()
    • getPluginsDir

      protected File getPluginsDir()
      Get the path to the plug-in directory from BASE.
      Since:
      3.0