【问题标题】:Can a post request object be forwarded in another post request?一个发布请求对象可以在另一个发布请求中转发吗?
【发布时间】:2015-04-01 21:38:54
【问题描述】:

我有以下情况。我收到对我的服务器的请求。这是由 java servlet 处理的。 java servlet 调用一个jsp 文件来创建一个html 页面。 servlet 将请求对象传递给 jsp。 在 html 页面中,人们可以点击向其他页面发布请求的按钮。

我希望能够将原始请求对象(带有附加信息)传递到下一页。

1) 这可能吗? (也许从请求对象创建一个 javascript 对象?)

2) 我是不是把这一切都搞错了,我应该创建用户会话还是什么?我没有这方面的经验。

谢谢

编辑:

我认为一个例子可能会澄清一些事情。

1) 从外部站点向 servlet A 发出 post 请求。在这个 servlet 中,我执行以下操作:

protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {  

String jsp = "WEB-INF/webpage.jsp";
RequestDispatcher rd = request.getRequestDispatcher(jsp);
rd.forward(request,response);
}

然后在jsp中我这样做:

<html>
<head></head>
<body> 
    <form method="post" action="http://myurl.com/servletB" target="_self">
            <% String first_name = request.getParameter("first_name");%> 
            Hello <%= first_name %>
            What is your lastname: <input type="text" name="last_name">
            <input type="submit" value="submit">
        </form>
</body>
</html>

但在原始请求中,只有 first_name 提供了更多信息。在 servlet B 中,我需要原始请求中的所有信息 + 姓氏。

【问题讨论】:

  • 人们可以从 html 页面点击按钮,将请求发布到其他页面 - 发布请求只会发送到服务器,而不是直接发送到其他jsp页面

标签: java javascript jsp servlets post


【解决方案1】:

您说您使用的是 POST,我不会使用 307 redirect,因为您可能会遇到一些问题。我会使用会话。

【讨论】:

  • OP 不寻找重定向 - 他希望将数据从呈现表单的一个请求传递到另一个处理表单提交的请求
【解决方案2】:

增加一行&lt;input type="hidden" name="first_name" value=&lt;%=first_name %&gt;&gt;

<body> 
    <form method="post" action="http://myurl.com/servletB" target="_self">
        <% String first_name = request.getParameter("first_name");%> 
        Hello <%= first_name %>

        <input type="hidden" name="first_name" value=<%=first_name%>>

        What is your lastname: <input type="text" name="last_name">
        <input type="submit" value="submit">
    </form>
</body>

现在您可以通过request.getParameter("first_name"); 获得 servlet 中的 first_name

【讨论】:

  • 嗨,谢谢。但我的问题是,在用户点击 html 页面后,我需要返回数据。所以这是客户端。我需要在 html/javascript 中放置一些东西。
  • 更新了我的答案。我希望这就是你要找的。​​span>
  • 谢谢,确实是这个功能,我现在用这个。但是,如果有人查看源代码,他们可以看到参数。我想保持这些隐私。
  • 如果你想保持这些隐私,就像bedrin说的那样,一旦你收到来自客户端的数据,你必须将它存储在会话中。据我所知,没有别的办法……也许……
  • 好的,我会看看是否可以在不损失太多性能的情况下使用会话。感谢您的宝贵时间。
【解决方案3】:

所以你在这里有两个不同的请求 - 一个 GET 用于呈现表单,另一个 POST 用于将数据提交到服务器。

这两个请求是分开处理的,因此您应该将原始请求中的信息存储在会话中。

【讨论】:

  • 我添加了部分代码。我没有 GET 请求。仅发布。所以,如果我理解你是正确的,这应该在一个会话中完成吗? 1)你有一个很好的资源可以让我了解这个吗? 2)这对性能有很大影响吗?我的交通量很高(每小时 > 300 万)。谢谢
猜你喜欢
  • 1970-01-01
  • 2011-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-23
  • 1970-01-01
  • 1970-01-01
  • 2020-01-08
相关资源
最近更新 更多