📄 jspparseeventlistener.java
字号:
throw new CompileException(start,
Constants.getString("jsp.error.page.multiple.language"));
listener.languageDir = true;
if (language != null)
if (!language.equalsIgnoreCase("java"))
throw new CompileException(start,
Constants.getString("jsp.error.page.nomapping.language")+language);
}
}
static final class ImportsHandler implements PageDirectiveHandler {
public void handlePageDirectiveAttribute(JspParseEventListener listener,
String importPkgs,
Mark start, Mark stop)
throws JasperException
{
if (importPkgs != null) {
StringTokenizer tokenizer = new StringTokenizer(importPkgs, ",");
while (tokenizer.hasMoreTokens())
listener.imports.addElement(tokenizer.nextToken());
}
}
}
static final class ExtendsHandler implements PageDirectiveHandler {
public void handlePageDirectiveAttribute(JspParseEventListener listener,
String extendsClzz,
Mark start, Mark stop)
throws JasperException
{
if (listener.extendsDir == true)
throw new CompileException(start,
Constants.getString("jsp.error.page.multiple.extends"));
listener.extendsDir = true;
if (extendsClzz != null) {
listener.extendsClass = extendsClzz;
/*
* If page superclass is top level class (i.e. not in a pkg)
* explicitly import it. If this is not done, the compiler
* will assume the extended class is in the same pkg as
* the generated servlet.
*/
if (extendsClzz.indexOf(".") == -1) {
listener.imports.addElement(extendsClzz);
}
}
}
}
public void handleDirective(String directive, Mark start,
Mark stop, Hashtable attrs)
throws JasperException
{
Constants.message("jsp.message.handling_directive",
new Object[] { directive, attrs },
Logger.DEBUG);
if (directive.equals("page")) {
Enumeration e = attrs.keys();
String attr;
while (e.hasMoreElements()) {
attr = (String) e.nextElement();
for(int i = 0; i < pdhis.length; i++) {
PageDirectiveHandlerInfo pdhi = pdhis[i];
if (attr.equals(pdhi.attribute)) {
String value = (String) attrs.get(pdhi.attribute);
pdhi.handler.handlePageDirectiveAttribute(this, value,
start, stop);
}
}
}
}
// Do some validations...
if (bufferSize == 0 && autoFlush == false)
throw new CompileException(start, Constants.getString(
"jsp.error.page.bad_b_and_a_combo"));
if (directive.equals("taglib")) {
String uri = (String) attrs.get("uri");
String prefix = (String) attrs.get("prefix");
try {
TagLibraryInfo tl = new TagLibraryInfoImpl(ctxt,
prefix,
uri);
libraries.addTagLibrary(prefix, tl);
} catch (Exception ex) {
ex.printStackTrace();
Object[] args = new Object[] { uri, ex.getMessage() };
throw new CompileException(start, Constants.getString("jsp.error.badtaglib",
args));
}
}
if (directive.equals("include")) {
String file = (String) attrs.get("file");
if (file == null)
throw new CompileException(start,
Constants.getString("jsp.error.include.missing.file"));
// jsp.error.include.bad.file needs taking care of here??
try {
reader.pushFile(file);
} catch (FileNotFoundException fnfe) {
throw new CompileException(start,
Constants.getString("jsp.error.include.bad.file"));
}
}
}
class GeneratorWrapper
implements Generator, ClassDeclarationPhase,
FileDeclarationPhase, ServiceMethodPhase,
InitMethodPhase, StaticInitializerPhase
{
Generator generator;
Mark start, stop;
GeneratorWrapper(Generator generator, Mark start, Mark stop) {
this.generator = generator;
this.start = start;
this.stop = stop;
}
/*
* This is really a no-op.
*/
public boolean generateCoordinates(Class phase) {
return generator.generateCoordinates(phase);
}
public void init(JspCompilationContext ctxt)
throws JasperException
{
generator.init(ctxt);
}
public void generate(ServletWriter out, Class phase)
throws JasperException
{
if (phase.isInstance(generator)) {
boolean genCoords = generator.generateCoordinates(phase);
if (genCoords) {
commentGenerator.generateStartComment
(generator, out, start, stop);
}
generator.generate(out, phase);
if (genCoords) {
commentGenerator.generateEndComment
(generator, out, start, stop);
}
}
}
}
public void handleDeclaration(Mark start, Mark stop, Hashtable attrs)
throws JasperException
{
Generator gen
= new GeneratorWrapper(new DeclarationGenerator(reader.getChars(
start, stop)), start, stop);
addGenerator(gen);
}
public void handleScriptlet(Mark start, Mark stop, Hashtable attrs)
throws JasperException
{
Generator gen
= new GeneratorWrapper(new ScriptletGenerator(reader.getChars(
start, stop)), start, stop);
addGenerator(gen);
}
public void handleExpression(Mark start, Mark stop, Hashtable attrs)
throws JasperException
{
Generator gen
= new GeneratorWrapper(new ExpressionGenerator(reader.getChars(
start, stop)), start, stop);
addGenerator(gen);
}
public void handleBean(Mark start, Mark stop, Hashtable attrs)
throws JasperException
{
Generator gen
= new GeneratorWrapper(new BeanGenerator(start, attrs, beanInfo,
genSessionVariable),
start, stop);
addGenerator(gen);
}
public void handleBeanEnd(Mark start, Mark stop, Hashtable attrs)
throws JasperException
{
Generator gen
= new GeneratorWrapper(new BeanEndGenerator(),
start, stop);
// End the block started by useBean body.
addGenerator(gen);
}
public void handleGetProperty(Mark start, Mark stop, Hashtable attrs)
throws JasperException
{
Generator gen
= new GeneratorWrapper(new GetPropertyGenerator(start, stop, attrs,
beanInfo), start, stop);
addGenerator(gen);
}
public void handleSetProperty(Mark start, Mark stop, Hashtable attrs)
throws JasperException
{
Generator gen
= new GeneratorWrapper(new SetPropertyGenerator(start, stop, attrs,
beanInfo), start, stop);
addGenerator(gen);
}
public void handlePlugin(Mark start, Mark stop, Hashtable attrs,
Hashtable param, String fallback)
throws JasperException
{
Constants.message("jsp.message.handling_plugin",
new Object[] { attrs },
Logger.DEBUG);
Generator gen = new GeneratorWrapper (new PluginGenerator (start, attrs,
param, fallback), start, stop);
addGenerator (gen);
}
public void handleForward(Mark start, Mark stop, Hashtable attrs, Hashtable param)
throws JasperException
{
Generator gen
= new GeneratorWrapper(new ForwardGenerator(start, attrs, param),
start, stop);
addGenerator(gen);
}
public void handleInclude(Mark start, Mark stop, Hashtable attrs, Hashtable param)
throws JasperException
{
Generator gen
= new GeneratorWrapper(new IncludeGenerator(start, attrs, param),
start, stop);
addGenerator(gen);
}
public void handleCharData(Mark start, Mark stop, char[] chars) throws JasperException {
GeneratorBase cdg;
if (ctxt.getOptions().getLargeFile())
cdg = new StoredCharDataGenerator(vector, dataFile, stringId++, chars);
else if(ctxt.getOptions().getMappedFile())
cdg = new MappedCharDataGenerator(chars);
else
cdg = new CharDataGenerator(chars);
Generator gen
= new GeneratorWrapper(cdg,
start, stop);
addGenerator(gen);
}
public void handleTagBegin(Mark start, Mark stop, Hashtable attrs, String prefix,
String shortTagName, TagLibraryInfo tli,
TagInfo ti)
throws JasperException
{
TagBeginGenerator tbg = new TagBeginGenerator(start, prefix, shortTagName, attrs,
tli, ti, libraries, getTagHandlerStack(), getTagVarNumbers());
Generator gen = new GeneratorWrapper(tbg, start, stop);
addGenerator(gen);
}
public void handleTagEnd(Mark start, Mark stop, String prefix,
String shortTagName, Hashtable attrs,
TagLibraryInfo tli, TagInfo ti)
throws JasperException
{
TagEndGenerator teg = new TagEndGenerator(prefix, shortTagName, attrs,
tli, ti, libraries, getTagHandlerStack(), getTagVarNumbers());
Generator gen = new GeneratorWrapper(teg, start, stop);
addGenerator(gen);
}
public TagLibraries getTagLibraries() {
return libraries;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -