Java 显示默认页面,直到服务器启动

Java 显示默认页面,直到服务器启动,java,tomcat,servlets,spring-mvc,jetty,Java,Tomcat,Servlets,Spring Mvc,Jetty,我想显示一个默认的自定义页面,直到我的服务器完全启动 问题陈述:我在服务器启动时只做了一些设置工作,因此服务器启动需要很长时间。所以在此期间,如果有用户点击了主页url,服务器会统计数据,所以他会看到一些默认页面,显示服务器正在启动..等等 现在的问题是,如果服务器没有完全启动,我的应用程序上下文也没有完全加载,并且对命中的响应是“中止的”,这不是HTTP响应,那么我如何捕获该响应并显示一些错误页面呢 服务器可以是jetty、tomcat any一个快速而肮脏的示例: public class

我想显示一个默认的自定义页面,直到我的服务器完全启动

问题陈述:我在服务器启动时只做了一些设置工作,因此服务器启动需要很长时间。所以在此期间,如果有用户点击了主页url,服务器会统计数据,所以他会看到一些默认页面,显示服务器正在启动..等等

现在的问题是,如果服务器没有完全启动,我的应用程序上下文也没有完全加载,并且对命中的响应是“中止的”,这不是HTTP响应,那么我如何捕获该响应并显示一些错误页面呢


服务器可以是jetty、tomcat any

一个快速而肮脏的示例:

public class DeferringServlet extends HttpServlet {

  private static final Logger logger = Logger.getLogger(DeferringServlet.class);

  private MyApp myApp;
  private Thread appInitializerThread;

  public void init() {
    myApp = new MyApp();
    appInitializerThread = new Thread(new Runnable() {
      public void run() {
        myApp.init();
      }
    });
    appInitializerThread.start();
  }

  protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
    if(myApp.isInitialized()) {
      myApp.doGet(req, resp);
    } else {
      myApp.setStatus(503); //Service unavailable
      myApp.getWriter.println("Please wait.  App is loading");
    }
  }

  public void destroy() {
    if(appInitializerThread.isAlive()) {
      appInitializerThread.interrupt();
    }
    try {
      appInitializerThread.join();
    } catch (InterruptedException ex) {
      logger.warn("Interrupted before app initializer could finish");
    }
  }

}

如果服务器尚未完全初始化,它将无法处理请求。是的,正确..但是有没有办法在服务器启动之前显示一些默认页面…当然有。例如,Artifactory就是这样做的。但是,您必须将长的设置代码从servlet初始化中移出,并转移到其他后台工作线程中。servlet初始化应该只是启动工作线程。然后,您应该有一个servlet,用于检查应用程序是否已初始化并做出适当响应。