我对“JSP”很陌生;我正在使用 Eclipse Juno 和 xampp(Tomcat 7.0.28)。我创建了以下 jsp 标记文件:
<%@ tag language="java" pageEncoding="ISO-8859-1" body-content="empty" description="Read Property from the Application's properties file."%>
<%@ attribute name="Key" required="true" description="Key for searching Properties File." type="java.lang.String"%>
<% System.out.println(Key); %>
在 JSP 中使用与以下相同时:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib prefix="app" tagdir="/WEB-INF/tags/app" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title><app:random/></title>
</head>
<body>
<app:getProp Key="APP.TITLE"/>
</body>
</html>
我已将标签文件放在:/WEB-INF/tags/app. 但是在执行文件时,我得到以下异常:
2012 年 9 月 23 日上午 7:49:19 org.apache.catalina.core.StandardWrapperValve 在路径 [/MedCamp] 的上下文中调用 servlet [jsp] 的 Servlet.service() 引发异常 [/index.jsp(行: 11, column: 1) Unable to find setter method for attribute: Key] with root cause org.apache.jasper.JasperException: /index.jsp (line: 11, column: 1) Unable to find setter method for attribute: Key at org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:42) at org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:408) at org.apache.jasper.compiler.ErrorDispatcher.jspError( ErrorDispatcher.java:149) 在 org.apache.jasper.compiler.Generator$GenerateVisitor.evaluateAttribute(Generator.java:2865) 在 org.apache.jasper.compiler.Generator$GenerateVisitor.generateSetters(Generator.java:3089) 在 org .apache。jasper.compiler.Generator$GenerateVisitor.generateCustomDoTag(Generator.java:2507) 在 org.apache.jasper.compiler.Generator$GenerateVisitor.visit(Generator.java:1748) 在 org.apache.jasper.compiler.Node$CustomTag。在 org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2428) 处接受(Node.java:1539)在 org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2376)在 org.apache.jasper.compiler.Node$Visitor.visit(Node.java:2434) 在 org.apache.jasper.compiler.Node$Root.accept(Node.java:475) 在 org.apache.jasper.compiler .Node$Nodes.visit(Node.java:2376) 在 org.apache.jasper.compiler.Generator.generate(Generator.java:3490) 在 org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:250) ) 在 org.apache.jasper.compiler.Compiler 的 org.apache.jasper.compiler.Compiler.compile(Compiler.java:373)。在 org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:646) 在 org.apache.jasper 的 org.apache.jasper.compiler.Compiler.compile(Compiler.java:340) 编译(Compiler.java:353) .servlet.JspServletWrapper.service(JspServletWrapper.java:357) 在 org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390) 在 org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334 ) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter( ApplicationFilterChain.java:210) 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225) 在 org.apache.catalina.core.StandardContextValve。在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) 的 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) 处调用(StandardContextValve.java:123) .catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java :118) 在 org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1001) 在 org.apache.coyote.AbstractProtocol$ 的 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) AbstractConnectionHandler.process(AbstractProtocol.java:579) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310) at java。util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source)
请让我知道我做错了什么?