Package org.apache.jasper.runtime
Class TldScanner
- java.lang.Object
-
- org.apache.jasper.runtime.TldScanner
-
- All Implemented Interfaces:
javax.servlet.ServletContainerInitializer
public class TldScanner extends Object implements javax.servlet.ServletContainerInitializer
A container for all tag libraries that are defined "globally" for the web application. Tag Libraries can be defined globally in one of two ways: 1. Viaelements in web.xml: the uri and location of the tag-library are specified in the element. 2. Via packaged jar files that contain .tld files within the META-INF directory, or some subdirectory of it. The taglib is 'global' if it has the element defined. A mapping between the taglib URI and its associated TaglibraryInfoImpl is maintained in this container. Actually, that's what we'd like to do. However, because of the way the classes TagLibraryInfo and TagInfo have been defined, it is not currently possible to share an instance of TagLibraryInfo across page invocations. A bug has been submitted to the spec lead. In the mean time, all we do is save the 'location' where the TLD associated with a taglib URI can be found. When a JSP page has a taglib directive, the mappings in this container are first searched (see method getLocation()). If a mapping is found, then the location of the TLD is returned. If no mapping is found, then the uri specified in the taglib directive is to be interpreted as the location for the TLD of this tag library. - Author:
- Pierre Delisle, Jan Luehe, Kin-man Chung servlet 3.0 JSP plugin, tld cache etc
-
-
Field Summary
Fields Modifier and Type Field Description static int
ABS_URI
The types of URI one may specify for a tag librarystatic int
NOROOT_REL_URI
static int
ROOT_REL_URI
-
Constructor Summary
Constructors Constructor Description TldScanner()
Default Constructor.TldScanner(javax.servlet.ServletContext ctxt, boolean isValidationEnabled)
Constructor used in Jasper
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description String[]
getLocation(String uri)
Gets the 'location' of the TLD associated with the given taglib 'uri'.void
onStartup(Set<Class<?>> c, javax.servlet.ServletContext ctxt)
static int
uriType(String uri)
Returns the type of a URI: ABS_URI ROOT_REL_URI NOROOT_REL_URI
-
-
-
Field Detail
-
ABS_URI
public static final int ABS_URI
The types of URI one may specify for a tag library- See Also:
- Constant Field Values
-
ROOT_REL_URI
public static final int ROOT_REL_URI
- See Also:
- Constant Field Values
-
NOROOT_REL_URI
public static final int NOROOT_REL_URI
- See Also:
- Constant Field Values
-
-
Constructor Detail
-
TldScanner
public TldScanner()
Default Constructor. This is only used for implementing ServletContainerInitializer. ServletContext will be supplied in the method onStartUp;
-
TldScanner
public TldScanner(javax.servlet.ServletContext ctxt, boolean isValidationEnabled)
Constructor used in Jasper
-
-
Method Detail
-
onStartup
public void onStartup(Set<Class<?>> c, javax.servlet.ServletContext ctxt) throws javax.servlet.ServletException
- Specified by:
onStartup
in interfacejavax.servlet.ServletContainerInitializer
- Throws:
javax.servlet.ServletException
-
getLocation
public String[] getLocation(String uri) throws JasperException
Gets the 'location' of the TLD associated with the given taglib 'uri'. Returns null if the uri is not associated with any tag library 'exposed' in 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).- Parameters:
uri
- The taglib uri- Returns:
- An array of two Strings: The first element denotes the real path to the TLD. If the path to the TLD points to a jar file, then the second element denotes the name of the TLD entry in the jar file. Returns null if the uri is not associated with any tag library 'exposed' in the web application. This method may be called when the scanning is in one of states: 1. Called from jspc script, then a full tld scan is required. 2. The is the first call after servlet initialization, then system jars that are knwon to have tlds but not listeners need to be scanned. 3. Sebsequent calls, no need to scans.
- Throws:
JasperException
-
uriType
public static int uriType(String uri)
Returns the type of a URI: ABS_URI ROOT_REL_URI NOROOT_REL_URI
-
-