一尘不染

将变量从JSP传递到servlet

jsp

一直以来,当我在Google上进行搜索时,我都会在Stackoverflow上找到许多答案,这些答案涉及将变量从JSP传递到servlet。但我想知道,我没有得到以下答案: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。

神救救我。


阅读 362

收藏
2020-06-08

共1个答案

一尘不染

在纯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

有关 使用 GETPOST 方法提交数据之间区别,请 参见此处:

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

这是一个带有示例的不错的教程:处理客户请求:表单数据


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

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

  • 要求范围
  • 会议范围
  • 应用范围 (Web上下文)

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

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

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这种情况。


希望这会帮助你。

2020-06-08