Package org.apache.jasper.compiler
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 JspCompilationContext
private boolean
private ErrorDispatcher
private boolean
private boolean
private URL
private static final String
private static final String
private static final String
private PageInfo
private ParserController
private JspReader
private int
private Mark
Fields inherited from interface org.apache.jasper.compiler.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
ConstructorsModifierConstructorDescriptionprivate
Parser
(ParserController pc, JspReader reader, boolean isTagFile, boolean directivesOnly, URL jarFileUrl, boolean hasBom) The constructor -
Method Summary
Modifier and TypeMethodDescriptionprivate void
addInclude
(Node parent, List files) Add a list of files.private void
private String
getAttributeBodyType
(Node n, String name) Determine the body type of invalid input: '<'jsp:attribute> from the enclosing nodestatic 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) The main entry for Parserprivate boolean
parseAttribute
(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 void
parseAttributeDirective
(Node parent) (package private) Attributes
Attributes ::= (S Attribute)* S?static Attributes
parseAttributes
(ParserController pc, JspReader reader) Parse Attributes for a reader, provided for external useprivate String
parseAttributeValue
(String watch) AttributeValueDouble ::= (QuotedChar - '"')* ('"' |) RTAttributeValueDouble ::= ((QuotedChar - '"')* - ((QuotedChar-'"')'%>"') ('%>"' | TRANSLATION_ERROR) private void
private void
parseComment
(Node parent) private boolean
parseCustomTag
(Node parent) private void
parseDeclaration
(Node parent) private void
parseDirective
(Node parent) private void
parseDoBody
(Node parent) private void
parseElement
(Node parent) private void
parseElements
(Node parent) private void
parseElementsScriptless
(Node parent) private void
parseElementsTemplateText
(Node parent) private void
parseELExpression
(Node parent, String typeEL) private void
parseEmptyBody
(Node parent, String tag) private void
parseExpression
(Node parent) private void
parseFallBack
(Node parent) private void
parseForward
(Node parent) private void
parseGetProperty
(Node parent) private void
parseInclude
(Node parent) private void
parseIncludeDirective
(Node parent) private void
parseInvoke
(Node parent) private boolean
parseJspAttributeAndBody
(Node parent, String tag, String bodyType) Attempts to parse 'JspAttributeAndBody' production.private void
parseJspBody
(Node parent, String bodyType) private void
parseJspParams
(Node parent) private String
Name ::= (Letter | '_' | ':') (Letter | Digit | '.' | '_' | '-' | ':')*private void
parseNamedAttributes
(Node parent) private void
parseOptionalBody
(Node parent, String tag, String bodyType) private void
parsePageDirective
(Node parent) private void
parseParam
(Node parent) Param ::= 'invalid input: '<'jsp:param' S Attributes S? EmptyBody S?private void
parsePlugin
(Node parent) private void
parsePluginTags
(Node parent) private String
parseQuoted
(String tx) QuotedChar ::= ''' | '"' | '\\' | '\"' | "\'" | '\>' | '\$' | '\#' | Charprivate void
parseScriptlet
(Node parent) private String
private void
parseSetProperty
(Node parent) private void
parseStandardAction
(Node parent) private void
parseTagDependentBody
(Node parent, String tag) TagDependentBody :=private void
parseTagDirective
(Node parent) private void
parseTagFileDirectives
(Node parent) private void
parseTaglibDirective
(Node parent) private void
parseTemplateText
(Node parent) private void
parseUseBean
(Node parent) private void
parseVariableDirective
(Node parent) private void
parseXMLDeclaration
(Node parent) private void
parseXMLDirective
(Node parent) private void
parseXMLExpression
(Node parent) private void
parseXMLScriptlet
(Node parent) private void
parseXMLTemplateText
(Node parent) private void
processIncludeDirective
(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
QuotedChar ::= ''' | '"' | '\\' | '\"' | "\'" | '\>' | '\$' | '\#' | Char -
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
Determine the body type of invalid input: '<'jsp:attribute> from the enclosing node -
parseTagFileDirectives
- Throws:
JasperException
-