看到你们都知道在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”); //这将包含文件,如果之前没有包含,
任何解决方案????
答案 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>
或Request
,Session
或{{1}中的一个传递它们范围。请参阅此问题的答案,了解静态和动态之间的差异:include directive and attribute name problem
此外,如果你有大量的“条件”静态包含,你最终可以点击64K method limit