重定向

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

resp.sendRedirect("time");

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

重定向之间传递数据就需要 ServletContext 对象

请求转发

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

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

区别在于请求转发可以很方便的携带当前Servlet中得到的Java数据(如Object对象等),通过 setAttribute 来实现:

req.setAttribute("test", "我是请求转发前的数据");
req.getRequestDispatcher("/time").forward(req, resp);
// time Servlet 中:
System.out.println(req.getAttribute("test"));