Грубо говоря, это объявлено как переменная экземпляра класса сервлета, к которому в конце концов компилируется страница JSP. Э.Г.
public class pagename_jsp_servlet extends HttpServlet {
private String abc = UUID.randomUUID().toString();
protected void service(HttpServletRequest ...
Поскольку JSP обычно компилируются только один раз во время запуска (или после изменения, если включено горячее развертывание на сервере), тот же самый тот же экземпляр сервлета будет общим для всех запросов! Ты не хочешь этого делать.
В конце концов, вы не должны использовать скриптлетов на страницах JSP. Java-код принадлежит реальному классу Java. В этом конкретном случае вы можете использовать EL-функцию или класс бинов или класс сервлетов .
Функция EL наконец-то будет выглядеть так:
<c:set var="uuid" value="${uuid:random()}" />
<p>UUID: ${uuid}</p>
Класс бобов будет выглядеть так:
public class UUIDBean {
public String getRandom() {
return UUID.randomUUID().toString();
}
}
, который можно использовать как:
<jsp:useBean id="uuid" class="com.example.UUIDBean" />
<p>First UUID: ${uuid.random}</p>
<p>Next UUID: ${uuid.random}</p>
Класс сервлета должен отображаться на url-pattern
, охватывающем страницу JSP (или наоборот), и должен иметь метод doGet()
, реализованный для предварительной обработки запросов перед отображением данных на странице JSP:
UUID uuid = UUID.randomUUID().toString();
request.setAttribute("uuid", uuid);
request.getRequestDispatcher("page.jsp").forward(request, response);
перенаправленная страница JSP может выглядеть так:
<p>UUID from servlet: ${uuid}</p>
Далее, <%=Calendar.getInstance().getTime().toString()%>
лучше заменить следующим образом:
<jsp:useBean id="now" class="java.util.Date" />
<p>The date is now: ${now}
<p>The date in yyyy-MM-dd format: <fmt:formatDate value="${now}" pattern="yyyy-MM-dd" />
Это делает код намного чище и лучше обслуживаемым.