JSP不会根据要求传递值

时间:2018-10-15 17:20:24

标签: java http jsp servlets

我不明白为什么servlet不会将值传递给.jsp文件。如果有人可以解释我的观点,那为什么只有在调用request.getSession.setAtribute()方法时才能起作用。我应该怎么做才能避免创建会话。

Servlet:

      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()时,它可以正常工作,但是传递的值是null。

2 个答案:

答案 0 :(得分:1)

我认为我已经理解了出了什么问题,这是人们在开始使用servlet / jsp请求流时经常犯的一个错误。

由于有人已经提到您需要换出

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

具有:

request.setAttribute("TMDB_LIST", movieDbs);

现在之所以成为null的原因是因为您没有运行servlet。您正在尝试直接访问jsp,并期望request变量在那里。 servlet / jsp请求流不是这样工作的。 Servlet设置请求变量“ TMDB_LIST”,并将该变量转发到jsp页面(“ /movie-list.jsp”)。转到其他页面后,变量将过期并且为空。如果尝试直接访问jsp,则它将为null,因为您需要servlet将变量传递给jsp。我猜这是您在做什么,或者您在到达jsp之后进行了重定向。

会话变量的不同之处在于,只要服务器指定,您设置的变量就会在整个应用程序/网站中持久存在(直到您删除或更改它们)。

请求变量仅在第一个请求之后可用。 (即servlet将请求变量传递给jsp或jsp将请求变量传递给servlet)

答案 1 :(得分:0)

如果要避免使用Session,请在servlet中使用

request.setAttribute("TMDB_LIST", movieDbs);