servlet中转发与重定向的区别

一、转发

Servlet 客户端 HTTP 请求:HttpServletRequest 继承 ServletRequest接口,
RequestDispatcher getRequestDispatcher(String var1); HttpServletRequest调用父接口的getRequestDispatcher()方法实现转发。

@WebServlet("/test2")
public class Test2Servlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    switch(action){
       case "add":
                //get请求add添加,跳转到add界面
                req.getRequestDispatcher("add.jsp").forward(req,resp);
                break;
      case "edit":
			   break;
      case "del": 
               break;
      default:break;
      }
    }
}

假设A要跳转到C网页,A需要先请求到B,B带领着A去请求C,相当于是A只请求了一次。
请求的网址不改变,请求的次数一次,可后退,刷新重新提交表单。

特点:

  1. 转发是服务器行为(这是不经过浏览器的)
  2. 转发是浏览器只做了一次访问请求
  3. 转发浏览器地址不变
  4. 转发两次跳转之间传输的信息不会丢失,所以可以通过request进行数据的传递
  5. 转发只能将请求转发给同一个WEB应用中的组件

二、重定向

重定向请求到另一个网页的最简单的方式是使用 response 对象的 sendRedirect() 方法。
该方法把响应连同状态码和新的网页位置发送回浏览器。

@WebServlet("/test")
public class TestServlet extends HttpServlet {

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.sendRedirect("http://www.baidu.com");
    }
}

相当于是A要请求C,A先请求B,B把C的网址给到A,A再去请求C,则A请求了2次
请求的网址改变,请求次数两次,不可后退,刷新不变

特点:

  1. 重定向是客户端行为。(浏览器重新请求)
  2. 重定向是浏览器做了至少两次的访问请求的(当然也可以重定向多次)。
  3. 定向浏览器地址改变。
  4. 重定向两次跳转之间传输的信息会丢失(request范围)。
  5. 重定向可以指向任何的资源,包括当前应用程序中的其他资源,同一个站点上的其他应用程序中的资源,其他站点的资源(如自己工程重定向到百度)。注意:传递给HttpServletResponse.sendRedirect 方法的相对URL以“/”开头,它是相对于整个WEB站点的根目录。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值