一直以来,当我在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进行编辑和删除。如何传递该值?
我知道,我们可以使用来将变量从servlet传递到JSP,request.setAttribute(key, value) 但是当我使用它在JSP中设置变量并再次使用来获得变量时,session.getAttribute(key )结果为null。
request.setAttribute(key, value)
session.getAttribute(key )
神救救我。
在纯Servlet / JSP世界中,将数据传递/提交到服务器的标准方式 (例如,从JSP到Servlet)是使用 HTML表单 ,即与使用其他技术(ASP.NET, PHP等)。而且它是纯HTML页面还是JSP页面都没有关系。从表单向服务器提交数据的推荐/最常用的方法是 POST 。
您还可以在路径后 的请求URL中传递查询字符串中的数据 (当您在表单中使用 GET 方法而不是 POST 时,也会发生这种情况)。不过,这是简单的情况下,如构建网址分页等(你可以看到与其他查询这里构建的URL的例子:创作URL在JSP), 例如,在URL参数传递
http://example.com/foo?param1=bar&page=100
有关 使用 GET 和 POST 方法提交数据之间的 区别,请 参见此处:
HTML表单上的GET与POST请求
在HTML表单中,使用GET方法和POST有什么区别?
因此,您可以配置一些 servlet 来处理从JSP或HTML等发送/提交的数据。强烈建议使用 POST 方法提交数据,并分别使用doPost()servlet中的方法处理提交的数据。然后,您可以使用以下ServletRequest方法之一获取客户端在请求中传递的参数:
doPost()
这是一个带有示例的不错的教程:处理客户请求:表单数据
*使用Java EE *交换数据的另一种方法 是将数据作为属性存储在不同的 作用域中 。(以下是我对SO的回答之一的摘录)
Java EE 5中有 4个作用域 (请参阅Java EE 5教程:使用作用域对象)。在Java EE 6和Java EE 7中,有 5个作用域 (请参阅Java EE 6教程:使用作用域和Java EE 7教程:使用作用域)。最常用的是:
通过设置适当的属性,您可以在上述所有范围中存储一些数据。
这是Java EE API文档中与ServletRequest.setAttribute(String,Object)方法有关的 请求范围 的引文:
void setAttribute(java.lang.String name, java.lang.Object o) 在此请求中存储属性。 在请求之间重置属性 。此方法最常与RequestDispatcher结合使用。 …
void setAttribute(java.lang.String name, java.lang.Object o)
在此请求中存储属性。 在请求之间重置属性 。此方法最常与RequestDispatcher结合使用。 …
因此,对于每个新请求,您在 请求中 设置的先前属性都会丢失。在 请求中 设置属性后, 必须 将请求 转发 到所需页面。如果您重定向,这将是一个全新的请求,因此先前设置的属性将丢失。(如果您仍然想使用重定向,请阅读以下内容
在HttpSession(在 session范围内 )中设置的那些属性将一直存在,只要该会话存在,当然,只有该会话所属的用户才可以使用。
至于上下文属性,它们应可用于整个Web应用程序( 应用程序范围 )以及所有用户,此外,只要Web应用程序存在,它们就可以存在。
另外,也许本文对您也很有用:Java EE 6范围如何影响用户交互
也要注意以下 问题 。您写道(引用):
我知道,我们可以使用request.setAttribute(key,value)将变量从servlet传递到jsp,但是当我用它在jsp中设置变量并再次使用session.getAttribute(key)获得它时,结果为null。
正如用户@neel和@Sanchit注意到的那样,您正在request对象中设置属性,但尝试从中获取属性session。难怪您遇到null这种情况。
request
session
null
希望这会帮助你。