gpt4 book ai didi

java - JSP 不根据请求传递值

转载 作者:可可西里 更新时间:2023-11-01 17:18:08 25 4
gpt4 key购买 nike

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

小服务程序:

      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。

最佳答案

我想我已经明白出了什么问题,这是人们第一次开始使用 servlet/jsp 请求流时常犯的错误。

正如有人已经提到的,您需要换出

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

与:

request.setAttribute("TMDB_LIST", movieDbs);

现在你得到 null 的原因是因为你没有运行 servlet。您正在尝试直接访问 jsp 并期望请求变量在那里。这不是 servlet/jsp 请求流的工作方式。 servlet 设置请求变量“TMDB_LIST”并将此变量转发到 jsp 页面(“/movie-list.jsp”)。一旦您转到不同的页面,变量就会过期并且将为空。如果您尝试直接访问 jsp,它将只是 null,因为您需要 servlet 将变量传递给 jsp。我猜这就是您正在做的事情,或者您在到达 jsp 后进行了重定向。

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

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

关于java - JSP 不根据请求传递值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52821786/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com