2

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

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

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

神救救我。

4

2 回答 2

9

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

您还可以在路径后面的请求 URL 中包含的查询字符串中传递数据(当您在表单中使用GET方法而不是POST时也会发生这种情况)。但这是针对简单的情况,例如为分页构造 URL 等(您可以在此处查看使用附加查询构造 URL 的示例:在 JSP 中编写 URL) 在 URL 中传递参数的示例:

http://example.com/foo?param1=bar&page=100

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

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

这是一个很好的示例教程:处理客户端请求:表单数据

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


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

Java EE 5 中有4 个作用域(请参阅Java EE 5 教程:使用作用域对象)。在 Java EE 6 和 Java EE 7 中有5 个作用域(请参阅Java EE 6 教程:使用作用域Java EE 7 教程:使用作用域)。最常用的是:

  • 请求范围
  • 会话范围
  • 应用范围(Web Context)

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

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

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

在此请求中存储一个属性。在请求之间重置属性。此方法最常与 RequestDispatcher 结合使用。
...

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

在HttpSession(在会话范围内)中设置的那些属性将与会话存在一样长,当然,只有会话所属的用户才能使用。

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

也许这篇文章也对您有用:Java EE 6 范围如何影响用户交互


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

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

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


希望这会帮助你。

于 2013-04-03T20:27:24.120 回答
-1

当然是 !从 jsp 向 jsp 传递参数的情况下,我们可以简单地使用锚标记(<a href="page.jsp"?=parameter>)。& 然后用parameter = request.getParameter("parameter");将该参数放入其他 jsp 中 但在 Jsp To Servlet 案例中,协议如图所示在此处输入图像描述

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

于 2020-07-20T14:12:40.403 回答