在纯 Servlets/JSP 世界中(如从 JSP 到 servlet)向服务器传递/提交数据的标准方式是使用HTML 表单,即与使用其他技术(ASP.NET, PHP 等)。而且不管是纯HTML页面还是JSP页面。将数据从表单提交到服务器的推荐/最常用方法是POST。
您还可以在路径后面的请求 URL 中包含的查询字符串中传递数据(当您在表单中使用GET方法而不是POST时也会发生这种情况)。但这是针对简单的情况,例如为分页构造 URL 等(您可以在此处查看使用附加查询构造 URL 的示例:在 JSP 中编写 URL)
在 URL 中传递参数的示例:
http://example.com/foo?param1=bar&page=100
有关使用GET和POST方法提交数据的区别,请阅读此处:
因此,您可以配置一些servlet来处理从 JSP 或 HTML 等发送/提交的数据。强烈建议使用POST方法提交数据,并分别使用doPost()
servlet 中的方法处理提交的数据。然后,您将使用以下ServletRequest方法之一获取客户端在请求中传递的参数:
这是一个很好的示例教程:处理客户端请求:表单数据
以上教程来自以下课程:
Building Web Apps in Java: Starting & Intermediate Servlet & JSP Tutorials
使用 Java EE交换数据的另一种方法是将数据作为属性存储在不同的范围内。(以下是我对 SO 的回答之一的摘录)
Java EE 5 中有4 个作用域(请参阅Java EE 5 教程:使用作用域对象)。在 Java EE 6 和 Java EE 7 中有5 个作用域(请参阅Java EE 6 教程:使用作用域和Java EE 7 教程:使用作用域)。最常用的是:
- 请求范围
- 会话范围
- 应用范围(Web Context)
您可以通过设置适当的属性在上述所有范围内存储一些数据。
这是 Java EE API 文档中与请求范围相关的ServletRequest.setAttribute(String, Object)方法的引用:
void setAttribute(java.lang.String name,
java.lang.Object o)
在此请求中存储一个属性。在请求之间重置属性。此方法最常与 RequestDispatcher 结合使用。
...
因此,对于每个新请求,您在请求中设置的先前属性都将丢失。在请求中设置属性后,您必须将请求转发到所需的页面。如果您重定向,这将是一个全新的请求,因此之前设置的属性将丢失。(如果您仍想使用重定向,请阅读:Servlet Redirection to same page with error message)
在HttpSession(在会话范围内)中设置的那些属性将与会话存在一样长,当然,只有会话所属的用户才能使用。
至于上下文属性,它们意味着对整个 Web 应用程序(应用程序范围)和所有用户都可用,而且只要 Web 应用程序存在,它们就会存在。
也许这篇文章也对您有用:Java EE 6 范围如何影响用户交互
还要注意以下问题。你写道(引用):
我知道,我们可以使用 request.setAttribute(key, value) 将变量从 servlet 传递给 jsp 但是当我使用它在 jsp 中设置变量并再次使用 session.getAttribute(key) 获取它时,结果为空。
正如用户 @neel 和 @Sanchit 所注意到的,您正在request
对象中设置一个属性,但试图从session
. 难怪你会遇到null
这种情况。
希望这会帮助你。