kur*_*der 23 jsp servlets object
简而言之,我想知道如何将objectJSP页面传递回Servlet.具体来说,我有一个表单元素,其action标记引用了一个servlet.在表单提交,我希望嵌入object的HttpServletRequest请求object,以便它可以通过servlet的解除引用.
到目前为止,我已经尝试request.setAttribute(object)在JSP页面中进行设置.但是仍然从servlet中检索它会将其作为null.任何指针将不胜感激.
Bal*_*usC 41
了解HTTP的工作原理:
HttpServletRequest和HttpServletResponse对象.通过提交表单发送新请求时,它将不会重用相同的请求和响应对象.
有两种方法可以克服HTTP的这种无状态特性.您需要将此对象转换为String并将其包含在JSP中HTML表单的隐藏输入字段中,以便在提交时它可用作请求参数.
<input type="hidden" name="myObject" value="${myObjectAsString}" />
Run Code Online (Sandbox Code Playgroud)
转换是必要的,因为HTTP和HTML不理解Java对象.HTML在Java的视角基本上是一个大的String(在webbrowser中做一个右键和View Source来看它).如果不将Java对象转换为String,则默认情况下Java对象的toString()结果将打印为HTML.
或者,如果对象太大或太复杂而无法转换,String反之亦然,那么您需要将其存储在服务器的内存或某个数据库中,而是将其唯一标识符作为隐藏的输入值传递.通常会话范围用于此目的.
表单预处理Servlet示例:
String myObjectId = UUID.randomUUID().toString();
request.getSession().setAttribute(myObjectId, myObject);
request.setAttribute("myObjectId", myObjectId);
request.getRequestDispatcher("/WEB-INF/page.jsp").forward(request, response);
Run Code Online (Sandbox Code Playgroud)
JSP示例:
<input type="hidden" name="myObjectId" value="${myObjectId}" />
Run Code Online (Sandbox Code Playgroud)
表单后处理Servlet示例:
String myObjectId = request.getParameter("myObjectId");
Object myObject = request.getSession().getAttribute(myObjectId);
request.getSession().removeAttribute(myObjectId);
// ...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
68335 次 |
| 最近记录: |