【问题标题】:Passing variables from JSP to servlet将变量从 JSP 传递到 servlet
【发布时间】:2013-04-03 16:49:38
【问题描述】:

一直以来,当我在 Google 上搜索时,我得到了十几个答案,这些答案发布在 Stackoverflow 中,关于从 JSP 将变量传递给 servlet。 但我想知道,我没有得到答案:How to pass a variable from JSP to a servlet class? Is it possible?

其实我正在做一个简单的PhoneBook 应用程序。在这里,我必须将联系人 ID 发送到 servlet 以进行编辑和删除。我怎样才能传递这个值?

我知道,我们可以使用request.setAttribute(key, value) 将变量从 servlet 传递到 JSP 但是当我使用它在 JSP 中设置变量并再次使用session.getAttribute(key ) 获取它时,结果为空。

上帝帮助我。

【问题讨论】:

  • 如果您希望上帝帮助您,为什么要在这里发帖:-p
  • 我想知道为什么将内容放入请求并从未命名的请求中获取内容不起作用。
  • 我认为您误解了 servlet 和 jsp 上下文中 HTTP 请求的生命周期。请求到达容器,容器调用一个 servlet。 servlet 做了一些魔术并将请求转发给 jsp,基本上呈现 html。 servlet 不再有任何业务。您需要通过表单、链接、页面刷新等方式发出新的 http 请求。
  • 你可以通过向它发出请求来与servlet进行通信,即使你是从jsp进行的。
  • 您在请求中设置变量,但从会话对象中获取它,这就是您获得空值的原因。使用请求或会话相同的对象设置和获取属性。

标签: java jsp servlets httprequest


【解决方案1】:

在纯 Servlets/JSP 世界中向服务器传递/提交数据的标准方式(如从 JSP 到 servlet 的情况)是使用 HTML form,即相同方式与使用其他技术(ASP.NET、PHP 等)时一样。而且不管是纯HTML页面还是JSP页面。将数据从表单提交到服务器的推荐/最常用方法是 POST

您还可以在路径之后在请求 URL 中包含的查询字符串中传递数据(当您使用 GET 而不是 POST 时也会发生这种情况 方法)。但这是针对简单的情况,例如为分页构造 URL 等(您可以在此处查看使用附加查询构造 URL 的示例:Composing URL in JSP
URL中传参示例:
http://example.com/foo?param1=bar&page=100

使用 GETPOST 方法提交数据的区别请阅读此处:

所以你可以配置一些 servlet 来处理从 JSP 或 HTML 等发送/提交的数据。 强烈建议使用POST 方法提交数据,并在您的servlet 中分别使用doPost() 方法处理提交的数据。 然后,您将使用以下ServletRequest 方法之一获取客户端在请求中传递的参数:

这是一个很好的示例教程:Handling the Client Request: Form Data

以上教程来自以下课程:
Building Web Apps in Java: Beginning & Intermediate Servlet & JSP Tutorials


另一种使用 Java EE 交换数据的方式是将数据作为属性存储在不同的作用域中。 (以下是我对 SO 的回答之一的摘录)

Java EE 5 中有 4 个作用域(请参阅 The Java EE 5 Tutorial: Using Scope Objects)。在 Java EE 6 和 Java EE 7 中,有 5 个作用域(参见 The Java EE 6 Tutorial: Using ScopesThe Java EE 7 Tutorial: Using Scopes)。最常用的是:

  • 请求范围
  • 会话范围
  • 应用范围(Web 上下文)

您可以通过设置适当的属性在上述所有范围内存储一些数据。

以下是 Java EE API 文档中关于 请求范围ServletRequest.setAttribute(String, Object) 方法相关的引用:

void setAttribute(java.lang.String name,
                  java.lang.Object o)

在此请求中存储一个属性。 属性在之间重置 请求。这种方法最常与 请求调度程序。
...

因此,对于每个新请求,您在 request 中设置的先前属性都会丢失。在请求中设置属性后,您必须将请求转发到所需的页面。如果您重定向,这将是一个全新的请求,因此之前设置的属性将丢失。 (如果您仍想使用重定向,请阅读:Servlet Redirection to same page with error message

HttpSession(在会话范围)中设置的那些属性将在会话存在时一直存在,当然,只有会话所属的用户可以使用.

至于上下文属性,它们适用于整个 Web 应用程序(应用程序范围)和所有用户,而且只要 Web 应用程序存在,它们就会存在。

也许这篇文章也对你有用:How Java EE 6 Scopes Affect User Interactions


还要注意以下问题。你写(引用):

我知道,我们可以使用 request.setAttribute(key , value) 将变量从 servlet 传递给 jsp 但是当我使用它在 jsp 中设置变量并再次使用 session.getAttribute(key) 获取它时,结果为空。

正如用户@neel 和@Sanchit 所注意到的,您在request 对象中设置了一个属性,但试图从session 中取回它。难怪在这种情况下你会收到null


希望这会对你有所帮助。

【讨论】:

  • 我已经通过在此处发布该问题后使用查询字符串解决了该问题 :) 在这种情况下这对我来说是最好的,您的答案与该概念相似,感谢您的回答:)
【解决方案2】:

是的,当然! 从 jsp 向 jsp 传递参数的情况下,我们可以简单地使用锚标记( )。 & 然后简单地使用 parameter = request.getParameter("parameter"); 将该参数放入其他 jsp 但是在 Jsp To Servlet 的情况下,Protocol 就是 image

& in Servlet 用于检索该参数,再次使用 参数 = request.getParameter("参数");

【讨论】:

    猜你喜欢
    • 2013-06-10
    • 2011-04-06
    • 2013-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-13
    • 1970-01-01
    • 2013-11-25
    相关资源
    最近更新 更多