一直以来,当我在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。
上帝帮助我。
答案 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 Scopes和The Java EE 7 Tutorial: Using Scopes)。最常用的是:
您可以通过设置适当的属性在上述所有范围中存储一些数据。
以下是关于请求范围的与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)