我正在开发一个具有不同操作的Servlet,这些操作取决于不同的参数,比如默认值。但是,我希望能够在运行时通过jsp或命令行界面更改这些值。此外,还有许多不同的类(主要是每个操作的命令)需要能够访问这些参数。我应该将这些值存储在一个bean的MyProperties类中,该类包装java的Properties类以加载文件中的值,然后更改它们?还是应该将它们加载到servlet的应用程序上下文中并从那里获取/设置它们?ServletContext或属性类
回答
两者兼而有之。在ServletContextListener#contextInitialized()
的应用程序启动时,创建MyProperties
类并将其放置在servlet上下文中。然后,您可以按照常规方式从每个servlet和JSP中的servlet上下文中获取存储的实例,并相应地通过MyProperties
类来检索/操作属性。
这样你最终只能得到servlet上下文中的一个属性,而不是每个属性的无数属性。这样,你也不需要在MyProperties
里面摆弄那些不可抽象或可测试的静态和单例。
你是什么意思的静态和单身? – 2012-02-20 19:15:07
啊,你已经不使用它们了:)不要担心,只要把'MyProperties'放在servlet上下文中即可。 – BalusC 2012-02-20 19:25:47
将这些配置属性存储在数据库中。总是去数据库并获得最新的配置。如果性能是问题,那么我建议将它们缓存在数据库端,以保持简单。
如果您需要最终的性能,那么我建议您在应用程序启动时加载它们(可能是Servlet.init()或ServletContextListener)。但是这需要更多的代码来确保数据库和缓存的更新保持同步。
我应该将它们存储在ServletContext中? – 2012-02-20 19:09:35
@SotiriosDelimanolis更新了帖子 – 2012-02-20 19:14:45
您可以保留这些默认values of properties
为public static
字段的public class
,说一个属性类。您可以在应用程序的不同部分分享它们,因为您可以轻松获取并设置它们。
- 1. ServletContext属性为空
- 2. ServletContext属性和静态属性
- 3. 超时后从ServletContext中删除属性
- 4. 如何创建ServletContext的mock属性?
- 5. 类属性 - 点或等号
- 6. Aws CloudFormation:无效的模板属性或属性[类型,属性]
- 7. 属性或属性
- 8. 类:属性属性
- 9. 在控制器中获取ServletContext属性“javax.servlet.context.tmpdir”
- 10. 从JSP页面上的ServletContext获取属性
- 11. 从valueUnbound(HttpSessionBindingEvent事件)方法修改ServletContext的属性
- 12. 将自定义数据映射存储为ServletContext中的属性?
- 13. Java - 由ServletContext设置的属性的时间长度
- 14. 为什么ServletContext的getAttributeName()返回不需要的属性?
- 15. 使用ServletContext读取来自外部战争的Hibernate属性
- 16. 在Spring 3.2 MVC配置中设置ServletContext的属性
- 17. 根据machine.config中的值设置属性或类属性
- 18. 解决:检查类属性:方法,属性或不存在
- 19. TypeWriter - 过滤不具有给定属性的类或属性
- 20. 将属性限制为类或属性可行吗?
- 21. Python类属性/属性
- 22. 类和属性的属性
- 23. 将“属性”或类添加到变量
- 24. 嵌套类(或如何“组”属性)
- 25. 属性,接口或抽象类
- 26. 内部类,实例变量或属性?
- 27. 如何更改CSS属性或一类
- 28. 使用类注释或静态属性
- 29. 不具有ID或类属性
- 30. 类似于IndexedParam或IndexedVar的.get()属性
在**运行期间,您是否必须更改这些值**? – home 2012-02-20 19:13:46