JSP не передает значения по запросу - PullRequest
0 голосов
/ 15 октября 2018

Я не пойму, почему сервлет не передает значения в файл .jsp.Если кто-то может объяснить мой, почему это работает только при вызове метода request.getSession.setAtribute ().Что я должен сделать, чтобы избежать создания сеанса.

Сервлет:

      protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    try {
        moviesList(request, response);
        if (request.getParameter("command").equals("ADD"))
            addMovie(request, response);
        if (request.getParameter("command").equals("DELETE"))
            deleteMovie(request, response);
        if (request.getParameter("command").equals("SEARCH_IN_TMDB"))
            searchInTmdb(request, response);
    } catch (Exception e) {
        e.getMessage();
    }

}
  private void searchInTmdb(HttpServletRequest request, HttpServletResponse response) throws Exception {
    List<MovieDb> movieDbs;
    String title = request.getParameter("title_themoviedb");
    String year = request.getParameter("year_themoviedb");
    System.out.println("title " + title + " year " + year);
    int year_int = Integer.parseInt(year);
    movieDbs = TheMovieDbApiUtil.getInstance().getListFoundMovies(title, year_int);

    request.getSession().setAttribute("TMDB_LIST", movieDbs);
    RequestDispatcher dispatcher = request.getRequestDispatcher("/movie-list.jsp");
    dispatcher.forward(request, response);
}

Файл JSP:

 <div class="row top-buffer">
    <form action="ServletMovieController" method="get">
        <input type="hidden" name="command" value="SEARCH_IN_TMDB">
    <div class="col-xs-3 col-sm-3 col-md-3 col-lg-3">
    </div>
    <div class="col-xs-6 col-sm-6 col-md-6 col-lg-6">
        <button type="submit">Szukaj...</button>

        <input type="text" name="title_themoviedb" title="title_themoviedb" class="form-control">

        <input type="text" name="year_themoviedb"  title="year_themoviedb"  class="form-control">
        <ul class="list-group" id="myList">
            <c:forEach var="tempMovieTmdb" items="${TMDB_LIST}">
            <li class="list-group-item">${tempMovieTmdb.getTitle()}</li>
            </c:forEach>
        </ul>
        </input>
    </div>
    <div class="col-xs-3 col-sm-3 col-md-3 col-lg-3">
    </div>
    </form>
</div>

Как я уже говорил, он работает, когда я использую Requset.getSession(), но без переданного значения оно равно нулю.

Ответы [ 2 ]

0 голосов
/ 15 октября 2018

Мне кажется, я понял, что происходит не так, и это обычная ошибка, которую люди делают, когда впервые начинают работать с потоком запросов servlet / jsp.

Как уже упоминалось, вам нужно поменять

request.getSession().setAttribute("TMDB_LIST", movieDbs);

на:

request.setAttribute("TMDB_LIST", movieDbs);

Теперь причина, по которой вы получаете ноль, заключается в том, что выне работает сервлет.Вы пытаетесь получить доступ к jsp напрямую и ожидаете, что переменная запроса будет там.Это не так, как поток запросов сервлет / JSP работает.Сервлет устанавливает переменную запроса «TMDB_LIST» и перенаправляет эту переменную на страницу jsp («/movie-list.jsp»).Как только вы перейдете на другую страницу, срок действия переменной истечет и будет нулевым.Если вы попытаетесь получить доступ к jsp напрямую, он будет нулевым, потому что вам нужен сервлет для передачи переменной в jsp.Я предполагаю, что это то, что вы делаете, или у вас есть редирект после достижения JSP.

Переменные сеанса отличаются тем, что установленные вами переменные сохраняются во всем приложении / веб-сайте (до тех пор, пока вы не удалите их или не измените их) в течение всего времени, указанного сервером.

Переменные запроса доступны только после первого запроса.(т.е. сервлет передает переменные запроса в jsp или jsp передает переменные запроса в сервлет)

0 голосов
/ 15 октября 2018

, если вы хотите избежать использования Session, в вашем сервлете используйте

request.setAttribute("TMDB_LIST", movieDbs);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...