重定向与请求转发

重定向

当我们希望用户登录完成之后,直接跳转到网站的首页,那么这个时候,我们就可以使用重定向来完成。当浏览器收到一个重定向的响应时,会按照重定向响应给出的地址,再次向此地址发出请求。

resp.sendRedirect("time");

调用后,响应的状态码会被设置为302,并且响应头中添加了一个Location属性,此属性表示,需要重定向到哪一个网址。

请求转发

请求转发其实是一种服务器内部的跳转机制,我们知道,重定向会使得浏览器去重新请求一个页面,而请求转发则是服务器内部进行跳转,它的目的是,直接将本次请求转发给其他Servlet进行处理,并由其他Servlet来返回结果,因此它是在进行内部的转发。

req.getRequestDispatcher("/time").forward(req, resp);

现在,在登陆成功的时候,我们将请求转发给处理时间的Servlet,注意这里的路径规则和之前的不同,我们需要填写Servlet上指明的路径,并且请求转发只能转发到此应用程序内部的Servlet,不能转发给其他站点或是其他Web应用程序。请求转发可以携带数据,通过`setAttribute`方法来给当前请求添加一个附加数据,在请求转发后,我们可以直接获取到该数据,重定向属于2次请求,因此无法使用这种方式来传递数据

区别

* 请求转发是一次请求,重定向是两次请求

* 请求转发地址栏不会发生改变, 重定向地址栏会发生改变

* 请求转发可以共享请求参数 ,重定向之后,就获取不了共享参数了

* 请求转发只能转发给内部的Servlet

你可能感兴趣的:(服务器,http,servlet)