将变量从JSP传递给servlet

时间:2013-04-03 16:49:39

标签: java jsp servlets httprequest

一直以来,当我在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 )来获取它时,结果为null。

上帝帮助我。

2 个答案:

答案 0 :(得分:8)

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

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

对于使用 GET POST 方法提交数据之间的区别,请在此处阅读:

因此,您可以配置一些 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上下文)

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

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

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

在此请求中存储属性。 属性在两者之间重置   请求即可。这种方法最常用于   RequestDispatcher的。
  ...

因此,对于每个新请求,您在 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)获取它时,结果为null。

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


希望这会对你有所帮助。

答案 1 :(得分:-1)