/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.struts2.jasper.compiler;
import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Vector;
import javax.el.MethodExpression;
import javax.el.ValueExpression;
import javax.servlet.jsp.tagext.TagAttributeInfo;
import javax.servlet.jsp.tagext.TagInfo;
import javax.servlet.jsp.tagext.TagVariableInfo;
import javax.servlet.jsp.tagext.VariableInfo;
import org.apache.struts2.jasper.Constants;
import org.apache.struts2.jasper.JasperException;
import org.apache.struts2.jasper.JspCompilationContext;
import org.apache.struts2.jasper.compiler.Node.NamedAttribute;
import org.apache.struts2.jasper.runtime.JspRuntimeLibrary;
import org.apache.struts2.JSPRuntime;
import org.xml.sax.Attributes;
/**
* Generate Java source from Nodes
*
* @author Anil K. Vijendran
* @author Danno Ferrin
* @author Mandar Raje
* @author Rajiv Mordani
* @author Pierre Delisle
*
* Tomcat 4.1.x and Tomcat 5:
* @author Kin-man Chung
* @author Jan Luehe
* @author Shawn Bayern
* @author Mark Roth
* @author Denis Benoit
*
* Tomcat 6.x
* @author Jacob Hookom
* @author Remy Maucherat
*/
class Generator {
private static final Class[] OBJECT_CLASS = { Object.class };
private static final String VAR_EXPRESSIONFACTORY =
System.getProperty("org.apache.struts2.jasper.compiler.Generator.VAR_EXPRESSIONFACTORY", "_el_expressionfactory");
private static final String VAR_ANNOTATIONPROCESSOR =
System.getProperty("org.apache.struts2.jasper.compiler.Generator.VAR_ANNOTATIONPROCESSOR", "_jsp_annotationprocessor");
private ServletWriter out;
private ArrayList methodsBuffered;
private FragmentHelperClass fragmentHelperClass;
private ErrorDispatcher err;
private BeanRepository beanInfo;
private JspCompilationContext ctxt;
private boolean isPoolingEnabled;
private boolean breakAtLF;
private String jspIdPrefix;
private int jspId;
private PageInfo pageInfo;
private Vector<String> tagHandlerPoolNames;
private GenBuffer charArrayBuffer;
/**
* @param s
* the input string
* @return quoted and escaped string, per Java rule
*/
static String quote(String s) {
if (s == null)
return "null";
return '"' + escape(s) + '"';
}
/**
* @param s
* the input string
* @return escaped string, per Java rule
*/
static String escape(String s) {
if (s == null)
return "";
StringBuffer b = new StringBuffer();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (c == '"')
b.append('\\').append('"');
else if (c == '\\')
b.append('\\').append('\\');
else if (c == '\n')
b.append('\\').append('n');
else if (c == '\r')
b.append('\\').append('r');
else
b.append(c);
}
return b.toString();
}
/**
* Single quote and escape a character
*/
static String quote(char c) {
StringBuffer b = new StringBuffer();
b.append('\'');
if (c == '\'')
b.append('\\').append('\'');
else if (c == '\\')
b.append('\\').append('\\');
else if (c == '\n')
b.append('\\').append('n');
else if (c == '\r')
b.append('\\').append('r');
else
b.append(c);
b.append('\'');
return b.toString();
}
private String createJspId() throws JasperException {
if (this.jspIdPrefix == null) {
StringBuffer sb = new StringBuffer(32);
String name = ctxt.getServletJavaFileName();
sb.append("jsp_").append(Math.abs(name.hashCode())).append('_');
this.jspIdPrefix = sb.toString();
}
return this.jspIdPrefix + (this.jspId++);
}
/**
* Generates declarations. This includes "info" of the page directive, and
* scriptlet declarations.
*/
private void generateDeclarations(Node.Nodes page) throws JasperException {
class DeclarationVisitor extends Node.Visitor {
private boolean getServletInfoGenerated = false;
/*
* Generates getServletInfo() method that returns the value of the
* page directive's 'info' attribute, if present.
*
* The Validator has already ensured that if the translation unit
* contains more than one page directive with an 'info' attribute,
* their values match.
*/
public void visit(Node.PageDirective n) throws JasperException {
if (getServletInfoGenerated) {
return;
}
String info = n.getAttributeValue("info");
if (info == null)
return;
getServletInfoGenerated = true;
out.printil("public String getServletInfo() {");
out.pushIndent();
out.printin("return ");
out.print(quote(info));
out.println(";");
out.popIndent();
out.printil("}");
out.println();
}
public void visit(Node.Declaration n) throws JasperException {
n.setBeginJavaLine(out.getJavaLine());
out.printMultiLn(new String(n.getText()));
out.println();
n.setEndJavaLine(out.getJavaLine());
}
// Custom Tags may contain declarations from tag plugins.
public void visit(Node.CustomTag n) throws JasperException {
if (n.useTagPlugin()) {
if (n.getAtSTag() != null) {
n.getAtSTag().visit(this);
}
visitBody(n);
if (n.getAtETag() != null) {
n.getAtETag().visit(this);
}
} else {
visitBody(n);
}
}
}
out.println();
page.visit(new DeclarationVisitor());
}
/**
* Compiles list of tag handler pool names.
*/
private void compileTagHandlerPoolList(Node.Nodes page)
throws JasperException {
class TagHandlerPoolVisitor extends Node.Visitor {
private Vector names;
/*
* Constructor
*
* @param v Vector of tag handler pool names to populate
*/
TagHandlerPoolVisitor(Vector v) {
names = v;
}
/*
* Gets the name of the tag handler pool for the given
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
Apache Struts 2.5.28.3是一个优雅的、可扩展的框架,用于创建企业级 Java Web 应用程序。它可以在完整发行版中使用,也可以作为单独的库、源代码、示例和文档发行版使用。Struts 2.5.28.3 是 2.5 系列中 Struts 的“最佳可用”版本。
资源推荐
资源详情
资源评论
收起资源包目录
Apache Struts 2 (struts-2.5.28.3-all.zip) (2000个子文件)
bootstrap.css 138KB
bootstrap.css 138KB
bootstrap.min.css 115KB
bootstrap.min.css 115KB
bootstrap-theme.css 22KB
bootstrap-theme.css 22KB
bootstrap-theme.min.css 19KB
bootstrap-theme.min.css 19KB
config-styles.css 12KB
stylesheet.css 11KB
stylesheet.css 11KB
stylesheet.css 11KB
stylesheet.css 11KB
stylesheet.css 11KB
stylesheet.css 11KB
stylesheet.css 11KB
stylesheet.css 11KB
stylesheet.css 11KB
stylesheet.css 11KB
stylesheet.css 11KB
stylesheet.css 11KB
stylesheet.css 11KB
stylesheet.css 11KB
stylesheet.css 11KB
stylesheet.css 11KB
stylesheet.css 11KB
stylesheet.css 11KB
stylesheet.css 11KB
stylesheet.css 11KB
stylesheet.css 11KB
stylesheet.css 11KB
stylesheet.css 11KB
stylesheet.css 11KB
stylesheet.css 11KB
testng-reports.css 5KB
styles.css 2KB
styles.css 1KB
domTT.css 1KB
webconsole.css 1KB
app.css 897B
resource.css 828B
prettify.css 675B
main.css 380B
testng.css 312B
index-all.html 2.94MB
index-all.html 737KB
overview-tree.html 254KB
serialized-form.html 244KB
ValueStack.html 237KB
constant-values.html 229KB
index-all.html 186KB
Inject.html 173KB
StrutsConstants.html 141KB
allclasses-frame.html 136KB
StrutsTagAttribute.html 135KB
JspC.html 126KB
allclasses-noframe.html 120KB
ActionInvocation.html 119KB
UIBean.html 119KB
Component.html 117KB
index-all.html 117KB
DoubleListUIBean.html 109KB
OptionTransferSelect.html 109KB
AbstractDoubleListTag.html 109KB
OptionTransferSelectTag.html 108KB
constant-values.html 104KB
interceptors.html 103KB
index-all.html 103KB
ActionSupport.html 93KB
SimpleAdapterDocument.html 92KB
AbstractAdapterNode.html 89KB
DelegatingValidatorContext.html 89KB
AbstractUITag.html 86KB
OgnlUtil.html 85KB
ResourceFinder.html 84KB
convention.html 79KB
JspCompilationContext.html 79KB
StrutsLocalizedTextProvider.html 78KB
index-all.html 78KB
JspUtil.html 78KB
JasperException.html 78KB
PackageBasedActionConfigBuilder.html 77KB
OgnlValueStack.html 77KB
ComponentUrlProvider.html 75KB
GlobalLocalizedTextProvider.html 75KB
JspRuntimeLibrary.html 75KB
PortletServletRequest.html 74KB
index-all.html 73KB
struts-default-xml.html 73KB
StrutsModels.html 72KB
ProxyElementAdapter.html 69KB
Form.html 69KB
OgnlReflectionProvider.html 69KB
XmlConfigurationProvider.html 68KB
package-use.html 68KB
InputTransferSelect.html 68KB
ContainerBuilder.html 67KB
InputTransferSelectTag.html 65KB
AbstractAdapterElement.html 65KB
json.html 65KB
共 2000 条
- 1
- 2
- 3
- 4
- 5
- 6
- 20
资源评论
YunFeiDong
- 粉丝: 33
- 资源: 3849
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功