我编写了一个Web服务应用程序,它在主类中为每个请求生成随机值(用于记录)。
我无法将其设置为静态字段,因为下一个请求将覆盖它。
我也无法将它传递给我在主要类中使用的每个类(作为参数或使用setter)。
是否可以创建一些半静态字段 - 对于一个请求是可见的,但对于每个进入Web服务的其他请求都不可见?
答案 0 :(得分:4)
您可以放心地假设,在Java EE模型中,每个单个请求都由单个线程提供,并且并发请求不存在争用。
话虽如此,您可以使用ThreadLocal使用Singleton,让Servlet填充值并让底层类访问sigleton而不需要线程概念或HTTP请求上下文:
public class RandomValueHolder {
private static ThreadLocal<Long> randomValue;
public static Long getRandomValue() {
return randomValue.get();
}
public static void setRandomValue(Long value) {
randomValue = new ThreadLocal<Long>();
randomValue.set(value);
}
}
答案 1 :(得分:2)
为什么不使用HttpRequest
并将值存储为attribute
答案 2 :(得分:2)
使用Request.setAttribute()
将数据保存在请求中,并使用相应的Request.getAttribute()
进行检索。