import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@WebServlet("/ClickCounterServlet")
public class ClickCounterServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) {
// 获取ServletContext对象,用于在整个应用程序范围内共享数据
// 在实际应用中,可能需要使用数据库或其他持久化机制来保存计数器的状态
int clickCount;
synchronized (getServletContext()) {
clickCount = (int) getServletContext().getAttribute("clickCount");
clickCount++;
getServletContext().setAttribute("clickCount", clickCount);
}
// 输出点击次数到浏览器
response.setContentType("text/html;charset=UTF-8");
try {
response.getWriter().println("<html>");
response.getWriter().println("<head><title>Click Counter</title></head>");
response.getWriter().println("<body>");
response.getWriter().println("<h2>Click Count: " + clickCount + "</h2>");
response.getWriter().println("</body>");
response.getWriter().println("</html>");
} catch (IOException e) {
e.printStackTrace();
}
}
}
在上述示例中:
1. doGet方法处理GET请求,每次请求时点击次数会递增。
2. 通过synchronized块确保多个线程安全地更新clickCount。
3. 使用getServletContext()获取ServletContext对象,在整个Web应用程序范围内共享clickCount。
请注意:
- 上述示例是一个简单的内存中计数器,对于生产环境,您可能需要使用数据库或其他持久化机制来保存计数器的状态,以防止在应用程序重启时丢失数据。
- 在高并发情况下,可能需要使用更高级的并发控制机制,以确保计数器的正确递增。
- 考虑将HTML内容移到JSP或其他模板引擎中,以更好地分离视图和业务逻辑。
转载请注明出处:http://www.zyzy.cn/article/detail/6887/Servlet