2013-11-15 3 views
0

Я реализовал ServletContextListener в Простой класс java. Теперь внутри этого я вызвал метод для выполнения, как только contextInitialized из ServletContextListener runs.The характер вызванного метода заключается в том, что он является сложным и требует много времени для выполнения. Существует только одна веб-страница с именем index.jsp, которая является приветственной страницей, которая должна отображаться в браузере, как только запускается веб-приложение, но это не отображается, поскольку выполняется первый вызванный метод, и требуется много времени для выполнения.ServletContextListener останавливает развертывание веб-приложения на Apache Tomcat

Мне нужна приветственная страница для отображения и функции, вызываемой в контексте сервлете для выполнения в фоновом режиме ..

Вот мой класс .. контекст сервлета

public class Startup implements ServletContextListener 
{ 
@Override 
public void contextDestroyed(ServletContextEvent sce) {} 

@Override 
public void contextInitialized(ServletContextEvent sce) 
{ 
    // Do your startup work here 
    executeprocess(); 
} 

} 

и вот мой файл web.xml ..

<welcome-file-list> 
    <welcome-file>index.jsp</welcome-file> 
</welcome-file-list> 
<listener> 
    <listener-class>org.myapp.Startup</listener-class> 
</listener> 

Пожалуйста, помогите мне. Заранее спасибо.

+0

Почему бы вам не передать операцию в отдельном потоке? –

+0

@ Kal это невозможно сделать таким образом. – Adi

+1

Что конкретно вы тогда задаете? Не могли бы вы предоставить более подробную информацию? –

ответ

6

Попробуйте добавить нить, как показано ниже:

@Override public void contextInitialized(ServletContextEvent sce) { 
new Thread(new Runnable() { 
    @Override 
    public void run() { 
     executeprocess(); 
    } 
}).start();} 
+0

Спасибо, сэр за ур ответ. У меня есть одно сомнение по вышеуказанному коду, что при добавлении выше фрагмента кода первая страница приветствия будет запущена, а затем выполнитьпроцесс(); будет называться ... Я прав? – Adi

2

Метод contextInitialized приостанавливает развертывание до тех пор, пока метод не завершится.

+0

Затем, как решить проблему, указанную выше – Adi

+1

Если вы действительно хотите запустить ее как часть развертывание, и вы не хотите ждать завершения метода, тогда вам нужно использовать потоки. –

+0

У меня есть сомнения, что tomcat развертывает проект каждый раз, когда перезагружается компьютер? – Adi