gpt4 book ai didi

jsp - 将对象从 JSP 页面传递回 Servlet

转载 作者:行者123 更新时间:2023-12-03 05:35:16 26 4
gpt4 key购买 nike

简而言之,我想知道如何将对象从JSP页面传递回Servlet。具体来说,我有一个表单元素,其操作标记引用了 servlet。在表单提交时,我想在 HttpServletRequest 请求 object 中嵌入一个 object ,以便 servlet 可以取消引用它。

到目前为止,我已经尝试在JSP页面中设置request.setAttribute(object)。但仍然从 servlet 检索它,结果为 null。任何指示将不胜感激。

最佳答案

了解 HTTP 的工作原理:

  • 客户端(通常是网络浏览器)触发 HTTP 请求。
  • 服务器检索 HTTP 请求。
  • Servlet容器创建 HttpServletRequestHttpServletResponse 对象。
  • Servletcontainer 使用这些对象调用适当的 servlet。
  • Servlet 处理请求并将请求和响应转发给 JSP。
  • JSP 写入响应正文。
  • Servlet容器提交 HTTP 响应并销毁请求和响应对象。
  • 服务器将 HTTP 响应发送回客户端。
  • 客户端检索 HTTP 响应并对其进行处理(显示 HTML、应用 CSS、执行 JS)。

当您通过提交表单发送新请求时,它不会重用相同的请求和响应对象。

有两种方法可以克服 HTTP 的这种无状态特性。您需要将此对象转换为 String 并将其包含在 JSP 中 HTML 表单的隐藏输入字段中,以便在提交时将其用作请求参数。

<input type="hidden" name="myObject" value="${myObjectAsString}" />

转换为String 是必要的,因为HTTP 和HTML 不理解Java 对象。从 Java 的角度来看,HTML 基本上是一个大的 String(右键单击并在网络浏览器中查看源代码 来查看它)。如果您不将 Java 对象转换为 String,则默认情况下 Java 对象的 toString() 结果将打印为 HTML,根据定义,该结果不能转换回 HTML原始的Java对象。复杂对象最常用的 String 格式是 JSON 和 XML。有许多可用的 Java 库可以在复杂的 Java 对象和 JSON 或 XML 格式的 String 之间进行转换。

或者,如果对象太大或太复杂而无法转换为 String ,反之亦然,那么您需要将其存储在服务器内存或某个数据库中,并传递其唯一标识符作为隐藏输入值。通常 session 范围用于此目的。

因此,在准备数据并将其转发到的 servlet 中JSP页面:

String myObjectId = UUID.randomUUID().toString();
request.getSession().setAttribute(myObjectId, myObject);
request.setAttribute("myObjectId", myObjectId);
request.getRequestDispatcher("/WEB-INF/page.jsp").forward(request, response);

并且,在转发的 JSP 页面中:

<form action="nextservlet" method="post">
<input type="hidden" name="myObjectId" value="${myObjectId}" />
...
</form>

最后,在下一个处理表单提交的 servlet 中:

String myObjectId = request.getParameter("myObjectId");
Object myObject = request.getSession().getAttribute(myObjectId);
request.getSession().removeAttribute(myObjectId);
// ...

另请参阅:

关于jsp - 将对象从 JSP 页面传递回 Servlet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4253660/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com