我有一个在tomcat下运行的java web应用程序。在这个应用程序中,我们有很多常量下拉列表(其中多个页面上显示相同的值和相同的下拉列表)。所以也许我们有一个用户类型的下拉列表(全职,兼职,承包商,临时)。用户类型的这些值存储在枚举中。我们目前必须为使用它的每个页面手动加载枚举值。我们可能有10-15页需要显示用户类型的下拉值。
我们正在考虑通过setAttribute将一些常量枚举值添加到ServletContext中。这样做的好处是所有的常量下拉值都可以在任何地方使用,而无需手动将其添加到页面中,并且它将在一个中心位置更新。
缺点是我们担心在上下文中添加枚举会产生性能影响。 tomcat如何存储上下文属性?在我们的例子中,会话存储在jdbc数据库中,在会话中存储任何内容都是一个严重的性能问题(因为我们的数据库服务器速度非常慢)。
在ServletContext via setAttribute中存储常量枚举值是不是一种好的或坏的做法?如果这是一个不好的做法,什么是一个好的替代方案(除了手动将常量添加到需要它的每个页面)?在ServletContext上使用setAttribute还有其他负面影响吗?
谢谢!
答案 0 :(得分:0)
假设枚举是
enum aEnum {s1, s2, s3}
然后你可以得到这样的所有价值。
aEnum.values();
将其作为
循环 Arrays.asList(aEnum.values()).forEach(e -> System.out.println(e)); }
如果会话实现速度非常快,那么将它存储在会话中就不会有任何问题。但正如您所说,会话存储在数据库中。每次检索值时,都会调用数据库查询,这是一个IO操作,可能会减慢页面加载时间。避免不必要的查询会提高性能。