Запуск сервлета при старте приложения

Я хочу начать с запуска класса сервлета перед загрузкой jsp-страницы, потому что мне нужно заполнить некоторые данные из базы данных на jsp-странице. Отображение сервлета в web.xml

    <servlet>
        <servlet-name>Index</servlet-name>
        <servlet-class>com.Teklabz.Servlets.IndexServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>Index</servlet-name>
        <url-pattern>/index</url-pattern>
    </servlet-mapping>

но это не сработало, при отслеживании кода он никогда не достигал класса сервлета. Также я пытался использовать ServletContextListener, как эта ссылка, но столкнулся с той же проблемой.

код слушателя:

public class ServletListener implements ServletContextListener{

    @Override
    public void contextInitialized(ServletContextEvent sce) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        throw new UnsupportedOperationException("Not supported yet.");
    }
}

код web.xml:

    <listener>
        <listener-class>com.techlabz.listener.ServletListener</listener-class>
    </listener>

Я не знаю, что делаю неправильно.


person IBRA    schedule 08.01.2013    source источник
comment
Ваш вопрос сбивает с толку. Пожалуйста, проясните, что не работает? И чего вы хотите добиться. Рад помочь вам.   -  person Ramesh PVK    schedule 08.01.2013
comment
Что означает запуск сервлета? Контейнер может загружать сервлет при запуске, что означает, что все, что находится внутри метода init, будет выполняться при запуске.   -  person amicngh    schedule 08.01.2013
comment
Мне кажется, что вы хотите на самом деле перейти к сервлету или отправить его, а затем — вперед — к JSP. Таким образом, сервлет может работать с базой данных, подготавливать красивую структуру объекта в области запроса, а затем JSP может взять эту информацию и отобразить ее.   -  person Gimby    schedule 08.01.2013
comment
@RameshPVK спасибо, код никогда не достигает кода сервлета, всегда начинайте со страницы jsp. Я пытался использовать прослушиватель сервлетов, но не работал.   -  person IBRA    schedule 08.01.2013
comment
@Gimby, точно, я пытаюсь получить данные из базы данных в сервлете и отправить их на страницу jsp. но сервлет не запускался при запуске приложения   -  person IBRA    schedule 08.01.2013
comment
в этом случае вам нужно вызвать сервлет, а затем перенаправить запрос в jsp, а не напрямую обращаться к jsp, в противном случае вы помещаете код db в метод инициализации com.Teklabz.Servlets.IndexServlet   -  person amicngh    schedule 08.01.2013


Ответы (2)


Есть несколько способов добиться этого..

  1. Либо вы можете заполнить данные в сервисном методе com.Teklabz.Servlets.IndexServlet, а затем установить данные в атрибуте request, а затем перенаправить на этот jsp.
  2. Если вы хотите использовать loadonstartiup, вы можете заполнить данные из db в методе init com.Teklabz.Servlets.IndexServlet сервлета, а затем установить его в какой-либо доступной области(request,session,context) и путем прямого доступа к jsp получить данные из этой области.
  3. В слушателе вы также можете сделать это, но в этом случае вам также необходимо установить данные в некоторой области.
person amicngh    schedule 08.01.2013

ваш код абсолютно правильный. вам нужно добавить аннотацию @WebListener

  @WebListener
   public class ServletListener implements ServletContextListener{
    //your code
   }
person Nitesh Singh Rajput    schedule 08.01.2013
comment
Обратите внимание, что аннотация — это еще один способ избежать определения в web.xml. - person Ramesh PVK; 08.01.2013