1.reponse.sendRedirect() 重定向
通过这种方式重定向,将会产生有两次get请求,并且地址栏信息发生改变,等效设置response的状态代码302以及设置头location中指定的URL,使浏览器重定向网页的内容。
response.setStatus(302);
response.setHeader("location", "/Day01/my.html");*/ //地址信息当前于web站点
等效于 response.sendRedirect("/Day01/my.html");
2.request.getRequestDispatcher().forward(request, response) 转发
通过这种方式转发,将会使用同一个request和response对象,只会有一次get请求(request和response对象只生成一次),地址栏信息不发生变化。利用到缓冲机制,服务器向浏览器发送数据细节:
服务器先将需要发送的数据写入response缓冲区中去,然后将response中的数据回送给浏览器,那么什么样的数据才能满足发送给浏览器:
(1).service()方法处理完全
(2).缓冲区数据已满
(3).缓冲区的数据刷新,out.flush()或response.flushbuffer(),缓冲区中的数据回送给浏览器(service处理完后)。
使用转发forword,首先将response的缓冲区清空,响应头信息还有效.如果想清空成功,response.isCommitted() == flase,即forword没有刷新过,一旦刷新后,forword将不能成功!out.close()也隐含刷新操作
特别提示: 在<JSP:FORWORD>之前有很多输出,前面的输出已使缓冲区满,将自动输出到客户端,那么这种重定向方式将不起作用。
使用了重定向或者转发后,应该紧接着写上return语句
3.与缓存有关的方法
isCommitted()
resetBuffer()
flushBuffer()