2013-10-11 46 views
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可以从会话属性的额外数据。

但是,目标文件可能位于另一台服务器上,当然这不会共享相同的会话。

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

回答

0

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

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

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

response.sendRedirect("target.jsp"); 

标头丢失。

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

使用AJAX可能有助于隐藏数据。如果其他服务器上的页面被重定向到(如上所述),那么它会对您的服务器上的另一个servlet进行AJAX调用,该servlet响应您希望将其发送的数据封装在响应中。

+0

非常感谢您的回复。不幸的是,目标页面位于不同的应用程序中,因此标题不能通过。我怀疑我将不得不通过URL传递数据。 – cliveb

+0

将数据作为参数传递将是最简单的解决方案,如果数据不敏感,则不应该是个问题。顺便说一句,如果你想出了一个更好的解决方案,在这里发布,我很想知道它。 – Alex