业务逻辑之前的java执行方法
我知道Servlet Filters and Event Listeners,但我不确定这是否是我需要使用的
假设我有一个方法:
Integer count = 0;
public void increment() {
count++;
}
然后是doGet
:
public void doGet(HttpServletRequest request, HttpServletResponse response) {
System.out.println(count);
}
第一次执行Get
请求时,我希望count=1
而不是count=0
,因为我希望方法increment()
首先执行,然后再执行web应用程序中的任何其他业务逻辑
此外,每个用户的计数应该不同。它应该基于特定用户的请求数量
我可以用什么来解决这个问题
我宁愿不使用Spring或任何其他第三方库
# 1 楼答案
这完全取决于
count
应该在哪里可用,但是您可以创建一个abstract HttpServlet
子类,该子类在处理请求之前调用一些abstract
方法来执行逻辑现在,您自己的
Servlet
实现将从此类扩展。您将按照自己认为合适的方式实施它。但是,as Luiggi has stated in the comments,您发布的示例提出了许多可能的并发问题。一个Servlet
通常不应该有任何可变状态如果只想将计数器属性添加到
HttpSession
,请在HttpSession
上同步,检查属性是否存在。如果没有,则从0开始添加一个。如果是,则增加它并将其作为属性添加回。使用AtomicInteger
可能会获得更好的性能,但需要同步检查属性是否存在从这个意义上讲,{}可能更合适,因为{}无论如何都不会有任何状态