Java 如何检查jsp文件是否包含在另一个jsp文件中?

Java 如何检查jsp文件是否包含在另一个jsp文件中?,java,jsp,jspinclude,Java,Jsp,Jspinclude,大家都知道在jsp中包含文件。。。 我有两个文件 one.jsp two.jsp 在two.jsp中,我给出了以下代码 Long something = 0; jsp代码是 <%@include file='two.jsp'%> <%@include file='two.jsp'%> 我已经把同一个文件包括了两次 所以会有错误,因为变量2将被创建 时代,对吗 这意味着在第二次包含文件之前,我应该检查一下,如果 一旦它被包括,那么我就不应该再包含它了,如何检查 那个

大家都知道在jsp中包含文件。。。 我有两个文件

one.jsp two.jsp

在two.jsp中,我给出了以下代码

Long something = 0;
jsp代码是

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

我已经把同一个文件包括了两次

所以会有错误,因为变量2将被创建 时代,对吗

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

在php中,有如下函数 包括(“file.php”); //这将包括文件

及 包括_once(“file.php”); //如果之前未包含该文件,则将包含该文件


任何解决方案???

事实上,拥有这两个静态include将导致两次声明同一变量的错误。在编译时,这些导入将把包含页面的代码附加到包含页面中,然后一起编译

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

one.jsp

<% HashSet<String> pagesSet = new HashSet<String>(); %>
...
<%@include file='two.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
   // ....
<% } %>

...
two.jsp

<% HashSet<String> pagesSet = new HashSet<String>(); %>
...
<%@include file='two.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
   // ....
<% } %>

//... 请记住向页面集实际添加两个.jsp,
//因为它现在被包括在内。
pageSet.add(“two.jsp”);
//two.jsp的全部内容
// ....
注意,这与C中的
#ifndef#define#endif
模式非常相似

考虑到使用动态包含可以避免重复变量的问题。包含的页面将在其自己的作用域上执行,要访问服务器端变量,您必须使用
请求
会话
应用程序
作用域之一传递它们。有关静态和动态之间的差异,请参见此问题的答案,包括:


此外,如果您有大量的“条件”静态包含,那么您最终可以点击

Please,考虑我在回答中最后介绍的内容,并记住Scriptlet(JSP中的java代码)是被考虑的。你应该使用和。我也很抱歉,但这不是一个代码工厂。当然,我还没有测试过这个片段,现在我不会了。答案中的建议应该足够了。您遇到了什么问题?在将two.jsp包含在one.jsp页面中之前,我必须检查two.jsp是否包含在one.jsp中,如果two.jsp未包含,则应将其包含在内。这样地。。。。在你的代码中,two.jsp被调用了两次,我不会,只要给我测试过的代码就行了。正如我所说,据我所知,PHP的
include_once()
是没有等价物的,你所能做的就是自己检查一下,即使用一个
HashSet
来包含已经包含的页面的名称。考虑静态导入和动态导入之间的差异。如果使用静态导入,页面将始终包含在内。因此,您的解决方案是使用动态导入(
),并将它们放入
if
,检查页面是否已包含在内。要检查这一点,可以使用顶级页面中声明的全局
Set
变量,或将其作为属性放入请求中。动态包含不包含文件。。。但它将只包括该文件输入输出给出的“响应”。。。。在中,我将在当前页面中包含一些.jsp文件的代码,所以我需要解决方案使用,我需要这个。。静态包括。。。你们告诉我hashset包含所有包含的文件,但这不是真的,我已经检查过了,所以hashset不包含任何文件