【问题标题】:JSP and Servlet setAttribute [duplicate]JSP和Servlet setAttribute [重复]
【发布时间】:2012-11-15 08:54:24
【问题描述】:

我的问题很简单,但我对此感到困惑,请帮助我。

在 JSP 中,我从 Servlet1 接收一个 Attribute(idsList),我想将此 Attribute(idsList) 发送到另一个 servlet,Servlet2,但我可以使用 session.setAttribute() 来完成。我的问题是,我们如何在 JSP 本身中发送到 Servlet2?

这是我的代码,但它不起作用,因为使用相同的请求来设置和获取。 请帮个忙。

在 Servlet1 中:

request.setAttribute("idsList",idsList);---is null

在 JSP 中

List<Integer> idsList =(List<Integer>)request.getAttribute("idsList");
System.out.println("size of ids list :"+idsList.size());
request.setAttribute("idsList",idsList);

在 Servlet2 中:

request.getAttribute("idsList");---is null

【问题讨论】:

  • 你在 JSP 中使用setAttribute获得价值吗?
  • 这会返回什么? System.out.println("size of ids list :"+idsList.size());
  • 你在 JSP 中使用 setAttribute 获得价值吗?是的
  • System.out.println("ids 列表大小:"+idsList.size());返回 5
  • 您未能理解单个 HTTP 请求的生命周期和范围。仔细阅读:stackoverflow.com/questions/3106452/…

标签: java jsp servlets


【解决方案1】:

使用RequestDispatcher 转发您的请求,如下所示:

request.setAttribute("idsList",idsList);
RequestDispatcher rd = getServletContext().getRequestDispatcher("servlet2");
rd.forward(request, response);

您可以在 servlet2 上使用request.getAttribute("idsList")

不要使用response.sendRedirect() 发送request 对象。

编辑:

我在您的问题下方找到了一条评论:

你在 JSP 中使用 setAttribute 获取价值吗?是的

一般来说,JSP 被用作 VIEW 透视图,所以,

不应包含业务逻辑

【讨论】:

  • 它只是为了测试目的没有逻辑
【解决方案2】:

如果你使用RequestDispatcher转发请求,那么请求对象是一样的。

但是如果你使用response.sendRedirect(),将会创建一个新的请求对象,并且无法检索之前请求对象中设置的属性。

【讨论】:

    【解决方案3】:

    您在其中设置属性的请求对象, 提交 jsp 时,请求将结束,并创建一个新的请求对象。

    您可以使用会话来设置属性,也可以在表单中设置一个隐藏字段,当提交给 servlet 时

    正如 Munesh 所建议的,您需要再次确认,您是如何将控制权转发给 JSP 1) 发送重定向 2) 请求调度器

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-04
      • 2018-05-16
      • 2011-07-24
      • 2021-06-29
      • 2014-02-01
      • 2015-04-01
      • 2013-03-27
      相关资源
      最近更新 更多