/*
* 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
没有合适的资源?快使用搜索试试~ 我知道了~
struts2-2.5.14
共2000个文件
html:3765个
java:1952个
txt:275个
需积分: 10 17 下载量 92 浏览量
2017-12-02
16:36:31
上传
评论 1
收藏 60.2MB ZIP 举报
温馨提示
2017.12.2上传, struts2完整框架 struts-2.5.14-all struts-2.5.14-all
资源推荐
资源详情
资源评论
收起资源包目录
struts2-2.5.14 (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.92MB
index-all.html 737KB
overview-tree.html 253KB
serialized-form.html 249KB
ValueStack.html 237KB
constant-values.html 226KB
index-all.html 186KB
Inject.html 170KB
allclasses-frame.html 135KB
StrutsConstants.html 134KB
StrutsTagAttribute.html 131KB
JspC.html 126KB
ActionInvocation.html 122KB
allclasses-noframe.html 120KB
Component.html 117KB
index-all.html 117KB
UIBean.html 116KB
DoubleListUIBean.html 109KB
OptionTransferSelect.html 109KB
AbstractDoubleListTag.html 108KB
OptionTransferSelectTag.html 108KB
constant-values.html 104KB
index-all.html 103KB
interceptors.html 98KB
ActionSupport.html 92KB
SimpleAdapterDocument.html 91KB
AbstractAdapterNode.html 89KB
DelegatingValidatorContext.html 88KB
ResourceFinder.html 83KB
AbstractUITag.html 82KB
OgnlUtil.html 79KB
JspCompilationContext.html 79KB
convention.html 78KB
JspUtil.html 78KB
JasperException.html 78KB
PackageBasedActionConfigBuilder.html 77KB
OgnlValueStack.html 77KB
ComponentUrlProvider.html 75KB
StrutsLocalizedTextProvider.html 75KB
JspRuntimeLibrary.html 75KB
PortletServletRequest.html 73KB
StrutsModels.html 72KB
GlobalLocalizedTextProvider.html 71KB
index-all.html 70KB
struts-default-xml.html 69KB
ProxyElementAdapter.html 69KB
OgnlReflectionProvider.html 68KB
XmlConfigurationProvider.html 68KB
Form.html 68KB
package-use.html 68KB
InputTransferSelect.html 68KB
ContainerBuilder.html 67KB
AbstractAdapterElement.html 65KB
InputTransferSelectTag.html 65KB
PackageConfig.html 65KB
DefaultActionInvocation.html 64KB
共 2000 条
- 1
- 2
- 3
- 4
- 5
- 6
- 20
资源评论
cupid_8
- 粉丝: 0
- 资源: 6
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功