servlet的跳转方式


servlet 转发 一次请求 地址栏不会发生变化
request.getRequestDispatcher("/list.jsp").forward(request, response);
重定向 二次请求 地址栏会发生变化
         response.sendRedirect(list.jsp");或者
response.sendRedirect(request.getContextPath()+"/list.jsp");
       因为重定向是客户端跳转
      服务器的根目录 tomcat /webapps/
       
       转发是服务器内部跳转
       当前项目的根路径 tomcat/webapps/项目/
      最佳的方式:转发一律带/
        重定向:不带
### JSP 和 Servlet 中的页面跳转方式 在 JSP 和 Servlet 中,页面跳转主要分为两种方式:**转发(Forward)** 和 **重定向(Redirect)**。以下是这两种方式的区别与使用场景。 #### 1. 转发(Forward) 转发是通过 `RequestDispatcher` 对象实现的,它将请求从一个 Servlet 或 JSP 页面传递到另一个 Servlet、JSP 或 HTML 页面[^2]。在这个过程中,请求对象和响应对象都会被传递给目标页面,客户端不会感知到这个过程,因此浏览器地址栏中的 URL 不会发生变化[^3]。 - **实现代码**: ```java request.getRequestDispatcher("/target.jsp").forward(request, response); ``` - **特点**: - 浏览器地址栏中的 URL 不变。 - 请求对象和响应对象会被传递到目标页面,因此可以使用 `request.setAttribute()` 方法传递数据[^2]。 - 只能在当前 Web 应用程序内部进行跳转,不能跳转到外部 URL[^5]。 - **适用场景**: - 当需要在服务器端完成多个页面之间的逻辑处理时,例如表单提交后跳转到结果页面。 - 当需要在多个页面之间共享请求数据时,转发是一种高效的方式。 #### 2. 重定向(Redirect) 重定向是通过 `HttpServletResponse` 对象的 `sendRedirect()` 方法实现的,它会告诉客户端重新发送一个新的请求到指定的目标页面[^1]。由于这是一个新的请求,因此浏览器地址栏中的 URL 会发生变化[^4]。 - **实现代码**: ```java response.sendRedirect("/target.jsp"); ``` - **特点**: - 浏览器地址栏中的 URL 会发生变化。 - 由于是一个新的请求,无法使用 `request.setAttribute()` 方法传递数据,但可以通过 URL 参数或 Session 来传递数据[^2]。 - 可以跳转到当前 Web 应用程序内部的页面,也可以跳转到外部 URL[^5]。 - **适用场景**: - 当需要跳转到外部网站或跨域资源时。 - 当希望用户刷新页面时不会重复提交表单数据时(例如登录成功后跳转到主页)。 #### 转发重定向的主要区别 | 特性 | 转发(Forward) | 重定向(Redirect) | |--------------------|------------------------------------|-------------------------------------| | 客户端感知 | 不感知 | 感知 | | URL 变化 | 不变 | 发生变化 | | 数据传递 | 可通过 `request.setAttribute()` | 需通过 URL 参数或 Session | | 跳转范围 | 仅限当前 Web 应用程序内部 | 可跳转到外部 URL | | 性能 | 较高 | 较低(因为涉及两次 HTTP 请求) | ### 示例代码 #### 转发示例 ```java protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setAttribute("message", "Hello from Servlet!"); RequestDispatcher dispatcher = request.getRequestDispatcher("/result.jsp"); dispatcher.forward(request, response); } ``` #### 重定向示例 ```java protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.sendRedirect("/result.jsp?message=Hello%20from%20Servlet!"); } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值