【问题标题】:Get filename of source JSP file (even if included)获取源 JSP 文件的文件名(即使包含)
【发布时间】:2010-02-05 14:48:25
【问题描述】:

我正在尝试对包含多级嵌套包含的 JSP 文件进行一些调试。

例如

foo.jsp
  <%@ include file="bar.jsp"%>

  bar.jsp
    <%@ include file="baz.jsp"%>

    baz.jsp
      <%@ include file="boz.jsp"%>

为了帮助确定某个文件实际包含在哪里,我放置了一个简单的行来在各种文件中输出 javascript 警报,以便在呈现页面时可以捕获它。

例如(为了便于阅读,格式化为多行)

<script type="text/javascript">
  alert('Accessing File: <%=this.getName()%>' +
    '\n\nCompiled as: <%=pageContext.getPage().getClass().getName()%>' +
    '\n\nRequested by: <%=request.getRequestURI()%>');
</script>

因此,如果我将其注入baz.jsp,理想情况下我想看到的是:

访问文件:baz.jsp

编译为:_foo__jsp.java

请求者:foo.jsp

但是,由于 &lt;%@include%&gt; JSP 指令是静态的 - 内容在翻译时包含在内,因此所有内容都变为“foo”。

我真的非常希望不必在我添加的每个调试行中编辑/硬编码文件名。

有没有人有一个聪明的解决方案来获取 JSP 的“真实”源文件名......如果它被 @included 在另一个文件中?

【问题讨论】:

  • 我不确定,但请尝试使用&lt;jsp:include&gt;
  • @Teja - 不幸的是它没有任何区别......我认为这只是调用@include的干净标签库“包装器”
  • 好的,如果有其他选择,我会尝试。但是两者的工作方式之间存在差异,请查看这里http://www.jguru.com/faq/view.jsp?EID=13517
  • @include 是编译时,&lt;jsp:include&gt; 是运行时。

标签: debugging jsp filenames jspinclude


【解决方案1】:

&lt;jsp:include&gt; 转换为 RequestDispatcher.include(..) 并在请求时进行评估,而不是静态评估。所以尝试使用它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-22
    • 2011-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-04
    相关资源
    最近更新 更多