# 页面跳转值传递
# 1. 使用 request.setAttribute
+ forward
(请求转发)
值传递:
- 在 Servlet 中通过
request.setAttribute("key", value)
将数据存入request
对象。 - 使用
request.getRequestDispatcher("target.jsp").forward(request, response)
转发请求到目标页面。 - 此时,
request
对象的属性会传递到目标页面。
- 在 Servlet 中通过
值接收:
- 在 JSP 中,直接使用
${key}
表达式获取传递的值。
- 在 JSP 中,直接使用
适用场景:
- 当需要在同一个请求中跳转页面并传递数据时使用。
代码示例:
/ Servlet request.setAttribute("msg", "提示:注册成功"); request.getRequestDispatcher("index.jsp").forward(request, response);
<p><span>${msg}</span></p>
# 2. 使用 URL 参数传递 + sendRedirect
(重定向)
值传递:
- 在 Servlet 中通过 URL 参数将数据附加到重定向的目标地址。
- 使用
response.sendRedirect("target.jsp?key=value")
进行页面跳转。
值接收:
- 在 JSP 中,使用
${param.key}
获取 URL 参数的值。
- 在 JSP 中,使用
适用场景:
- 当需要跨请求(如重定向)传递数据时使用。
代码示例:
// Servlet response.sendRedirect("index.jsp?msg=" + URLEncoder.encode("提示:注册成功", "UTF-8"));
<!--jsp页面 --> <p><span>${param.msg}</span></p>
# 区别
特性 | request.setAttribute + forward | URL 参数 + sendRedirect |
---|---|---|
数据存储范围 | 单次请求内有效 | 通过 URL 参数传递,跨请求有效 |
适用场景 | 同一次请求内页面跳转 | 页面间或跨请求的跳转和数据传递 |
安全性 | 数据不暴露在 URL 中,较安全 | 数据暴露在 URL 中,安全性较低 |
刷新影响 | 页面刷新不重复提交请求 | 页面刷新会重复发送 URL 参数请求 |
表达式(JSP 获取) | ${key} | ${param.key} |
选择哪种方式取决于具体需求:
- 如果是同一次请求内的页面跳转,建议使用
request.setAttribute
+forward
。 - 如果需要跨请求或带参数的页面跳转,使用 URL 参数 +
sendRedirect
更合适。