【问题标题】:Initialising Java Web App [duplicate]初始化 Java Web App [重复]
【发布时间】:2010-09-23 14:39:02
【问题描述】:

我有一个简单的网络应用程序,有几个 jsp 页面、servlet 和 pojo。我想在发出任何请求之前初始化连接池。做这个的最好方式是什么?可以在第一次部署应用时完成,还是必须等到第一个请求进来?

【问题讨论】:

  • 请不要对我的重新标记感到不安。虽然你和我(以及其他人)知道它真的拼写为“初始化”,但接受的标签是“初始化”。

标签: java servlets initialization web-applications


【解决方案1】:

使用 ServletContextListener 并在 web.xml 中正确声明它。这种方式比启动 servlet 更可取。它更有条理,你的意图很明显。它也保证在任何请求之前运行。它还为您提供了一个关闭挂钩来清除池。

这是我的 web.xml 中的一个 sn-p,例如:

<listener>
  <listener-class>
    com...ApplicationListener
  </listener-class>
</listener>

这是类本身的代码 sn-p。确保您捕获异常,以免它们传播到您的服务器应用程序,并提供有用的日志消息 - 这些将在您跟踪应用程序时为您提供帮助。

public class ApplicationListener implements ServletContextListener {

  private ServletContext sc = null;

  private Logger log = Logger
    .getLogger(ApplicationListener.class);

  public void contextInitialized(ServletContextEvent arg0) {
    this.sc = arg0.getServletContext();
    try {
      // initialization code
    } catch (Exception e) {
      log.error("oops", e);
    }
    log.info("webapp started");
  }

  public void contextDestroyed(ServletContextEvent arg0) {
    try {
      // shutdown code
    } catch (Exception e) {
      log.error("oops", e);
    }
    this.sc = null;
    log.info("webapp stopped");
  }

}

请参阅 api here 和示例 here

【讨论】:

  • 您认为“哎呀”是一个有用的信息? :-)
  • 这是最普遍接受的表明确实有问题的迹象:)
【解决方案2】:

用于初始化连接池的基本启动 servlet 怎么样?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-24
    • 2018-12-09
    • 2013-02-10
    相关资源
    最近更新 更多