- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
简而言之,我想知道如何将对象
从JSP页面传递回Servlet。具体来说,我有一个表单元素,其操作标记引用了 servlet。在表单提交时,我想在 HttpServletRequest
请求 object
中嵌入一个 object
,以便 servlet 可以取消引用它。
到目前为止,我已经尝试在JSP页面中设置request.setAttribute(object)
。但仍然从 servlet 检索它,结果为 null。任何指示将不胜感激。
最佳答案
了解 HTTP 的工作原理:
HttpServletRequest
和 HttpServletResponse
对象。当您通过提交表单发送新请求时,它不会重用相同的请求和响应对象。
有两种方法可以克服 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/
我是一名优秀的程序员,十分优秀!