Однако, скриптлеты (необработанный Java-код в файлах JSP, те <% %> вещи) считаются плохой практикой. Я рекомендую установить JSTL. У него есть <c:forEach> тег, который может повторяться среди других Map тегов. Каждая итерация будет выдавать вам Map.Entry возврат, который, в свою очередь, имеет getKey() и getValue() методы.
Вот простой пример:
<%@ taglib prefix="c" uri="jakarta.tags.core" %>
<c:forEachitems="${map}"var="entry"> Key = ${entry.key}, value = ${entry.value}<br> </c:forEach>
Таким образом, ваша конкретная проблема может быть решена следующим образом:
Вам нужен Servlet или a ServletContextListener, чтобы поместить ${countries} в нужную область видимости. Если предполагается, что этот список должен основываться на запросах, то используйте Servlet's doGet():
Или, если предполагается, что этот список является константой всего приложения, тогда используйте ServletContextListener's contextInitialized(), чтобы он загружался только один раз и сохранялся в памяти: