今天在练习定义和使用EL函数时,在配置tld文件中遇到了几个问题。
1.
type Exception report
message Mandatory TLD element jsp-version missing or empty in TLD /WEB-INF/funcation.tld
description The server encountered an internal error that prevented it from fulfilling this request.
exception
org.apache.jasper.JasperException: Mandatory TLD element jsp-version missing or empty in TLD /WEB-INF/funcation.tld org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:51) org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:409) org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:164) org.apache.jasper.compiler.TagLibraryInfoImpl.parseTLD(TagLibraryInfoImpl.java:299) org.apache.jasper.compiler.TagLibraryInfoImpl.<init>(TagLibraryInfoImpl.java:166) org.apache.jasper.compiler.Parser.parseTaglibDirective(Parser.java:386) org.apache.jasper.compiler.Parser.parseDirective(Parser.java:450) org.apache.jasper.compiler.Parser.parseElements(Parser.java:1400) org.apache.jasper.compiler.Parser.parse(Parser.java:130) org.apache.jasper.compiler.ParserController.doParse(ParserController.java:255) org.apache.jasper.compiler.ParserController.parse(ParserController.java:103) org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:185) org.apache.jasper.compiler.Compiler.compile(Compiler.java:354) org.apache.jasper.compiler.Compiler.compile(Compiler.java:334) org.apache.jasper.compiler.Compiler.compile(Compiler.java:321) org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:592) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:328) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260) javax.servlet.http.HttpServlet.service(HttpServlet.java:723)该问题出现的原因是在配置tld文件时
<description>library</description>
<display-name>function</display-name>
<tlib-version>1.0</tlib-version>
<jspversion>1.1</jspversion>//这句话没有添加。。可能是我看的书上漏掉了这句话
<short-name>fn</short-name>
2.
type Exception report
message Invalid syntax for function signature in TLD. Tag Library: fn, Function: reverse
description The server encountered an internal error that prevented it from fulfilling this request.
exception
org.apache.jasper.JasperException: Invalid syntax for function signature in TLD. Tag Library: fn, Function: reverse org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:51) org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:409) org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:164) org.apache.jasper.compiler.Validator$ValidateVisitor.getMethod(Validator.java:1586) org.apache.jasper.compiler.Validator$ValidateVisitor.processSignature(Validator.java:1573) org.apache.jasper.compiler.Validator$ValidateVisitor.access$400(Validator.java:412) org.apache.jasper.compiler.Validator$ValidateVisitor$1FVVisitor.visit(Validator.java:1549) org.apache.jasper.compiler.ELNode$Function.accept(ELNode.java:131) org.apache.jasper.compiler.ELNode$Nodes.visit(ELNode.java:206) org.apache.jasper.compiler.ELNode$Visitor.visit(ELNode.java:248) org.apache.jasper.compiler.ELNode$Root.accept(ELNode.java:56) org.apache.jasper.compiler.ELNode$Nodes.visit(ELNode.java:206) org.apache.jasper.compiler.Validator$ValidateVisitor.validateFunctions(Validator.java:1553) org.apache.jasper.compiler.Validator$ValidateVisitor.prepareExpression(Validator.java:1558) org.apache.jasper.compiler.Validator$ValidateVisitor.visit(Validator.java:714) org.apache.jasper.compiler.Node$ELExpression.accept(Node.java:958) org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2361) org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2411) org.apache.jasper.compiler.Node$Visitor.visit(Node.java:2417) org.apache.jasper.compiler.Node$Root.accept(Node.java:495) org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2361) org.apache.jasper.compiler.Validator.validateExDirectives(Validator.java:1785) org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:198) org.apache.jasper.compiler.Compiler.compile(Compiler.java:354) org.apache.jasper.compiler.Compiler.compile(Compiler.java:334) org.apache.jasper.compiler.Compiler.compile(Compiler.java:321) org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:592) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:328) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260) javax.servlet.http.HttpServlet.service(HttpServlet.java:723)该问题出现的原因在于<function-signature>标签使用错误。
错误:<function-signature>java.lang.String
reverse(java.lang.String)</function-signature> //由于习惯性的直接enter键导致错误
正确:<function-signature>java.lang.String reverse(java.lang.String)</function-signature> //String和后面的reverse之间应该有空格