使用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可以从会话属性中获取额外的数据。
但是,目标文件可能位于另一台服务器上,当然不会共享同一会话。
还有其他方法可以重定向到另一个网址并传递不在网址中的额外数据吗?例如,有没有办法可以定义将在HttpServletRequest中传递给目标URL的其他头文件?
答案 0 :(得分:0)
您可以向响应中添加自定义标头。这些标题将被发送给收件人,因此可以从响应的标题中读取。
response.addHeader(name, value);
request.getRequestDispatcher("target.jsp").forward(request, response);
但是,这不能扩展到当前的servlet上下文之外。如果您使用重定向:
response.sendRedirect("target.jsp");
标题丢失。
或者,您可以对URL中的数据进行编码,以便将其隐藏起来。这将要求它由客户端的收件人页面解码。
使用AJAX可能有助于隐藏数据。如果当另一台服务器上的页面被重定向到(如上所述)时,它会对服务器上的另一个servlet进行AJAX调用,该servlet会响应您要发送的数据并将其封装在响应中。