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 Detail

      • 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 Detail

      • XJspCompiler

        public XJspCompiler()
    • Method Detail

      • 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
      • 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