2015-04-27 168 views
0

我对自定义JSP标记和Tomcat 8有奇怪的错误。随着Tomcat 7的工作。自定义JSP标记和Tomcat 8

的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> 

处理类:

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(仅第6行):

... 
<%@ taglib prefix="ex" uri="/WEB-INF/lib/custom.tld"%> 
... 

和错误:

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) 
+1

发表您的jsp太 – Mecon

回答

0

我注意到几件事情:

  1. 尽量在这样的URI一个开始/符号:那你给你的问题看起来不完全<%@ taglib prefix="ex" uri="/WEB-INF/lib/custom.tld" %>
  2. TLD文件(希望命名custom.tld)。它缺少结束标记。它缺少最初的定义。

我的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> 

而在JSP我通过URI导入这样的,它工作正常在Tomcat 8:

<%@ taglib prefix="cust" uri="http://example.com/tags/custom" %> 
+0

不幸的是这并没有帮助。与以前一样的错误。我在我的问题中添加了对代码的推荐更改。 – Cengiz

+0

是否尝试清理“部署”文件夹并再次部署?它可能在tomcat内或者你设定的位置。 在JSP中添加一个html头文件或一些文本,以确保您看到最新版本。 – Mecon

+0

是的,我总是干净的。部署发生在我的构建与配置有Tomcat 8的gradle和cargo插件的集成测试中。正如前面提到的使用Tomcat 7构建和测试的方式运行没有错误。 – Cengiz

0

Tomcat的8需要WEB-INF文件夹中的tld文件。 移动那里custom.tld文件和正确的路线6在JSP文件中:

<%@ taglib prefix="ex" uri="/WEB-INF/custom.tld"%> 

现在它应该工作