简体   繁体   English

自定义JSP标记和Tomcat 8

[英]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: 我注意到了几件事:

  1. Try to include a beginning / symbol in the uri like this: <%@ taglib prefix="ex" uri="/WEB-INF/lib/custom.tld" %> 尝试像这样在uri中包含一个开始/符号: <%@ taglib prefix="ex" uri="/WEB-INF/lib/custom.tld" %>
  2. The TLD file (hopefully named custom.tld) that you gave in your question looks incomplete. 您在问题中提供的TLD文件(希望命名为custom.tld)看起来不完整。 It's missing the end tag. 它缺少结束标签。 It's missing the initial definition. 它缺少初始定义。

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM