【问题标题】:how to check that jsp file is included or not in another jsp file?如何检查jsp文件是否包含在另一个jsp文件中?
【发布时间】:2011-12-08 15:34:07
【问题描述】:

大家都知道在 jsp 中包含文件... 我有 2 个文件

one.jsp 二.jsp

在 two.jsp 中我有下面给出的代码

Long something = 0;

在一个.jsp代码中是

<%@include file='two.jsp'%>
<%@include file='two.jsp'%>

我已经两次包含同一个文件,

所以会有错误,因为会创建一些变量 2 次,对吧?

所以这意味着在第二次包含文件之前我应该​​检查一下,如果 一旦包含,我就不应该再次包含它,如何检查 那个?

在 php 中有类似的函数 包括(“文件.php”); //这将包括文件

和 include_once("file.php"); //如果之前没有包含,这将包含文件,

任何解决方案????

【问题讨论】:

    标签: java jsp jspinclude


    【解决方案1】:

    确实,拥有这两个静态包含将导致两次声明相同变量的错误。这些导入在编译时会将包含页面的代​​码附加到包含页面中,然后将被完全编译。

    我不知道 JSP 中内置了任何 include_once 方法,但您可以通过在顶级页面中声明为变量的全局 Set(即 HashSet)来做类似的事情,或作为请求属性(在处理结束时应清除),您可以在其中添加已包含的页面的名称。

    one.jsp

    <% HashSet<String> pagesSet = new HashSet<String>(); %>
    ...
    <%@include file='two.jsp'/>
    

    两个.jsp

    <% if (!pagesSet.contains("two.jsp"){ %>
       //... Remember to actually ADD two.jsp to pageSet, 
       // because it IS being included NOW.
       pageSet.add("two.jsp");
    
       // Entire contents of two.jsp
       // ....
    <% } %>
    

    请注意,这与 C 中的 #ifndef #define #endif 模式非常相似。

    考虑到使用动态包含可以避免重复变量的问题。包含的页面将在其自己的范围内执行,并且要访问服务器端变量,您必须使用&lt;jsp:param&gt;RequestSessionApplication 范围之一传递它们。请参阅此问题的答案以了解静态和动态之间的区别包括:include directive and attribute name problem

    此外,如果您有大量“条件”静态包含,您最终可以点击64K method limit

    【讨论】:

    • 请考虑我上次在答案中介绍的 matisations,并记住 scriptlet(JSP 中 &lt;% %&gt; 中的 java 代码)被视为 poor practice。您应该使用Unified Expression LanguageJSTL
    • 我也很抱歉,但这不是代码工厂。当然我没有测试过这个sn-p,现在我不会了。答案中的建议应该足够了。你有什么问题?
    • 在 one.jsp 页面中包含 two.jsp 之前,我必须检查 one.jsp 中是否包含 two.jsp ,如果未包含 two.jsp 则应该包含它。像这样......在你的代码中 two.jsp 被调用了两次,我不会,给我测试过的代码
    • 正如我所说,据我所知,没有与 PHP 的 include_once() 等效的东西,您所能做的就是自己检查,即 HashSet 包含已包含页面的名称。考虑静态和动态导入之间的差异。如果您使用静态导入,则该页面将始终包含在内。因此,您的解决方案是使用动态导入 (&lt;jsp:include&gt;),并将它们放在 if 中,以检查页面是否已包含在内。要检查这一点,您可以使用在顶级页面中声明的全局 Set 变量,或将其作为属性放入请求中。
    • 动态包含不包含文件...但它只会包含该文件在输出中给出的“响应”...和 ​​将在当前页面中包含 some.jsp 文件的代码,所以我需要解决方案使用 我需要这个.. 静态包含... 你告诉我 hashset 包含所有包含文件,但不是真的,我已经检查过了,所以 hashset 不包含任何文件
    猜你喜欢
    • 2012-01-28
    • 2019-05-18
    • 1970-01-01
    • 1970-01-01
    • 2021-01-25
    • 2017-10-25
    • 2011-02-07
    • 1970-01-01
    • 2015-09-27
    相关资源
    最近更新 更多