在servlet和jsp之间传输数据的最佳方法是什么?

时间:2011-08-18 09:11:24

标签: jsp servlets

首先尝试:

我在servlet中生成数据,然后在请求中将其设置为属性,并通过调用requestDispatcher将该请求发送到jsp,如下所示:

request.setAttribute("data",data);
request.getRequestDispatcher("/page.jsp").forward(request, response);

现在在jsp中访问它并显示数据。

这样可以正常工作,但每次用户刷新页面时都会收到提示,说明您要重新提交表单并要求确认。这很烦人。

第二次尝试:

将数据放入会话并在jsp页面中访问。这样,会话变得非常繁重,因为数据量很大。

所以我的问题是将数据从servlet传递到jsp的最佳方法是什么? 这里的数据是对象列表。

1 个答案:

答案 0 :(得分:2)

你的第一个解决方案是好的解决方案。使用会话来保存特定于单个请求的数据不是一个好习惯。用户获得确认消息的事实与数据从servlet传递到JSP的方式无关。这与他们正在查看和刷新的页面是POST请求的结果有关。

使用Redirect after Post (or Post-Redirect-Get) pattern来避免此问题。

例如,假设您要保存新产品,并在保存产品后(使用POST请求),您希望显示产品的类别页面。它会这样:

  1. 提交“保存产品”表单
  2. 将产品存储在数据库中,并获取其类别ID(456)
  3. 将重定向发送到网址productCategory?categoryId = 456
  4. 用户自动转到上述网址
  5. 从数据库中获取类别456的数据
  6. 将此数据放入请求属性并转发productCategory.jsp页面
  7. 用户会看到产品类别页面,其中包含刚刚保存的新产品。如果他刷新,它会重新显示该类别而不进行确认,也不会重新提交“保存产品”表单。