# 页面跳转值传递

# 1. 使用 request.setAttribute + forward(请求转发)

  • 值传递

    • 在 Servlet 中通过 request.setAttribute("key", value) 将数据存入 request 对象。
    • 使用 request.getRequestDispatcher("target.jsp").forward(request, response) 转发请求到目标页面。
    • 此时,request 对象的属性会传递到目标页面。
  • 值接收

    • 在 JSP 中,直接使用 ${key} 表达式获取传递的值。
  • 适用场景

    • 当需要在同一个请求中跳转页面并传递数据时使用。
  • 代码示例

    / 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 参数的值。
  • 适用场景

    • 当需要跨请求(如重定向)传递数据时使用。
  • 代码示例

    // 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 更合适。