一直以来,当我搜索在谷歌,我这是张贴在大约#1传递变量从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?
其实我做一个简单的电话簿应用程序。 这里我接触式ID发送给一个servlet进行编辑和删除。 我怎样才能通过这个价值?
我知道,我们可以从servlet的通过传递变量JSP request.setAttribute(key, value)
但是当我用它来设置变量,JSP,并再次用得到它session.getAttribute(key )
则结果为空值。
神救救我。
在纯粹的Servlet / JSP世界传递/数据提交到服务器 (在你的情况下,从JSP到Servlet) 的标准方法是使用HTML形式 ,即以同样的方式使用其它技术时为(ASP.NET, PHP等)。 而且这不要紧,无论它是一个纯HTML页面或JSP页面。 从形式向服务器提交数据的推荐的/最常用的方法是POST。
您也可以通过在包含在路径后的请求URL查询字符串数据 (当改为POST,你在表单中使用GET方法也会发生这种情况)。 不过,这是简单的情况下,如构建网址分页等(你可以看到构建的URL与这里的其他查询的例子: 在JSP撰写URL )
在URL传递参数的实施例:
http://example.com/foo?param1=bar&page=100
提交使用GET和POST方法在这里读到的数据之间的差异 :
所以,你可以配置一些servlet来处理发送/强烈建议提交使用POST方法,数据数据从一个JSP或HTML等提交,并分别处理使用提交的数据doPost()
在你的servlet方法。 然后,您将通过以下一个获得由请求的客户端传递的参数的ServletRequest方法:
- java.lang.String中的getParameter(java.lang.String中的名字)
- java.util.Map getParameterMap()
- 的java.util.Enumeration getParameterNames()
- java.lang.String中[] getParameterValues(java.lang.String中名称)
这里是一个很好的教程,范例: 处理客户端请求:表单数据
上面的教程是从以下过程:
构建Web应用程序在Java中:开头和中间的Servlet和JSP教程
使用Java EE 交换数据的另一种方法是将数据存储在不同的范围的属性。 (以下是摘自上,所以我的答案之一)
有4个领域中的Java EE 5(见的Java EE 5教程:使用范围的对象 )。 在Java EE 6和Java EE中7有5个范围 (参照该Java EE 6教程:使用作用域和Java的EE 7教程:使用作用域 )。 最常用的是:
您可以通过设置适当的属性存储在所有上述范围的一些数据。
下面是相关的Java EE API文档报价ServletRequest.setAttribute(字符串,对象)关于请求范围的方法:
void setAttribute(java.lang.String name, java.lang.Object o)
商店在这个要求的属性。 属性是请求之间重置 。 这种方法是最经常与RequestDispatcher的结合使用。
...
因此,每一个新的请求,您在请求中设置以前的属性都将丢失。 在您设定的请求的属性,您必须将请求转发给需要的页面。 如果您重定向,这将是一个完全新的请求,从而预先设置的属性都将丢失。 (如果你仍然想使用重定向阅读: 错误消息的Servlet重定向到同一页 )
这是在设置的属性HttpSession中 (在会话范围内 ),只要将居住在会话的生命,当然,将只提供给哪个会话所属的用户。
对于上下文属性他们是为了提供给整个Web应用程序( 适用范围 ),并为所有用户,再加上只要Web应用程序生活,他们住。
此外,也许这篇文章会为你有用的: Java EE 6个的作用域如何影响用户交互
另外要注意以下问题 。 你写的(引用):
我知道,我们可以从servlet的传递变量使用了request.setAttribute(键,值)的jsp但是,当我用它来设置变量,JSP和再次使用session.getAttribute(键)得到它,然后结果为空值。
随着用户@neel和@Sanchit已经注意到了,你设置的一个属性request
对象,而是试图把它从后面session
。 难怪你越来越null
在这种情况下。
希望这会帮助你。