大まかに訳すと、これは、最終的にコンパイルされる JSP ページのサーブレット クラスのインスタンス変数として宣言されています。例えば
public class pagename_jsp_servlet extends HttpServlet {
private String abc = UUID.randomUUID().toString();
protected void service(HttpServletRequest ...
JSP は通常、起動時 (サーバーでの hotdeploy が有効な場合は変更後) に 1 回だけコンパイルされるため、まったく同じサーブレット インスタンスがすべての要求で共有されます。あなたはそれをしたくありません。
結局、 JSP ページでスクリプトレットを使用するべきではありません。Java コードは実際の Java クラスに属します。この特定のケースでは、EL 関数、Bean クラス、またはサーブレット クラスを使用できます。
EL関数は最終的に次のようになります。
<c:set var="uuid" value="${uuid:random()}" />
<p>UUID: ${uuid}</p>
Bean クラスは次のようになります。
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>
サーブレット クラスは、JSP ページをカバーするようにマップする必要がありurl-pattern
(またはその逆) 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" />
これにより、コードがよりクリーンになり、保守性が向上します。