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