【问题标题】:jsp include is not working from subdirectoriesjsp include 在子目录中不起作用
【发布时间】:2011-02-09 12:16:36
【问题描述】:

我无法包含子目录中的 jsp 文件。我必须将包含子文件夹中的文件包含到测试文件夹中的文件中。

我试过这段代码

<%@ include file="../../include/file.jsp"%> 

文件内../test/sample.jsp

但我遇到了类似的错误

org.apache.jasper.JasperException: /all.jsp(132,1) File "/../../include/file.jsp" not found
org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:40)
org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:407)
org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:88)
org.apache.jasper.compiler.Parser.processIncludeDirective(Parser.java:300)
org.apache.jasper.compiler.Parser.parseIncludeDirective(Parser.java:333)
org.apache.jasper.compiler.Parser.parseDirective(Parser.java:442)
org.apache.jasper.compiler.Parser.parseFileDirectives(Parser.java:1749)
org.apache.jasper.compiler.Parser.parse(Parser.java:127)
org.apache.jasper.compiler.ParserController.doParse(ParserController.java:255)
org.apache.jasper.compiler.ParserController.parseDirectives(ParserController.java:120)
org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:180)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:347)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:327)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:314)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:592)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:326)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

更新:我认为问题与 tomcat 有关。当我过去将根文件夹映射为 tomcat 中的上下文时,它正在工作,当我将根文件夹添加为主机时,问题就出现了。我想把它用作主机。

在这个 tomcat 配置中它不起作用:

<Host name="abc.test"  appBase="c:\abcd"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">

        <Context path="/" docBase="c:\abcd" reloadable="true" crossContext="true">
 ..................................................................
...............................................................
</context>
</host>

但它适用于以下配置

<Host name="abc.test"  appBase="c:\abc"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">

<Context path="/lang" docBase="c:\subdir" reloadable="true" crossContext="true">
  ..................................................................
...............................................................
</context>

        <Context path="/" docBase="c:\subdir" reloadable="true" crossContext="true">
  ..................................................................
...............................................................
</context>
</host>

即,来自子文件夹的 jsp 包含在 http://abc.test/lang/ 中,但不适用于 http://abc.test 在这两种情况下,都可以包含来自同一目录的文件

【问题讨论】:

  • 试试&lt;%@ include file="./../../include/file.jsp"%&gt;
  • 我合并了您的帐户,因此您应该能够编辑问题而不是发布答案。

标签: jsp include


【解决方案1】:

我发现使用完整路径信息(来自根目录)没有前导斜杠似乎可以工作......

换句话说,而不是

../../../Directory/file

我使用:

FirstSubDir/SecondSubDir/ThirdSubDir/Directory/file

包含前导斜杠(即:/FirstSubDir/Se...)似乎会导致与上述相同的问题。

【讨论】:

    【解决方案2】:

    由于 include 指令采用相对路径,因此您可以从站点的根目录开始,而不是使用 ../ 语法。所以你可以试试:/include/file.jsp.

    【讨论】:

    • 谢谢文森特。这个我也试过了,但是问题依旧。唯一的变化是错误信息变成了org.apache.jasper.JasperException: /all.jsp(132,1) File "/include/file.jsp"跨度>
    • root/include/file.jsp, root/test/sample.jsp, root/WEB-INF/classes
    猜你喜欢
    • 2011-10-13
    • 2017-06-30
    • 1970-01-01
    • 2015-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多