传递两个或更多值而不会话

时间:2013-07-16 14:28:55

标签: jsp servlets

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

4 个答案:

答案 0 :(得分:3)

我无法理解为什么你不会使用session。但你还有另外一种我知道的方式:

  • 使用get参数:例如,您有第二个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>

  • 使用应用程序变量,但如果您的数据是通用的,或使用speciall参数名称来存储您的值。例如,您可以使用:

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

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

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

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

答案 1 :(得分:1)

您可以使用标准标记库将所有必需的参数添加到第二个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将数据发送到1.jsp :url 或任何其他机制。

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

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

    • servlet(从db读取数据)
    • showAllData.jsp(显示数据)
    • servlet(重定向到页面)
    • insertOrUpdate.jsp
    • servlet(存储数据)
    • showAllData.jsp(显示数据)
  2. 您有一个页面,允许用户只编辑一条记录

    • update.jsp(不显示数据)
    • servlet(将数据存入数据库)
    • update.jsp(显示更新的数据)
  3. 另外,请考虑以下提示:

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

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

    2. 您可以在每个要提交给servlet的html字段中隐藏。在该字段中,您可以使用某种键来标识要执行的operation

      &lt; form action =“MyServlet”method =“GET”&gt;

      &lt; input type =“hidden”name =“operation”value =“READ_ALL”/&gt;

      ...

      &LT; /形式&GT;

    3. 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);
        }
      }
      

      希望有所帮助

答案 2 :(得分:0)

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

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

在servlet中访问它
String username = request.getParameter("username");

其中requestHttpServletRequest个对象。 如果您希望页面转发到包含参数的其他页面,则可以使用调度程序

RequestDispatcher rd = request.getRequestDispatcher("someJSP.jsp");
rd.forward(request,response);

答案 3 :(得分:0)

使用查询字符串或使用 RequestDispatcher 而不使用会话。