Servlets ServletContextListener和ServletRequestListener之间的区别是什么?

Servlets ServletContextListener和ServletRequestListener之间的区别是什么?,servlets,jakarta-ee,listener,Servlets,Jakarta Ee,Listener,我想通过从web.xml提取数据库参数,将数据库连接放入侦听器。我知道我必须将连接放入ServletContextListener,但是我可以将连接放入ServletRequestListener吗?或者至少告诉我应该在哪里使用ServletRequestListener 我只想对它做一些小的澄清ServletContextListener(在初始化和销毁上下文时) 如果要在部署web应用程序时执行某些操作,则应使用ServletContextListener 在哪里使用?类似于创建连接池。事

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


我只想对它做一些小的澄清

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

  • 如果要在部署web应用程序时执行某些操作,则应使用ServletContextListener
  • 在哪里使用?类似于创建连接池。事实上,我使用它在
    hashmaps
    中存储主表数据(如国家/地区列表、countryWiseState列表等),并将这些
    hashmaps
    存储在
    应用程序范围
    中,这样做减少了不必要的数据库获取

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

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

ServletContextListener会在整个应用程序启动或关闭时被调用(不太常见),ServletRequestListener会在每个客户请求时被调用(可能每分钟调用数千次甚至数百万次,具体取决于流量)@SeanPatrickFloyd,所以如果在多次调用servletRequestListener时将连接放入servletRequestListener中,这是不好的。我同意,这听起来是个非常糟糕的主意。servlet请求不应该知道数据库连接。但理想情况下,我会更进一步,使您的整个web层独立于持久层。请选择它作为答案,如果您觉得它有用的话。