Class Parser
java.lang.Object
org.apache.jasper.compiler.Parser
- All Implemented Interfaces:
TagConstants
This class implements a parser for a JSP page (non-xml view).
JSP page grammar is included here for reference. The token '#'
that appears in the production indicates the current input token
location in the production.
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate JspCompilationContextprivate booleanprivate ErrorDispatcherprivate booleanprivate booleanprivate URLprivate static final Stringprivate static final Stringprivate static final Stringprivate PageInfoprivate ParserControllerprivate JspReaderprivate intprivate MarkFields inherited from interface TagConstants
ATTRIBUTE_ACTION, ATTRIBUTE_DIRECTIVE_ACTION, BODY_ACTION, DECLARATION_ACTION, DIRECTIVE_ACTION, DOBODY_ACTION, ELEMENT_ACTION, EXPRESSION_ACTION, FALLBACK_ACTION, FORWARD_ACTION, GET_PROPERTY_ACTION, INCLUDE_ACTION, INCLUDE_DIRECTIVE_ACTION, INVOKE_ACTION, JSP_ATTRIBUTE_ACTION, JSP_ATTRIBUTE_DIRECTIVE_ACTION, JSP_BODY_ACTION, JSP_DECLARATION_ACTION, JSP_DOBODY_ACTION, JSP_ELEMENT_ACTION, JSP_EXPRESSION_ACTION, JSP_FALLBACK_ACTION, JSP_FORWARD_ACTION, JSP_GET_PROPERTY_ACTION, JSP_INCLUDE_ACTION, JSP_INCLUDE_DIRECTIVE_ACTION, JSP_INVOKE_ACTION, JSP_OUTPUT_ACTION, JSP_PAGE_DIRECTIVE_ACTION, JSP_PARAM_ACTION, JSP_PARAMS_ACTION, JSP_PLUGIN_ACTION, JSP_ROOT_ACTION, JSP_SCRIPTLET_ACTION, JSP_SET_PROPERTY_ACTION, JSP_TAG_DIRECTIVE_ACTION, JSP_TAGLIB_DIRECTIVE_ACTION, JSP_TEXT_ACTION, JSP_TEXT_ACTION_END, JSP_URI, JSP_USE_BEAN_ACTION, JSP_VARIABLE_DIRECTIVE_ACTION, OUTPUT_ACTION, PAGE_DIRECTIVE_ACTION, PARAM_ACTION, PARAMS_ACTION, PLUGIN_ACTION, ROOT_ACTION, SCRIPTLET_ACTION, SET_PROPERTY_ACTION, TAG_DIRECTIVE_ACTION, TAGLIB_DIRECTIVE_ACTION, TEXT_ACTION, URN_JSPTAGDIR, URN_JSPTLD, USE_BEAN_ACTION, VARIABLE_DIRECTIVE_ACTION -
Constructor Summary
ConstructorsModifierConstructorDescriptionprivateParser(ParserController pc, JspReader reader, boolean isTagFile, boolean directivesOnly, URL jarFileUrl, boolean hasBom) The constructor -
Method Summary
Modifier and TypeMethodDescriptionprivate voidaddInclude(Node parent, List files) Add a list of files.private voidprivate StringgetAttributeBodyType(Node n, String name) Determine the body type of invalid input: '<'jsp:attribute> from the enclosing nodestatic Node.Nodesparse(ParserController pc, String path, JspReader reader, Node parent, boolean isTagFile, boolean directivesOnly, URL jarFileUrl, String pageEnc, String jspConfigPageEnc, boolean isDefaultPageEncoding, boolean hasBom) The main entry for Parserprivate booleanparseAttribute(AttributesImpl attrs) Attribute ::= Name S? Eq S? ( '"invalid input: '<'%=' RTAttributeValueDouble | '"' AttributeValueDouble | "'invalid input: '<'%=" RTAttributeValueSingle | "'" AttributeValueSingle } Note: JSP and XML spec does not allow while spaces around Eq.private voidparseAttributeDirective(Node parent) (package private) AttributesAttributes ::= (S Attribute)* S?static AttributesparseAttributes(ParserController pc, JspReader reader) Parse Attributes for a reader, provided for external useprivate StringparseAttributeValue(String watch) AttributeValueDouble ::= (QuotedChar - '"')* ('"' |) RTAttributeValueDouble ::= ((QuotedChar - '"')* - ((QuotedChar-'"')'%>"') ('%>"' | TRANSLATION_ERROR) private voidprivate voidparseComment(Node parent) private booleanparseCustomTag(Node parent) private voidparseDeclaration(Node parent) private voidparseDirective(Node parent) private voidparseDoBody(Node parent) private voidparseElement(Node parent) private voidparseElements(Node parent) private voidparseElementsScriptless(Node parent) private voidparseElementsTemplateText(Node parent) private voidparseELExpression(Node parent, String typeEL) private voidparseEmptyBody(Node parent, String tag) private voidparseExpression(Node parent) private voidparseFallBack(Node parent) private voidparseForward(Node parent) private voidparseGetProperty(Node parent) private voidparseInclude(Node parent) private voidparseIncludeDirective(Node parent) private voidparseInvoke(Node parent) private booleanparseJspAttributeAndBody(Node parent, String tag, String bodyType) Attempts to parse 'JspAttributeAndBody' production.private voidparseJspBody(Node parent, String bodyType) private voidparseJspParams(Node parent) private StringName ::= (Letter | '_' | ':') (Letter | Digit | '.' | '_' | '-' | ':')*private voidparseNamedAttributes(Node parent) private voidparseOptionalBody(Node parent, String tag, String bodyType) private voidparsePageDirective(Node parent) private voidparseParam(Node parent) Param ::= 'invalid input: '<'jsp:param' S Attributes S? EmptyBody S?private voidparsePlugin(Node parent) private voidparsePluginTags(Node parent) private StringparseQuoted(String tx) QuotedChar ::= ''' | '"' | '\\' | '\"' | "\'" | '\>' | '\$' | '\#' | Charprivate voidparseScriptlet(Node parent) private Stringprivate voidparseSetProperty(Node parent) private voidparseStandardAction(Node parent) private voidparseTagDependentBody(Node parent, String tag) TagDependentBody :=private voidparseTagDirective(Node parent) private voidparseTagFileDirectives(Node parent) private voidparseTaglibDirective(Node parent) private voidparseTemplateText(Node parent) private voidparseUseBean(Node parent) private voidparseVariableDirective(Node parent) private voidparseXMLDeclaration(Node parent) private voidparseXMLDirective(Node parent) private voidparseXMLExpression(Node parent) private voidparseXMLScriptlet(Node parent) private voidparseXMLTemplateText(Node parent) private voidprocessIncludeDirective(String file, Node parent)
-
Field Details
-
parserController
-
ctxt
-
reader
-
start
-
err
-
scriptlessCount
private int scriptlessCount -
isTagFile
private boolean isTagFile -
directivesOnly
private boolean directivesOnly -
jarFileUrl
-
pageInfo
-
errorOnUndeclaredNamespace
private boolean errorOnUndeclaredNamespace -
JAVAX_BODY_CONTENT_PARAM
- See Also:
-
JAVAX_BODY_CONTENT_PLUGIN
- See Also:
-
JAVAX_BODY_CONTENT_TEMPLATE_TEXT
- See Also:
-
-
Constructor Details
-
Parser
private Parser(ParserController pc, JspReader reader, boolean isTagFile, boolean directivesOnly, URL jarFileUrl, boolean hasBom) The constructor
-
-
Method Details
-
parse
public static Node.Nodes parse(ParserController pc, String path, JspReader reader, Node parent, boolean isTagFile, boolean directivesOnly, URL jarFileUrl, String pageEnc, String jspConfigPageEnc, boolean isDefaultPageEncoding, boolean hasBom) throws JasperException The main entry for Parser- Parameters:
pc- The ParseController, use for getting other objects in compiler and for parsing included pagesreader- To read the pageparent- The parent node to this page, null for top level page- Returns:
- list of nodes representing the parsed page
- Throws:
JasperException
-
parseAttributes
Attributes ::= (S Attribute)* S?- Throws:
JasperException
-
parseAttributes
public static Attributes parseAttributes(ParserController pc, JspReader reader) throws JasperException Parse Attributes for a reader, provided for external use- Throws:
JasperException
-
parseAttribute
Attribute ::= Name S? Eq S? ( '"invalid input: '<'%=' RTAttributeValueDouble | '"' AttributeValueDouble | "'invalid input: '<'%=" RTAttributeValueSingle | "'" AttributeValueSingle } Note: JSP and XML spec does not allow while spaces around Eq. It is added to be backward compatible with Tomcat, and with other xml parsers.- Throws:
JasperException
-
parseName
Name ::= (Letter | '_' | ':') (Letter | Digit | '.' | '_' | '-' | ':')*- Throws:
JasperException
-
parseAttributeValue
AttributeValueDouble ::= (QuotedChar - '"')* ('"' |) RTAttributeValueDouble ::= ((QuotedChar - '"')* - ((QuotedChar-'"')'%>"') ('%>"' | TRANSLATION_ERROR) - Throws:
JasperException
-
parseQuoted
-
parseScriptText
-
processIncludeDirective
- Throws:
JasperException
-
parsePageDirective
- Throws:
JasperException
-
parseIncludeDirective
- Throws:
JasperException
-
addInclude
Add a list of files. This is used for implementing include-prelude and include-coda of jsp-config element in web.xml- Throws:
JasperException
-
parseTaglibDirective
- Throws:
JasperException
-
parseDirective
- Throws:
JasperException
-
parseXMLDirective
- Throws:
JasperException
-
parseTagDirective
- Throws:
JasperException
-
parseAttributeDirective
- Throws:
JasperException
-
parseVariableDirective
- Throws:
JasperException
-
parseComment
- Throws:
JasperException
-
parseDeclaration
- Throws:
JasperException
-
parseXMLDeclaration
- Throws:
JasperException
-
parseExpression
- Throws:
JasperException
-
parseXMLExpression
- Throws:
JasperException
-
parseELExpression
- Throws:
JasperException
-
parseScriptlet
- Throws:
JasperException
-
parseXMLScriptlet
- Throws:
JasperException
-
parseParam
Param ::= 'invalid input: '<'jsp:param' S Attributes S? EmptyBody S?- Throws:
JasperException
-
parseInclude
- Throws:
JasperException
-
parseForward
- Throws:
JasperException
-
parseInvoke
- Throws:
JasperException
-
parseDoBody
- Throws:
JasperException
-
parseElement
- Throws:
JasperException
-
parseGetProperty
- Throws:
JasperException
-
parseSetProperty
- Throws:
JasperException
-
parseEmptyBody
- Throws:
JasperException
-
parseUseBean
- Throws:
JasperException
-
parseOptionalBody
- Throws:
JasperException
-
parseJspAttributeAndBody
private boolean parseJspAttributeAndBody(Node parent, String tag, String bodyType) throws JasperException Attempts to parse 'JspAttributeAndBody' production. Returns true if it matched, or false if not. Assumes EmptyBody is okay as well. JspAttributeAndBody ::= ( '>' # S? ( 'invalid input: '<'jsp:attribute' NamedAttributes )? 'invalid input: '<'jsp:body' ( JspBodyBody |) S? ETag ) - Throws:
JasperException
-
parseJspParams
- Throws:
JasperException
-
parseFallBack
- Throws:
JasperException
-
parsePlugin
- Throws:
JasperException
-
parsePluginTags
- Throws:
JasperException
-
parseStandardAction
- Throws:
JasperException
-
parseCustomTag
- Throws:
JasperException
-
parseTemplateText
- Throws:
JasperException
-
parseXMLTemplateText
- Throws:
JasperException
-
parseElements
- Throws:
JasperException
-
parseElementsScriptless
- Throws:
JasperException
-
parseElementsTemplateText
- Throws:
JasperException
-
checkUnbalancedEndTag
- Throws:
JasperException
-
parseTagDependentBody
TagDependentBody :=- Throws:
JasperException
-
parseJspBody
- Throws:
JasperException
-
parseBody
- Throws:
JasperException
-
parseNamedAttributes
- Throws:
JasperException
-
getAttributeBodyType
-
parseTagFileDirectives
- Throws:
JasperException
-