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

时间:2011-10-16 08:21:11

标签: java jsp jspinclude

看到你们都知道在jsp中包含文件... 我有2个文件

one.jsp two.jsp

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

Long something = 0;
one.jsp代码中的

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

我已经两次包含相同的文件,

所以会出现错误,因为会创建一些变量2 时间,对吧?

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

像在PHP中一样,有像 包括( “file.php”); //将包含文件

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

任何解决方案????

1 个答案:

答案 0 :(得分:2)

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

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

<强> one.jsp

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

<强> 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
   // ....
<% } %>

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

考虑到使用动态包含可以避免重复变量的问题。包含的页面将在其自己的范围内执行,要访问服务器端变量,您必须使用<jsp:param>RequestSession或{{1}中的一个传递它们范围。请参阅此问题的答案,了解静态和动态之间的差异:include directive and attribute name problem

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