粗略翻译,这被声明为JSP 页面最终编译到的 servlet 类的实例变量。例如
public class pagename_jsp_servlet extends HttpServlet {
private String abc = UUID.randomUUID().toString();
protected void service(HttpServletRequest ...
由于 JSP 通常只在启动期间编译一次(或者在更改之后,如果启用了服务器上的热部署),所有请求之间将共享相同的 servlet 实例!你不想那样做。
毕竟,您不应该在 JSP 页面中使用scriptlet 。Java 代码属于真正的 Java 类。在这种特殊情况下,您可以使用EL 函数、bean 类或servlet 类。
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>
servlet 类应该映射到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" />
它使代码更清晰,更易于维护。