如何在不使用会话的情况下将两个或多个值从 JSP 页面发送到另一个 JSP 页面或 servlet?我是 JSP 的新手,所以请提出一些建议?
4 回答
我不明白你为什么不使用会话。但我知道你还有另外 4 种方法:
使用获取参数:例如,您有一个指向第二个 jsp 文件的链接。在链接末尾添加您的参数。像这样:
mysite.com/second.jsp?param1=value1¶m2=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。当您将当前数据在下一个使用请求的第二页中返回给您时,其他方式使用。
当您想在多个请求之间进行通信时,需要一个会话。它可以存储多个请求的数据并识别它们来自同一个客户端。
如果您直接从一个 jsp 传递到另一个 jsp,那么您甚至不需要像 session 这样的机制。你可以用简单request
的response
对象来做到这一点。例如,如果您有一个带有参数的表单username
,password
那么您可以在 servlet 中使用
String username = request.getParameter("username");
request
对象在哪里HttpServletRequest
。如果您希望页面转发到包含参数的另一个页面,那么您可以使用调度程序
RequestDispatcher rd = request.getRequestDispatcher("someJSP.jsp");
rd.forward(request,response);
您可以使用标准标记库将所有必需的参数添加到第二个 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。这基本上取决于你想要做的帽子类型的操作系统页面。我看到这两种情况:
您有一个页面,其中有一个显示多行的表格
- servlet(从数据库读取数据)
- showAllData.jsp(显示数据)
- servlet(重定向到页面)
- 插入或更新.jsp
- servlet(存储数据)
- showAllData.jsp(显示数据)
您有一个页面允许用户仅编辑一条记录
- update.jsp(不显示数据)
- servlet(将数据存入数据库)
- update.jsp(显示更新的数据)
另外,请考虑以下提示:
如果你想从 servlet 转到 jsp,你应该这样做:
RequestDispatcher rdispatcher = request.getRequestDispatcher("showAllData.jsp"); rdispatcher.forward(请求,响应);
您可以在每个要提交给 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);
}
}
希望有帮助
为此目的使用查询字符串或使用RequestDispatcher ,而不使用会话。