0

使用 JSP,我需要在进行一些基本检查后重定向到另一个页面。需要为目标 URL 提供一些额外的数据(与所做的检查相关)。一种明显的方法是:

String extraData = [calculate extra data];
response.setHeader("Loction", "target.jsp?extradata=" + extraData);

但是,我不想在浏览器的地址框中向用户公开额外的数据。

由于所有这些都在 JSP 中,另一个选项是设置会话属性:

String extraData = [calculate extra data];
session.setAttribute("extradata", extraData);
response.setHeader("Location", "target.jsp");

然后 target.jsp 可以从 session 属性中获取额外的数据。

但是,目标文件可能在另一台服务器上,当然不会共享同一个会话。

有没有其他方法可以重定向到另一个 URL 并传递不在 URL 本身中的额外数据?例如,是否有任何方法可以定义将在 HttpServletRequest 中传递到目标 URL 的附加标头?

4

1 回答 1

1

您可以将自定义标头添加到响应中。这些标头将发送给收件人,因此可以从响应的标头中读取。

 response.addHeader(name, value);
 request.getRequestDispatcher("target.jsp").forward(request, response);

但是,这不能扩展到当前 servlet 上下文之外。如果您使用重定向:

  response.sendRedirect("target.jsp");

标题丢失了。

或者,您可以对 URL 中的数据进行编码,以便将其隐藏起来。这将要求它由客户端的收件人页面解码。

使用 AJAX 可能有助于隐藏数据。如果当另一台服务器上的页面被重定向到(如上所述)时,它会向服务器上的另一个 servlet 发出 AJAX 调用,该 servlet 以封装在响应中的数据进行响应。

于 2013-10-11T09:15:25.963 回答