1. 创建一个Web项目,创建并执行下面JSP页面,文件名为counter. jsp
<html><body>
<%@ page language="java" %>
<%! int count = 0; %>
<% count++; %>
Welcome! You are visitor number
<%= count %>
</body></html>
【步骤1】在浏览器中访问该页面,输出结果如何?多次刷新页面,结果如何?
每刷新一次,页面显示的刷新次数增加1,如下图经过多次刷新之后:
【步骤2】打开counter.jsp转换后的源文件counter_jsp.java,对应的类文件在哪里?文件名是什么?
文件名:counter.jsp
【步骤3】查看count变量是在哪里声明的?
答:int count = 0; (声明)
【步骤4】将上面JSP页面中的<%! int count = 0; %>一行改为<% int count = 0; %>,页面能否正常执行,它与上面页面有什么区别?
答:能执行,但是无法进行count的递增。
2. 访问次数的连续计数
编写persistent_counter.jsp页面,通过重写JSP页面的jspInit()方法和jspDestroy()方法实现持久的计数器。在jspInit()方法中读取/WEB-INF/counter.db文本文件中保存的访问次数,用JSP声明的变量保存,实现多用户线程之间的数据共享,在jspDestroy()方法中将访问次数写回到/WEB-INF/counter.db文件中,即使当前JSP页面实例被销毁了也能确保下次实例创建之后访问次数的连续计数。
<%@ page import="static jdk.nashorn.internal.objects.NativeMath.log" %>
<%@ page import="java.io.*" %>
<%--
Created by IntelliJ IDEA.
User: 28187
Date: 2019/4/11
Time: 21:02
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%!
int count = 0;
String dbPath;
public void jspInit() {
try {
dbPath = this.getServletContext().getRealPath("/WEB-INF/counter.db");
FileInputStream fis = new FileInputStream(dbPath);
DataInputStream dis = new DataInputStream(fis);
count = dis.readInt();
dis.close();
} catch (Exception e) {
log("Error loading persistent counter",e);
}
}
%>
<html>
<head>
<title>计数器</title>
</head>
<body>
<%count++;%>
Welcome! You are <%= count %> th visitor(s).
</body>
</html>
<%!
public void jspDestory() {
try {
FileOutputStream fos = new FileOutputStream(dbPath);
DataOutputStream dos = new DataOutputStream(fos);
dos.writeInt(count);
dos.close();
} catch (IOException e) {
log("Error loading persistent counter",e);
}
}
%>