Class JspC

  • All Implemented Interfaces:
    java.lang.Cloneable, Options

    public class JspC
    implements Options
    Shell for the jspc compiler. Handles all options associated with the command line and creates compilation contexts which it then compiles according to the specified options. This version can process files from a _single_ webapp at once, i.e. a single docbase can be specified. It can be used as an Ant task using:
       <taskdef classname="org.apache.jasper.JspC" name="jasper" >
              <pathelement location="${java.home}/../lib/tools.jar"/>
              <fileset dir="${ENV.CATALINA_HOME}/lib">
                  <include name="*.jar"/>
              <path refid="myjars"/>
      <jasper verbose="0"
               outputDir="${webapp.dir}/${}/WEB-INF/src/my/package" />
    Danno Ferrin, Pierre Delisle, Costin Manolache, Yoav Shapira
    • Field Detail


        public static final java.lang.String DEFAULT_IE_CLASS_ID
        See Also:
        Constant Field Values

        protected static final java.lang.String SWITCH_OUTPUT_DIR
        See Also:
        Constant Field Values

        protected static final java.lang.String SWITCH_PACKAGE_NAME
        See Also:
        Constant Field Values

        protected static final java.lang.String SWITCH_CLASS_NAME
        See Also:
        Constant Field Values

        protected static final java.lang.String SWITCH_FULL_STOP
        See Also:
        Constant Field Values

        protected static final java.lang.String SWITCH_FAIL_FAST
        See Also:
        Constant Field Values

        protected static final java.lang.String SWITCH_URI_BASE
        See Also:
        Constant Field Values

        protected static final java.lang.String SWITCH_URI_ROOT
        See Also:
        Constant Field Values

        protected static final java.lang.String SWITCH_FILE_WEBAPP
        See Also:
        Constant Field Values

        protected static final java.lang.String SWITCH_WEBAPP_INC
        See Also:
        Constant Field Values

        protected static final java.lang.String SWITCH_WEBAPP_FRG
        See Also:
        Constant Field Values

        protected static final java.lang.String SWITCH_WEBAPP_XML
        See Also:
        Constant Field Values

        protected static final java.lang.String SWITCH_WEBAPP_XML_ENCODING
        See Also:
        Constant Field Values

        protected static final java.lang.String SWITCH_ADD_WEBAPP_XML_MAPPINGS
        See Also:
        Constant Field Values

        protected static final java.lang.String SWITCH_XPOWERED_BY
        See Also:
        Constant Field Values

        protected static final java.lang.String SWITCH_TRIM_SPACES
        See Also:
        Constant Field Values

        protected static final java.lang.String SWITCH_CLASSPATH
        See Also:
        Constant Field Values

        protected static final java.lang.String SWITCH_ENCODING
        See Also:
        Constant Field Values

        protected static final java.lang.String SWITCH_DUMP_SMAP
        See Also:
        Constant Field Values

        protected static final java.lang.String SWITCH_VALIDATE_TLD
        See Also:
        Constant Field Values

        protected static final java.lang.String SWITCH_VALIDATE_XML
        See Also:
        Constant Field Values

        protected static final java.lang.String SWITCH_NO_BLOCK_EXTERNAL
        See Also:
        Constant Field Values

        protected static final java.lang.String SWITCH_NO_STRICT_QUOTE_ESCAPING
        See Also:
        Constant Field Values

        protected static final java.lang.String SWITCH_QUOTE_ATTRIBUTE_EL
        See Also:
        Constant Field Values

        protected static final java.lang.String SWITCH_NO_QUOTE_ATTRIBUTE_EL
        See Also:
        Constant Field Values

        protected static final java.lang.String SWITCH_THREAD_COUNT
        See Also:
        Constant Field Values
      • insertBefore

        protected static final java.util.Set<java.lang.String> insertBefore
      • classPath

        protected java.lang.String classPath
      • loader

        protected java.lang.ClassLoader loader
      • genStringAsCharArray

        protected boolean genStringAsCharArray
      • validateTld

        protected boolean validateTld
      • validateXml

        protected boolean validateXml
      • blockExternal

        protected boolean blockExternal
      • strictQuoteEscaping

        protected boolean strictQuoteEscaping
      • quoteAttributeEL

        protected boolean quoteAttributeEL
      • xpoweredBy

        protected boolean xpoweredBy
      • mappedFile

        protected boolean mappedFile
      • poolingEnabled

        protected boolean poolingEnabled
      • scratchDir

        protected scratchDir
      • ieClassId

        protected java.lang.String ieClassId
      • targetPackage

        protected java.lang.String targetPackage
      • targetClassName

        protected java.lang.String targetClassName
      • uriBase

        protected java.lang.String uriBase
      • uriRoot

        protected java.lang.String uriRoot
      • dieLevel

        protected int dieLevel
      • helpNeeded

        protected boolean helpNeeded
      • compile

        protected boolean compile
      • failFast

        protected boolean failFast
      • smapSuppressed

        protected boolean smapSuppressed
      • smapDumped

        protected boolean smapDumped
      • caching

        protected boolean caching
      • cache

        protected final java.util.Map<java.lang.String,​TagLibraryInfo> cache
      • compiler

        protected java.lang.String compiler
      • compilerTargetVM

        protected java.lang.String compilerTargetVM
      • compilerSourceVM

        protected java.lang.String compilerSourceVM
      • classDebugInfo

        protected boolean classDebugInfo
      • failOnError

        protected boolean failOnError
        Throw an exception if there's a compilation error, or swallow it. Default is true to preserve old behavior.
      • extensions

        protected java.util.List<java.lang.String> extensions
        The file extensions to be handled as JSP files. Default list is .jsp and .jspx.
      • pages

        protected final java.util.List<java.lang.String> pages
        The pages.
      • errorOnUseBeanInvalidClassAttribute

        protected boolean errorOnUseBeanInvalidClassAttribute
        Needs better documentation, this data member does. True by default.
      • javaEncoding

        protected java.lang.String javaEncoding
        The java file encoding. Default is UTF-8. Added per bugzilla 19622.
      • threadCount

        protected int threadCount
        The number of threads to use; default is one per core
      • webxmlFile

        protected java.lang.String webxmlFile
      • webxmlLevel

        protected int webxmlLevel
      • webxmlEncoding

        protected java.lang.String webxmlEncoding
      • addWebXmlMappings

        protected boolean addWebXmlMappings
      • mapout

        protected mapout
      • servletout

        protected servletout
      • mappingout

        protected mappingout
      • rctxt

        protected JspRuntimeContext rctxt
        The runtime context. Maintain a dummy JspRuntimeContext for compiling tag files.
      • tldCache

        protected TldCache tldCache
        Cache for the TLD locations
      • verbose

        protected boolean verbose
      • listErrors

        protected boolean listErrors
      • showSuccess

        protected boolean showSuccess
      • argPos

        protected int argPos
      • fullstop

        protected boolean fullstop
      • args

        protected java.lang.String[] args
    • Constructor Detail

      • JspC

        public JspC()
    • Method Detail

      • main

        public static void main​(java.lang.String[] arg)
      • setArgs

        public void setArgs​(java.lang.String[] arg)
                     throws JasperException
        Apply command-line arguments.
        arg - The arguments
        JasperException - JSPC error
      • getKeepGenerated

        public boolean getKeepGenerated()
        In JspC this always returns true.
        Specified by:
        getKeepGenerated in interface Options
        true to keep the generated source
      • setTrimSpaces

        public void setTrimSpaces​(java.lang.String ts)
        Sets the option to control handling of template text that consists entirely of whitespace.
        ts - New value
      • setTrimSpaces

        public void setTrimSpaces​(boolean trimSpaces)
      • isPoolingEnabled

        public boolean isPoolingEnabled()
        Specified by:
        isPoolingEnabled in interface Options
        true if tag handler pooling is enabled, false otherwise.
      • setPoolingEnabled

        public void setPoolingEnabled​(boolean poolingEnabled)
        Sets the option to enable the tag handler pooling.
        poolingEnabled - New value
      • isXpoweredBy

        public boolean isXpoweredBy()
        Specified by:
        isXpoweredBy in interface Options
        true to generate a X-Powered-By response header.
      • setXpoweredBy

        public void setXpoweredBy​(boolean xpoweredBy)
        Sets the option to enable generation of X-Powered-By response header.
        xpoweredBy - New value
      • getDisplaySourceFragment

        public boolean getDisplaySourceFragment()
        In JspC this always returns true.
        Specified by:
        getDisplaySourceFragment in interface Options
        true to include a source fragment in exception messages.
      • getMaxLoadedJsps

        public int getMaxLoadedJsps()
        Description copied from interface: Options
        The maximum number of loaded jsps per web-application. If there are more jsps loaded, they will be unloaded. If unset or less than 0, no jsps are unloaded.
        Specified by:
        getMaxLoadedJsps in interface Options
        The JSP count
      • getJspIdleTimeout

        public int getJspIdleTimeout()
        Specified by:
        getJspIdleTimeout in interface Options
        the idle time in seconds after which a JSP is unloaded. If unset or less or equal than 0, no jsps are unloaded.
      • getErrorOnUseBeanInvalidClassAttribute

        public boolean getErrorOnUseBeanInvalidClassAttribute()
        Returns true if Jasper issues a compilation error instead of a runtime Instantiation error if the class attribute specified in useBean action is invalid.
        Specified by:
        getErrorOnUseBeanInvalidClassAttribute in interface Options
        true to get an error
      • setErrorOnUseBeanInvalidClassAttribute

        public void setErrorOnUseBeanInvalidClassAttribute​(boolean b)
        Sets the option to issue a compilation error if the class attribute specified in useBean action is invalid.
        b - New value
      • getMappedFile

        public boolean getMappedFile()
        Specified by:
        getMappedFile in interface Options
        true if HTML mapped Servlets are supported.
      • setMappedFile

        public void setMappedFile​(boolean b)
      • setClassDebugInfo

        public void setClassDebugInfo​(boolean b)
        Sets the option to include debug information in compiled class.
        b - New value
      • getClassDebugInfo

        public boolean getClassDebugInfo()
        Specified by:
        getClassDebugInfo in interface Options
        true if debug information in included in compiled classes.
      • isCaching

        public boolean isCaching()
        Specified by:
        isCaching in interface Options
        true is caching is enabled (used for precompilation).
      • setCaching

        public void setCaching​(boolean caching)
        Sets the option to enable caching.
        caching - New value
        See Also:
      • getCache

        public java.util.Map<java.lang.String,​TagLibraryInfo> getCache()
        The web-application wide cache for the TagLibraryInfo tag library descriptors, used if Options.isCaching() returns true.

        Using this cache avoids the cost of repeating the parsing of a tag library descriptor XML file (performed by TagLibraryInfoImpl.parseTLD).

        Specified by:
        getCache in interface Options
        the Map(String uri, TagLibraryInfo tld) instance.
      • getCheckInterval

        public int getCheckInterval()
        In JspC this always returns 0.
        Specified by:
        getCheckInterval in interface Options
        background compile thread check interval in seconds
      • getModificationTestInterval

        public int getModificationTestInterval()
        In JspC this always returns 0.
        Specified by:
        getModificationTestInterval in interface Options
        modification test interval.
      • getRecompileOnFail

        public boolean getRecompileOnFail()
        In JspC this always returns false.
        Specified by:
        getRecompileOnFail in interface Options
        true if re-compile will occur on a failure.
      • getDevelopment

        public boolean getDevelopment()
        In JspC this always returns false. Main development flag, which enables detailed error reports with sources, as well automatic recompilation of JSPs and tag files. This setting should usually be false when running in production.
        Specified by:
        getDevelopment in interface Options
        true if Jasper is in development mode
      • isSmapSuppressed

        public boolean isSmapSuppressed()
        Specified by:
        isSmapSuppressed in interface Options
        true to suppress generation of SMAP info for JSR45 debugging.
      • setSmapSuppressed

        public void setSmapSuppressed​(boolean smapSuppressed)
        Sets smapSuppressed flag.
        smapSuppressed - New value
      • isSmapDumped

        public boolean isSmapDumped()
        This setting is ignored if suppressSmap() is true.
        Specified by:
        isSmapDumped in interface Options
        true to write SMAP info for JSR45 debugging to a file.
      • setSmapDumped

        public void setSmapDumped​(boolean smapDumped)
        Sets smapDumped flag.
        smapDumped - New value
        See Also:
      • setGenStringAsCharArray

        public void setGenStringAsCharArray​(boolean genStringAsCharArray)
        Determines whether text strings are to be generated as char arrays, which improves performance in some cases.
        genStringAsCharArray - true if text strings are to be generated as char arrays, false otherwise
      • genStringAsCharArray

        public boolean genStringAsCharArray()
        Indicates whether text strings are to be generated as char arrays.
        Specified by:
        genStringAsCharArray in interface Options
        true if text strings are to be generated as char arrays, false otherwise
      • setIeClassId

        public void setIeClassId​(java.lang.String ieClassId)
        Will be removed in Tomcat 10.1
        Sets the class-id value to be sent to Internet Explorer when using <jsp:plugin> tags.
        ieClassId - Class-id value
      • getIeClassId

        public java.lang.String getIeClassId()
        Description copied from interface: Options
        Gets the class-id value that is sent to Internet Explorer when using <jsp:plugin> tags.
        Specified by:
        getIeClassId in interface Options
        Class-id value
      • getScratchDir

        public getScratchDir()
        Specified by:
        getScratchDir in interface Options
        the work folder
      • getCompiler

        public java.lang.String getCompiler()
        Compiler to use.

        If null (the default), the java compiler from Eclipse JDT project, bundled with Tomcat, will be used. Otherwise, the javac task from Apache Ant will be used to call an external java compiler and the value of this option will be passed to it. See Apache Ant documentation for the possible values.

        Specified by:
        getCompiler in interface Options
        the compiler name
      • setCompiler

        public void setCompiler​(java.lang.String c)
        Sets the option to determine what compiler to use.
        c - New value
        See Also:
      • getCompilerClassName

        public java.lang.String getCompilerClassName()
        Specified by:
        getCompilerClassName in interface Options
        Jasper Java compiler class to use.
      • getCompilerTargetVM

        public java.lang.String getCompilerTargetVM()
        Specified by:
        getCompilerTargetVM in interface Options
        the compiler target VM, e.g. 1.8.
      • setCompilerTargetVM

        public void setCompilerTargetVM​(java.lang.String vm)
        Sets the compiler target VM.
        vm - New value
        See Also:
      • getCompilerSourceVM

        public java.lang.String getCompilerSourceVM()
        Specified by:
        getCompilerSourceVM in interface Options
        the compiler source VM, e.g. 1.8.
      • setCompilerSourceVM

        public void setCompilerSourceVM​(java.lang.String vm)
        Sets the compiler source VM.
        vm - New value
        See Also:
      • getTldCache

        public TldCache getTldCache()
        The cache that maps URIs, resource paths and parsed TLD files for the various tag libraries 'exposed' by the web application. A tag library is 'exposed' either explicitly in web.xml or implicitly via the uri tag in the TLD of a taglib deployed in a jar file (WEB-INF/lib).
        Specified by:
        getTldCache in interface Options
        the instance of the TldLocationsCache for the web-application.
      • getJavaEncoding

        public java.lang.String getJavaEncoding()
        Returns the encoding to use for java files. The default is UTF-8.
        Specified by:
        getJavaEncoding in interface Options
        String The encoding
      • setJavaEncoding

        public void setJavaEncoding​(java.lang.String encodingName)
        Sets the encoding to use for java files.
        encodingName - The name, e.g. "UTF-8"
      • getFork

        public boolean getFork()
        The boolean flag to tell Ant whether to fork JSP page compilations.

        Is used only when Jasper uses an external java compiler (wrapped through a javac Apache Ant task).

        Specified by:
        getFork in interface Options
        true to fork a process during compilation
      • setFork

        public void setFork​(boolean fork)
      • getClassPath

        public java.lang.String getClassPath()
        Specified by:
        getClassPath in interface Options
        the classpath used to compile generated Servlets
      • setClassPath

        public void setClassPath​(java.lang.String s)
        Sets the classpath used while compiling the servlets generated from JSP files
        s - New value
      • getExtensions

        public java.util.List<java.lang.String> getExtensions()
        Returns the list of file extensions that are treated as JSP files.
        The list of extensions
      • addExtension

        protected void addExtension​(java.lang.String extension)
        Adds the given file extension to the list of extensions handled as JSP files.
        extension - The extension to add, e.g. "myjsp"
      • setUriroot

        public void setUriroot​(java.lang.String s)
        Base dir for the webapp. Used to generate class names and resolve includes.
        s - New value
      • setJspFiles

        public void setJspFiles​(java.lang.String jspFiles)
        Parses comma-separated list of JSP files to be processed. If the argument is null, nothing is done.

        Each file is interpreted relative to uriroot, unless it is absolute, in which case it must start with uriroot.

        jspFiles - Comma-separated list of JSP files to be processed
      • setCompile

        public void setCompile​(boolean b)
        Sets the compile flag.
        b - Flag value
      • setVerbose

        public void setVerbose​(int level)
        Sets the verbosity level. The actual number doesn't matter: if it's greater than zero, the verbose flag will be true.
        level - Positive means verbose
      • setValidateTld

        public void setValidateTld​(boolean b)
      • isValidateTld

        public boolean isValidateTld()
      • setValidateXml

        public void setValidateXml​(boolean b)
      • isValidateXml

        public boolean isValidateXml()
      • setBlockExternal

        public void setBlockExternal​(boolean b)
      • isBlockExternal

        public boolean isBlockExternal()
      • setStrictQuoteEscaping

        public void setStrictQuoteEscaping​(boolean b)
      • getStrictQuoteEscaping

        public boolean getStrictQuoteEscaping()
        Specified by:
        getStrictQuoteEscaping in interface Options
        true if the quote escaping required by section JSP.1.6 of the JSP specification should be applied to scriplet expression.
      • setQuoteAttributeEL

        public void setQuoteAttributeEL​(boolean b)
      • getQuoteAttributeEL

        public boolean getQuoteAttributeEL()
        Specified by:
        getQuoteAttributeEL in interface Options
        true if EL expressions used within attributes should have the quoting rules in JSP.1.6 applied to the expression.
      • getThreadCount

        public int getThreadCount()
      • setThreadCount

        public void setThreadCount​(java.lang.String threadCount)
      • setListErrors

        public void setListErrors​(boolean b)
      • setOutputDir

        public void setOutputDir​(java.lang.String s)
      • setPackage

        public void setPackage​(java.lang.String p)
        Sets the package name to be used for the generated servlet classes.
        p - New value
      • setClassName

        public void setClassName​(java.lang.String p)
        Class name of the generated file ( without package ). Can only be used if a single file is converted. XXX Do we need this feature ?
        p - New value
      • setWebXmlInclude

        public void setWebXmlInclude​(java.lang.String s)
        File where we generate configuration with the class definitions to be included in a web.xml file.
        s - New value
      • setWebFragmentXml

        public void setWebFragmentXml​(java.lang.String s)
        File where we generate a complete web-fragment.xml with the class definitions.
        s - New value
      • setWebXml

        public void setWebXml​(java.lang.String s)
        File where we generate a complete web.xml with the class definitions.
        s - New value
      • setWebXmlEncoding

        public void setWebXmlEncoding​(java.lang.String encoding)
        Sets the encoding to be used to read and write web.xml files.

        If not specified, defaults to UTF-8.

        encoding - Encoding, e.g. "UTF-8".
      • setAddWebXmlMappings

        public void setAddWebXmlMappings​(boolean b)
        Sets the option to merge generated web.xml fragment into the WEB-INF/web.xml file of the web application that we were processing.
        b - true to merge the fragment into the existing web.xml file of the processed web application ({uriroot}/WEB-INF/web.xml), false to keep the generated web.xml fragment
      • setFailOnError

        public void setFailOnError​(boolean b)
        Sets the option that throws an exception in case of a compilation error.
        b - New value
      • getFailOnError

        public boolean getFailOnError()
        true if an exception will be thrown in case of a compilation error.
      • getJspConfig

        public JspConfig getJspConfig()
        Specified by:
        getJspConfig in interface Options
        JSP configuration information specified in web.xml.
      • getGeneratedJavaAddTimestamp

        public boolean getGeneratedJavaAddTimestamp()
        Should the container include the time the file was generated in the comments at the start of a Java file generated from a JSP or tag. Defaults to true.

        Hard-coded to false for pre-compiled code to enable repeatable builds.

        Specified by:
        getGeneratedJavaAddTimestamp in interface Options
        true to include the timestamp, otherwise don't include it
      • generateWebMapping

        public void generateWebMapping​(java.lang.String file,
                                       JspCompilationContext clctxt)
        Adds servlet declaration and mapping for the JSP page servlet to the generated web.xml fragment.
        file - Context-relative path to the JSP file, e.g. /index.jsp
        clctxt - Compilation context of the servlet
        Throws: - An IO error occurred
      • mergeIntoWebXml

        protected void mergeIntoWebXml()
        Include the generated web.xml inside the webapp's web.xml.
        Throws: - An IO error occurred
      • scanFiles

        public void scanFiles()
        Locate all jsp files in the webapp. Used if no explicit jsps are specified. Scan is performed via the ServletContext and will include any JSPs located in resource JARs.
      • execute

        public void execute()
        Executes the compilation.
        execute in class
      • nextArg

        protected java.lang.String nextArg()
      • nextFile

        protected java.lang.String nextFile()
      • completeWebXml

        protected void completeWebXml()
      • initTldScanner

        protected void initTldScanner​(JspCServletContext context,
                                      java.lang.ClassLoader classLoader)
      • newTldScanner

        protected TldScanner newTldScanner​(JspCServletContext context,
                                           boolean namespaceAware,
                                           boolean validate,
                                           boolean blockExternal)
      • initServletContext

        protected void initServletContext​(java.lang.ClassLoader classLoader)
      • initClassLoader

        protected java.lang.ClassLoader initClassLoader()
        Initializes the classloader as/if needed for the given compilation context.
        the classloader that will be used
        Throws: - If an error occurs
      • locateUriRoot

        protected void locateUriRoot​( f)
        Find the WEB-INF dir by looking up in the directory tree. This is used if no explicit docbase is set, but only files.
        f - The path from which it will start looking
      • resolveFile

        protected resolveFile​(java.lang.String s)
        Resolves the relative or absolute pathname correctly in both Ant and command-line situations. If Ant launched us, we should use the basedir of the current project to resolve relative paths. See Bugzilla 35571.
        s - The file
        The file resolved