Как проверить, что файл JSP включен или нет в другом файле JSP? - PullRequest
2 голосов
/ 16 октября 2011

вижу, вы все знаете о включении файла в 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 Ответ

2 голосов
/ 16 октября 2011

Действительно, наличие этих двух статических включений приведет к ошибке того, что одна и та же переменная будет объявлена ​​дважды. Этот импорт во время компиляции добавит код включенной страницы во включающую, а затем будет скомпилирован полностью.

Я не знаю ни одного include_once подхода, встроенного в JSP, но вы могли бы сделать нечто подобное, если бы глобальный 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
   // ....
<% } %>

Обратите внимание, что это очень похоже на шаблон #ifndef #define #endif в C.

Примите во внимание, что при использовании динамических включений вы избежите проблемы с дублирующимися переменными. Включенная страница будет выполняться в своей области видимости, и для доступа к серверным переменным вам придется передавать их с помощью <jsp:param> или в одной из Request, Session или Application областей. См. Ответ на этот вопрос о различиях между статическим и динамическим: директива include и проблема с именем атрибута

Кроме того, если у вас имеется большое количество этих «условных» статических включений, вы можете в конечном итоге достичь ограничения по методу 64K

...