java - JSP doesn't pass values on request
问题描述
I'don't understand why servlet doesn't pass values to .jsp file. If somebody could explain my, why it works only when a call request.getSession.setAtribute() method. What should i do to avoid creating session.
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 file:
<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>
As I mentioned before it works when I use requset.getSession(), but whitout it passed value is 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 后有一个重定向。
会话变量的不同之处在于,只要服务器指定,您设置的变量就会在整个应用程序/网站中持续存在(直到您删除或更改它们)。
请求变量仅在第一次请求后可用。(即servlet将请求变量传递给jsp或jsp将请求变量传递给servlet)
推荐阅读
- php - Postmates API 不工作 - “ForbiddenError”
- r - 如何在 R Shiny 中存储复选框输入的值?
- vba - 在 MS-Access 中通过 VBA 进行 Google 搜索
- api - tensorflow object detection api中定义的损失打印函数在哪里?
- python - 使用 Python 分割文件路径
- graphql - Apollo/GraphQL 在询问 ID 时无法获取引用的实体
- laravel - 响应性在 Vue 组件中不起作用
- json - 为什么我在颤动中看到这张地图的编码问题
- amazon-web-services - 在 AWS Log Insights 中获取更改字段
- reactjs - 对于使用 JWT 将 JWT 的一些有效负载存储在 redux 状态的 react-redux 应用程序是否有问题?