GWT:如何在服务器开始监听之前初始化后端?
GWT: How do I initialize the back-end before the server starts listening?
我正在用 GWT 编写 Web 应用程序。目前我拥有的唯一服务器端逻辑是 class 中包含的一些 RPC 调用,它扩展了 RemoteServiceServlet
。 class 的结构如下所示:
public class ProjectActionsImpl extends RemoteServiceServlet
implements ProjectActions {
public ProjectActionsImpl() {
... *lots* of preparations ...
}
public String action1(String request) {
...
}
public String action2(String request) {
...
}
...
}
但我刚刚意识到我在构造函数中的初始化工作太多,第一次调用需要几十秒才能响应。我可以想象这对第一个用户来说会很烦人。
有没有办法在服务器启动的那一刻和服务器开始监听之前初始化后端?
您可以尝试使用 ServletContextListener。检查这个:
http://www.mkyong.com/servlet/what-is-listener-servletcontextlistener-example/。
简而言之,您定义了一个上下文侦听器,它在 web 应用程序启动时被触发,您可以在那里初始化您的服务器端逻辑。这是一个例子:
public class MyServletContextListener implements ServletContextListener{
@Override
public void contextInitialized(ServletContextEvent ctxEvt) {
System.out.println("this runs at web app startup");
}
@Override
public void contextDestroyed(ServletContextEvent ctxEvt) {
System.out.println("this runs when you stop the app");
}
}
然后你在 web.xml 中注册它,使用 和 标签(如果你使用 servlet spec v.3,你可以注释 class 用 @WebListener 代替)。
我正在用 GWT 编写 Web 应用程序。目前我拥有的唯一服务器端逻辑是 class 中包含的一些 RPC 调用,它扩展了 RemoteServiceServlet
。 class 的结构如下所示:
public class ProjectActionsImpl extends RemoteServiceServlet
implements ProjectActions {
public ProjectActionsImpl() {
... *lots* of preparations ...
}
public String action1(String request) {
...
}
public String action2(String request) {
...
}
...
}
但我刚刚意识到我在构造函数中的初始化工作太多,第一次调用需要几十秒才能响应。我可以想象这对第一个用户来说会很烦人。
有没有办法在服务器启动的那一刻和服务器开始监听之前初始化后端?
您可以尝试使用 ServletContextListener。检查这个: http://www.mkyong.com/servlet/what-is-listener-servletcontextlistener-example/。 简而言之,您定义了一个上下文侦听器,它在 web 应用程序启动时被触发,您可以在那里初始化您的服务器端逻辑。这是一个例子:
public class MyServletContextListener implements ServletContextListener{
@Override
public void contextInitialized(ServletContextEvent ctxEvt) {
System.out.println("this runs at web app startup");
}
@Override
public void contextDestroyed(ServletContextEvent ctxEvt) {
System.out.println("this runs when you stop the app");
}
}
然后你在 web.xml 中注册它,使用