В моем случае, я скачал проект из Интернета, после распаковки проекта некоторые файлы были заблокированы, просто разблокируйте файлы и попробуйте снова, затем проблема была решена.
В JSP есть два способа включения других страниц jsp.
<%@include file="include.jsp"%>
и
<jsp:include page="include.jsp" />
Если вы используете первый, то любая переменная, объявленная в родительском JSP, будет в области включения .jsp (конечно, Eclipse не увидит этого, как вы догадались), поскольку он фактически копируется компилятором.
Если вы используете второй подход, включение выполняется во время выполнения, и страница включения имеет свою собственную область действия.
То же самое для импорта. Хотя можно безопасно импортировать их с резервированием на странице включения.
Если я использую первые, я предпочитаю добавлять к ним суффикс .jspf для обозначения фрагмента JSP. Затем я могу отключить некоторые предупреждения Eclipses в файлах фрагментов. Но в целом я стараюсь избегать использования этого метода и предпочитаю второй подход.
Дополнительную информацию можно найти в документации здесь:
С объектно-ориентированной точки зрения я бы рекомендовал не полагаться на область видимости переменной в parent.jsp, включенной в child.jsp. Это связано с тем, что, когда я включаю фрагмент в jsp, я, как правило, хочу повторно использовать этот фрагмент во многих разных местах. Например, если у меня есть child.jsp, я могу использовать его в parent1.jsp, а также в parent2.jsp. В этом случае наследование лучше не изменять.
Используйте следующее, если вы хотите использовать переменную в пути включаемой страницы:
<% pageContext.include("/cities/" + (String) request.getAttribute("country_code") + ".jsp"); %>