我不知道您的链接是如何创建的,但看起来您将向您的 servlet 发出 GET 请求。知道这一点后,每个 servlet 都应该管理页面的计数器命中,并且由于每个用户都应该知道这个值,因此最好将它保存在应用程序范围内,而不是请求或会话中。更多内容和servlet 是如何工作的?实例化、会话、共享变量和多线程。
我将发布一个处理单个链接计数器的 jsp 和 servlet 示例。您也应该能够使用它来处理您的链接。
index.jsp (其他元素喜欢<head>
并且<html>
对于示例毫无价值)
<body>
Hit the button to add a value to the application counter
<br />
<form action="HitCounterServlet" method="GET">
<input type="submit" value="Add counter hit" />
</form>
<br />
Total hits: ${applicationScope['counter']}
</body>
HitCounterServlet
@WebServlet(name = "HitCounterServlet", urlPatterns = {"/HitCounterServlet"})
public class HitCounterServlet extends HttpServlet {
private static final Object counterLock = new Object();
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
ServletContext context = request.getServletContext();
updateHitCounter(context);
String originalURL = "index.jsp";
//in case you want to use forwarding
//request.getRequestDispatcher(originalURL).forward(request, response);
//in case you want to use redirect
response.sendRedirect(response.encodeRedirectURL(request.getContextPath() + "/" + originalURL));
}
private void updateHitCounter(ServletContext context) {
//since more than a request can try to update the counter
//you should protect the update using a synchronized block code
synchronized(counterLock) {
Integer counter = (Integer)context.getAttribute("counter");
if (counter == null) {
counter = 0;
}
counter++;
context.setAttribute("counter", counter);
}
}
}
在不同的浏览器中尝试此操作,您将看到计数器如何在它们之间保持相同的状态。
为了将计数器命中保存在数据库中,您只需更改updateHitCounter
函数中的代码以获取将连接到数据库的代码并对数据库字段执行更新语句。