[英]Custom JSP Tag and Tomcat 8
I have strange error with custom JSP tag and Tomcat 8. With Tomcat 7 it works. 自定义JSP标记和Tomcat 8出现了奇怪的错误。使用Tomcat 7可以正常工作。
The TLD-File: TLD文件:
<?xml version="1.0" encoding="UTF-8" ?>
<taglib version="2.0"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd">
<tlib-version>1.0</tlib-version>
<short-name>Example TLD</short-name>
<uri>http://www.hello.com/tags/hello</uri>
<tag>
<name>Hello</name>
<tag-class>myapp.tag.HelloTag</tag-class>
<body-content>empty</body-content>
</tag>
</taglib>
Handler Class: 处理程序类:
import javax.servlet.jsp.tagext.*;
import javax.servlet.jsp.*;
import java.io.*;
public class HelloTag extends SimpleTagSupport {
public void doTag() throws JspException, IOException {
JspWriter out = getJspContext().getOut();
out.println("Hello Custom Tag!");
}
}
JSP (only line 6): JSP(仅第6行):
...
<%@ taglib prefix="ex" uri="/WEB-INF/lib/custom.tld"%>
...
And the error: 错误:
Caused by: org.apache.jasper.JasperException: /WEB-INF/jsp/myapp.jsp (line: 6, column: 1) null
at org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:41)
at org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:275)
at org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:91)
at org.apache.jasper.compiler.Parser.processIncludeDirective(Parser.java:325)
at org.apache.jasper.compiler.Parser.parseIncludeDirective(Parser.java:358)
at org.apache.jasper.compiler.Parser.parseXMLDirective(Parser.java:527)
at org.apache.jasper.compiler.Parser.parseElements(Parser.java:1432)
at org.apache.jasper.compiler.Parser.parse(Parser.java:139)
at org.apache.jasper.compiler.ParserController.doParse(ParserController.java:227)
at org.apache.jasper.compiler.ParserController.parse(ParserController.java:100)
at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:199)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:356)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:336)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:323)
at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:570)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:356)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:721)
at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:584)
at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:523)
at org.apache.tiles.request.servlet.ServletRequest.doInclude(ServletRequest.java:243)
I noticed a few things: 我注意到了几件事:
<%@ taglib prefix="ex" uri="/WEB-INF/lib/custom.tld" %>
尝试像这样在uri中包含一个开始/符号: <%@ taglib prefix="ex" uri="/WEB-INF/lib/custom.tld" %>
My TLD files look something like this: 我的TLD文件如下所示:
<?xml version="1.0"?>
<taglib version="2.0"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd">
<tlib-version>1.0</tlib-version>
<short-name>custom</short-name>
<uri>http://example.com/tags/custom</uri>
<tag>
...
</tag>
</taglib>
And in the JSP I import them via URI like this, and it works fine on Tomcat 8: 在JSP中,我像这样通过URI导入它们,并且在Tomcat 8上运行良好:
<%@ taglib prefix="cust" uri="http://example.com/tags/custom" %>
Tomcat 8 expects the tld file in the WEB-INF Folder. Tomcat 8希望将tld文件放在WEB-INF文件夹中。 Move the custom.tld file there and correct line 6 in the jsp File to: 将custom.tld文件移动到此处,并将jsp文件中的第6行更正为:
<%@ taglib prefix="ex" uri="/WEB-INF/custom.tld"%>
Now it should work 现在应该可以了
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.