我有一个基于布尔变量值运行的 for 循环。
public class LoopClass{
..
private boolean[] toInterrupt = new boolean[];
public boolean getValue() {
return toInterrupt[0];
}
public void setValue(boolean newValue) {
toInterrupt[0] = newValue;
}
}
public method abc{
for loop{
if (getValue()){
break:
}}}
我想通过servlet中断这个循环:
public class interruptServlet exetnds HttpServlet {
LoopClass = lp = new LoopClass();
lp.setValue(true)
}
即使执行了 servlet,boolean toInterrupt[0] 也始终保持 false。 如何通过 servlet 更改布尔值来停止循环?
如前所述,新的
LoopClass
实例不与实际 servlet 共享任何状态。
有一种非常简单的方法可以在 servlet 之间共享状态:
ServletContext
。例如:
循环类:
private static final String INTERRUPTED_ATTRIBUTE = LoopClass.class.getName() + ".interrupted";
public static void setInterrupt(ServletContext context, boolean interrupt) {
context.setAttribute(INTERRUPTED_ATTRIBUTE, interrupt);
}
private boolean interrupted() {
return Boolean.TRUE.equals(getServletContext().getAttribute(INTERRUPTED_ATTRIBUTE);
}
中断Servlet:
LoopClass.setInterrupt(getServletContext(), true);
请注意,我将所有用于中断的实际代码保留在
LoopClass
中。这样您就可以轻松重命名属性名称,而无需更改其他代码。