1

如何在不使用会话的情况下将两个或多个值从 JSP 页面发送到另一个 JSP 页面或 servlet?我是 JSP 的新手,所以请提出一些建议?

4

4 回答 4

2

我不明白你为什么不使用会话。但我知道你还有另外 4 种方法:

  • 使用获取参数:例如,您有一个指向第二个 jsp 文件的链接。在链接末尾添加您的参数。像这样: mysite.com/second.jsp?param1=value1&param2=value2

  • 在 firstjsp 页面中使用表单,在此使用隐藏输入:

    <form action="second.jsp" method="post">
    <input type="hidden" name="param1" value="value1" />
    <input type="hidden" name="param2" value="value2" />
    <input type="submit" name="next" value="Next Page" />
    </form>

  • 使用应用程序变量,但如果您的数据对所有人都是通用的,或者使用特殊参数名称来存储您的值。例如,您可以使用:

    <% application.setAttribute("user1_param1","value1"); %>

  • 在您的代码中使用 RequestDispatcher。并将您的参数设置在请求对象而不是会话中。

    <%
    request.setAttribute("param1","value1");
    RequestDispatcher r=request.getRequestDispatcher("second.jsp");
    r.forward(request, response);
    %>

请Subtilize,您可以在不同的状态下互相使用。例如,当您在发送任何结果 ro 用户之前转发请求时,您可以使用 RequestDispatcher。当您将当前数据在下一个使用请求的第二页中返回给您时,其他方式使用。

于 2013-07-16T19:18:06.000 回答
0

当您想在多个请求之间进行通信时,需要一个会话。它可以存储多个请求的数据并识别它们来自同一个客户端。

如果您直接从一个 jsp 传递到另一个 jsp,那么您甚至不需要像 session 这样的机制。你可以用简单requestresponse对象来做到这一点。例如,如果您有一个带有参数的表单usernamepassword那么您可以在 servlet 中使用

String username = request.getParameter("username");

request对象在哪里HttpServletRequest。如果您希望页面转发到包含参数的另一个页面,那么您可以使用调度程序

RequestDispatcher rd = request.getRequestDispatcher("someJSP.jsp");
rd.forward(request,response);
于 2013-07-16T14:33:16.223 回答
0

您可以使用标准标记库将所有必需的参数添加到第二个 jsp。所以你基本上是导入库,创建一个带有所需链接的变量,最后创建一种允许用户执行它的方法。它可能是这样的:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
...
<c:url value="anotherPage.jsp" var="url">
  <c:param name="param1" value="${'parameter1'}"/>
  <c:param name="param2" value="${'parameter2'}"/>
</c:url>

<a href=${url}>this is my link</a>

编辑:阅读您的评论后,我可以告诉您:

快速回答:如果您需要跟踪所有修改,那么您的 1.jsp 应该检查数据库中的数据,否则 2.jsp 可以使用c:url或任何其他机制将数据发送到 1.jsp。

长答案:如果您的 2.jsp 将数据直接存储到数据库中,那么这不是这样做的方式!您可以改用 servlet。这基本上取决于你想要做的帽子类型的操作系统页面。我看到这两种情况:

  1. 您有一个页面,其中有一个显示多行的表格

    • servlet(从数据库读取数据)
    • showAllData.jsp(显示数据)
    • servlet(重定向到页面)
    • 插入或更新.jsp
    • servlet(存储数据)
    • showAllData.jsp(显示数据)
  2. 您有一个页面允许用户仅编辑一条记录

    • update.jsp(不显示数据)
    • servlet(将数据存入数据库)
    • update.jsp(显示更新的数据)

另外,请考虑以下提示:

  1. 如果你想从 servlet 转到 jsp,你应该这样做:

    RequestDispatcher rdispatcher = request.getRequestDispatcher("showAllData.jsp"); rdispatcher.forward(请求,响应);

  2. 您可以在每个要提交给 servlet 的隐藏 html 字段中包含一个隐藏的 html 字段。在该字段中,您有某种密钥来标识operation您要执行的内容。

    <form action="MyServlet" method="GET">

    <input type="hidden" name="operation" value="READ_ALL"/>

    ...

    </form>

public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
  String operation = req.getParameter("operation");
  if ("READ_ALL") {
    readDataFromDb(req, res);
  }
  if ("INSERT_RECORD") {
    insertRecordIntoDb(req, res);
  }
}

希望有帮助

于 2013-07-16T14:37:52.073 回答
0

为此目的使用查询字符串或使用RequestDispatcher ,而不使用会话。

于 2013-07-16T18:53:48.773 回答