3

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

一.jsp 二.jsp

在 two.jsp 我下面给出了代码

Long something = 0;

在 one.jsp 代码中是

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

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

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

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

和 php 一样,有 include("file.php"); 这样的函数。//这将包括文件

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

任何解决方案????

4

1 回答 1

2

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

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

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

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

考虑到使用动态包含可以避免重复变量的问题。包含的页面将在其自己的范围内执行,并且要访问服务器端变量,您必须使用或在, or范围<jsp:param>之一中传递它们。有关静态和动态包括的区别,请参阅此问题的答案:include 指令和属性名称问题RequestSessionApplication

此外,如果您有大量这些“条件”静态包含,您最终可能会达到64K 方法限制

于 2011-10-16T08:53:38.277 回答