Hi there,
I just had a friend install Tomcat for me on my Apache server at school and it's working great with the test .jsp page I created... until I started to use the <jsp:include> tag. Here's my source for "index.jsp":

<html>
<head>
<% String title = "Hello World!"; %>
<title><%= title %></title>
</head>

<body>
<h1><%= title %></h1>

<jsp:include page="inc/header.jsp" flush="true" />
</body>
</html>

Here's my source for "inc/header.jsp":

This is an include from the "inc" directory!

When I load the page in a browser... "This is an include from the 'inc' directory!" does NOT show up on the page. However, if I view said page's source, I see this:

<html>
<head>

<title>Hello World!</title>
</head>

<body>
<h1>Hello World!</h1>

This is an include from the "inc" directory!
</body>
</html>

Can anyone please tell me why my include ("This is an include from the 'inc' directory!") is NOT being rendered on the web page... yet appears in its source? Thank you,
CabG

Well,
I'm not sure why, but out of desperation I threw this:

<%@ include file='inc/header.jsp' %>

below this:

<jsp:include page="inc/header.jsp" flush="true" />

And it's working; even after I took "<%@ include file='inc/header.jsp' %>" back out of the code. I must have done something wrong, initially? I also removed the first "/" from my original:

<jsp:include page="/inc/header.jsp" flush="true" />

To make it:

<jsp:include page="inc/header.jsp" flush="true" />

But I thought I'd done that before, too. If anyone has any insight as to why it began to work after I added (then removed) the new code... love to hear it, as a new guy.
CabG

Well,
I thought I'd figured it out, but it seems that includes DO NOT work within any pages that are not at the root level. Within a page two directories down from the root level (/admin/admin.jsp), none of the following single statements work:

<jsp:include page="/inc/global_header.jsp" flush="true" />
or
<jsp:include page="../../inc/global_header.jsp" flush="true" />
or
<jsp:include page="/home/projects/www.website.com/htdocs/inc/global_header.jsp" flush="true" />
or
<%@ include file="/inc/global_header.jsp" %>
or
<%@ include file="../../inc/global_header.jsp" %>
or
<%@ include file="/home/projects/www.website.com/htdocs/inc/global_header.jsp" %>

I have this setup in the Tomcat "server.xml" file:

<Host name="www.website.com" debug="0" appBase="/home/projects/www.website.com/htdocs">
<Context path="" docBase="/home/projects/www.website.com/htdocs" debug="0" reloadable="true">
</Context>

This is a sample of errors with "../../":

org.apache.jasper.JasperException: /admin/admin.jsp(27,0) File "/admin/../../inc/global_header.jsp" not found
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:510)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:375)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

org.apache.jasper.JasperException: /admin/admin.jsp(27,0) File "/admin/../../inc/global_header.jsp" not found
    org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:39)
    org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:405)
    org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:86)
    org.apache.jasper.compiler.Parser.processIncludeDirective(Parser.java:339)
    org.apache.jasper.compiler.Parser.parseIncludeDirective(Parser.java:372)
    org.apache.jasper.compiler.Parser.parseDirective(Parser.java:484)
    org.apache.jasper.compiler.Parser.parseElements(Parser.java:1552)
    org.apache.jasper.compiler.Parser.parse(Parser.java:126)
    org.apache.jasper.compiler.ParserController.doParse(ParserController.java:211)
    org.apache.jasper.compiler.ParserController.parse(ParserController.java:100)
    org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:155)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:295)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:276)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:264)
    org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:563)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:303)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

And his is a sample of errors with "/":

org.apache.jasper.JasperException: /admin/admin.jsp(27,0) File "/inc/global_header.jsp" not found
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:510)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:375)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

org.apache.jasper.JasperException: /admin/admin.jsp(27,0) File "/inc/global_header.jsp" not found
    org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:39)
    org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:405)
    org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:86)
    org.apache.jasper.compiler.Parser.processIncludeDirective(Parser.java:339)
    org.apache.jasper.compiler.Parser.parseIncludeDirective(Parser.java:372)
    org.apache.jasper.compiler.Parser.parseDirective(Parser.java:484)
    org.apache.jasper.compiler.Parser.parseElements(Parser.java:1552)
    org.apache.jasper.compiler.Parser.parse(Parser.java:126)
    org.apache.jasper.compiler.ParserController.doParse(ParserController.java:211)
    org.apache.jasper.compiler.ParserController.parse(ParserController.java:100)
    org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:155)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:295)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:276)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:264)
    org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:563)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:303)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

Can anyone tell me what's wrong? I don't understand why I cannot include files within files that DO NOT reside at the root level.


Thanks so much in advance,
CabG

Okay,
In what's becoming a habit, I'm answering my own questions. Yay! Here's what helped me (in particular, Comment #5):

Include File Failure for Parent|Top Relative References
http://issues.apache.org/bugzilla/show_bug.cgi?id=39817


My only question, from an inquisitive nature: why did changing my subfolder directory's name (where my subdirectory files reside) from "code" to "ROOT" make it work? Does Tomcat look for "ROOT" and allow directory-scaling (up, I mean) only when items are in a subfolder called "ROOT?"

Thanks,
CabG

This article has been dead for over six months. Start a new discussion instead.