/*
* 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 cu
没有合适的资源?快使用搜索试试~ 我知道了~
最新struts2 版本2.5.13
共2000个文件
html:4062个
java:1948个
txt:274个
需积分: 9 33 下载量 108 浏览量
2017-09-22
20:58:56
上传
评论
收藏 40.48MB 7Z 举报
温馨提示
最新struts2 版本2.5.13--最新struts2 版本2.5.13--最新struts2 版本2.5.13最新struts2 版本2.5.13最新struts2 版本2.5.13
资源推荐
资源详情
资源评论
收起资源包目录
最新struts2 版本2.5.13 (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
prettify.css 675B
main.css 380B
testng.css 312B
app.css 90B
resource.css 5B
index-all.html 2.91MB
index-all.html 737KB
overview-tree.html 253KB
serialized-form.html 249KB
ValueStack.html 237KB
constant-values.html 225KB
index-all.html 186KB
Inject.html 172KB
allclasses-frame.html 135KB
StrutsConstants.html 132KB
StrutsTagAttribute.html 130KB
JspC.html 126KB
ActionInvocation.html 122KB
allclasses-noframe.html 119KB
Component.html 117KB
UIBean.html 116KB
index-all.html 110KB
DoubleListUIBean.html 109KB
OptionTransferSelect.html 109KB
AbstractDoubleListTag.html 108KB
OptionTransferSelectTag.html 108KB
constant-values.html 104KB
index-all.html 103KB
ActionSupport.html 92KB
SimpleAdapterDocument.html 91KB
AbstractAdapterNode.html 89KB
DelegatingValidatorContext.html 88KB
ResourceFinder.html 83KB
AbstractUITag.html 82KB
OgnlUtil.html 79KB
JspCompilationContext.html 79KB
JspUtil.html 78KB
JasperException.html 78KB
PackageBasedActionConfigBuilder.html 77KB
interceptors.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
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
convention-plugin.html 64KB
DefaultActionInvocation.html 64KB
index-all.html 64KB
共 2000 条
- 1
- 2
- 3
- 4
- 5
- 6
- 20
资源评论
jobxNoob
- 粉丝: 0
- 资源: 7
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Sunfounder智能视频车载套件,适用于Raspberry Pi-智能车
- 计算机二级考试的一些编程题(大学生专用 )-计算机二级
- 2019年之江杯人工智能大赛电商评论观点挖掘赛道TOP3-电赛
- 基于PCA和SVM的人脸识别
- Python 爬虫爬取 Instagram 博主照片视频-Python 爬虫
- dot-font字体库
- 实现各种面向对象设计模式的C + +项目集合-Object-C
- 硬件设计基础:数字电压表;51单片机蓝牙通信+Proteus 仿真
- 用于使用JavaScript制作Scratch类项目的库-Scratch
- 2005-2022年全国及31省绿色信贷水平原始数据及测算(含原始数据+计算过程+计算结果).xls
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功