2014-01-04 4 views
0

[работа с JEE, MVC, сервлеты, JSP] В web.xml я уточнили home.jsp страницу в качестве точки входа в приложение:Как запустить выполнение сервлета при запуске приложения?

<welcome-file-list> 
    <welcome-file>/home.jsp</welcome-file> 
</welcome-file-list> 

В моем приложении у меня есть следующий сервлет:

@WebServlet("/show") 
public class ShowPostsController extends HttpServlet { 

    private static final long serialVersionUID = 1L; 

    @EJB 
    private PostDAOLocal postDao; 

    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
    throws ServletException, IOException 
    { 

     List<Post> posts = null; 

     String sort = request.getParameter("sort"); 
     // current page number 
     int page = Integer.parseInt(request.getParameter("page")); 
     // the number of entries to show on a "page" 
     int postsPerPage = Integer.parseInt(request.getParameter("postsPerPage")); 

     if(sort.equals("byVisitors")) 
      posts = postDao.getMostVisitedPosts(); 
     else if(sort.equals("byComments")) 
      posts = postDao.getMostCommentedPosts(); 
     else 
       posts = postDao.getNewestPosts(page, postsPerPage); 

     request.setAttribute("posts", posts); 
     RequestDispatcher dispatcher = request.getRequestDispatcher("home.jsp"); 
     dispatcher.forward(request, response); 
    } 

Теперь, как я могу сделать, чтобы этот сервлет был вызван до загрузки страницы home.jsp, при запуске приложения? (Потому что я хотел бы показать некоторые данные о home.jsp, которые извлекаются из базы данных, а также запрос атрибутов внутри doGet метод сервлета)

+0

Вы не можете это сделать при запуске приложения, потому что нет никакого запроса при запуске приложения , –

+0

@Sotirios Да, вот почему я не знаю, как отправить эти данные 'posts' на страницу' home.jsp'. – Vladimir

+0

Вы используете свой сервлет как есть. –

ответ

1

Теперь, как я могу заставить заставить этот сервлет запускаться до загрузки страницы home.jsp, при запуске приложения?

Если по «при запуске приложения» вы имеете в виду «когда приложение доступно в первый раз пользователя, используя путь по умолчанию» и все, что вы хотите, это сервлет будет называться по умолчанию вместо СПЯ, то попробуйте заменить /home.jsp на /show в вашем welcome-file-list, например:

<welcome-file-list> 
    <welcome-file>/show</welcome-file> 
</welcome-file-list> 

Если это не сработает, попробуйте без слэш перед тем show.

Редактировать: Относительно другого вопроса в комментариях. Чтобы использовать значения по умолчанию, вы можете проверить, если getParameter() возвращает нулевое значение, и если это произойдет, присвоить значение по умолчанию для локальной переменной, например:

String sort = request.getParameter("sort"); 
if (sort == null) { 
    sort = "someDefaultValue"; 
} 
+0

нет, это не работает – Vladimir

+0

Не могли бы вы быть более конкретными? Что не работает? Есть ли сообщение об ошибке? –

+0

мои приговоры. он загружает сервлет. Я получал исключение из-за кода в методе doGet, где считываются параметры запроса. Теперь, как я могу проверить, что если это запуск приложения, поместить некоторые начальные значения в эти атрибуты ('sort, page, postsPerPage')? Я имею в виду, когда эти параметры не запрашиваются, а сервлет вызывается. – Vladimir

1

ли загрузить сервлет при запуске приложения вам нужно отредактировать файл web.xml

<servlet> 
<servlet-name>******</servlet-name> 
<display-name>******</display-name> 
<servlet-class>******</servlet-class> 
<load-on-startup>1</load-on-startup> 
</servlet> 
+0

ok, я добавил параметр 'loadOnStartup = 1' в качестве параметра в @WebServlet (я использую аннотацию). Но теперь, если вы посмотрите на контент сервлета, я читаю некоторые данные из базы данных ('posts'), добавляя их к запросу как' request.setAttribute («posts», posts); 'и пересылка на' home.jsp' , Как выполнить эти же действия при запуске приложения? Потому что на 'home.jsp' я показываю эти данные' posts'. – Vladimir

+0

Почему вы не устанавливаете все, что вам нужно, в сеансе вашего сервлета. Кроме того, из home.jsp вы можете получить необходимые данные из своего сеанса – sanket

+0

, при запуске приложения нет 'request', так как я могу использовать сеанс? – Vladimir

Смежные вопросы