将变量从JSP传递给servlet

一直以来,当我在Google上搜索时,我收到了十二个在Stackoverflow中发布的关于将变量从JSP传递到servlet的答案。 但我想知道,我没有得到答案: How to pass a variable from JSP to a servlet class? Is it possible? 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 )获取它时,结果为null。

神救救我。

在纯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方法提交数据之间区别,请阅读:

  • 对HTML表单的GET与POST请求

  • 在HTML表单中,使用GET方法与POST有什么区别?

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

  • java.lang.String getParameter(java.lang.String name)
  • java.util.Map getParameterMap()
  • java.util.Enumeration getParameterNames()
  • java.lang.String [] getParameterValues(java.lang.String name)

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

以上教程来自以下课程:
使用Java构建Web应用程序:初级和中级Servlet和JSP教程


使用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)

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

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

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

在此请求中存储属性。 在请求之间重置属性 。 此方法通常与RequestDispatcher一起使用。

因此,对于每个新请求,您在请求中设置的先前属性将丢失。 在请求中设置属性后, 必须将请求转发到所需页面。 如果您重定向,这将是一个完全新的请求,因此先前设置的属性将丢失。 (如果您仍然希望使用重定向,请阅读: Servlet重定向到同一页面,并显示错误消息 )

在HttpSession (在会话范围内 )中设置的那些属性将在会话存在时生存,当然,仅对会话所属的用户可用。

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

此外,本文也可能对您有用: Java EE 6范围如何影响用户交互


另外要注意以下问题 。 你写的(引用):

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

正如用户@neel和@Sanchit所注意到的那样,您在request对象中设置了一个属性,但是尝试从session恢复它。 难怪你在这种情况下得到null


希望这会帮助你。