【问题标题】:What is the difference between ServletContextListener and ServletRequestListener?ServletContextListener 和 ServletRequestListener 有什么区别?
【发布时间】:2016-07-01 09:44:14
【问题描述】:

我想通过从 web.xml 中提取数据库参数来将数据库连接放入侦听器。我知道我必须将连接放入 ServletContextListener 但我可以放入 ServletRequestListener 或至少告诉我应该在哪里使用 ServletRequestListener?

我只想对它做一些小小的说明

【问题讨论】:

  • 一个 ServletContextListener 在你的整个应用程序启动或关闭时被调用(不那么频繁),一个 ServletRequestListener 被调用每个客户请求(可能每分钟数千甚至数百万次,取决于流量)
  • @SeanPatrickFloyd 因此,如果我将连接放入 servletRequestListener 并不好,因为它会被多次调用。
  • 我同意,这听起来是个非常糟糕的主意。 servlet 请求不应该知道数据库连接。但理想情况下,我会更进一步,让您的整个 Web 层独立于持久层

标签: servlets jakarta-ee listener


【解决方案1】:

ServletContextListener(在上下文初始化和销毁​​时)

  • 如果您想在部署 Web 应用程序时执行一些操作,那么您应该使用 ServletContextListener
  • 在哪里使用?比如创建连接池。事实上,我已经用它在hashmaps 中存储主表数据(如国家/地区列表、countryWiseState 列表等)并将这些hashmaps 存储在application scope 中,这样做,我减少了不必要的数据库获取。

.

ServletRequestListener(在请求进入和离开范围时被调用)

  • ServletRequestListener 可以由有兴趣在 Web 组件中接收和超出范围的请求通知的开发人员实现。一个请求在即将进入每个 Web 应用程序中的第一个 servlet 或过滤器时被定义为进入范围,当它退出链中的最后一个 servlet 或第一个过滤器时被定义为超出范围。

【讨论】:

  • 感谢您的回答。
  • 如果您觉得有用,请选择它作为答案。
猜你喜欢
  • 1970-01-01
  • 2010-10-02
  • 2011-12-12
  • 2010-09-16
  • 2012-03-14
  • 2012-02-06
  • 2011-02-25
  • 2011-11-22
  • 2015-03-26
相关资源
最近更新 更多