Javaweb之刷新与重定向
Java_web中的response的刷新问题
第一种也是以后最常用的刷新,使用上下文转发的方式;
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{
Stringmessage="<metahttp-equiv='refresh'content='3;url=/responseFile/index.jsp'>登陆成功,3秒后自动跳转,如果失败请点击<ahref=''>超链接</a>";
this.getServletContext().setAttribute("message",message);
this.getServletContext().getRequestDispatcher("/message.jsp").forward(request,response);
}
privatevoidtest2(HttpServletResponseresponse)throwsIOException{
response.setContentType("text/html;charset=UTF-8");
response.setHeader("refresh","3;url=/responseFile/index.jsp");
response.getWriter().write("登陆成功,3秒后自动跳转,如果失败请点击<ahref=''>超链接</a>");
}
privatevoidtest1(HttpServletResponseresponse){
response.setHeader("refresh","3;url=http://www.sina.com");
}
通过response实现请求重定向。
请求重定向指:一个web资源收到客户端请求后,通知客户端去访问另外一个web资源,这称之为请求重定向。
应用场景:用户登陆。
实现方式
response.sendRedirect()
实现原理:
302状态码和location头即可实现重定向
getOutputStream和getWriter方法分别用于得到输出二进制数据、输出文本数据的ServletOuputStream、Printwriter对象。
getOutputStream和getWriter这两个方法互相排斥,调用了其中的任何一个方法后,就不能再调用另一方法。
Servlet程序向ServletOutputStream或PrintWriter对象中写入的数据将被Servlet引擎从response里面获取,Servlet引擎将这些数据当作响应消息的正文,然后再与响应状态行和各响应头组合后输出到客户端。
Serlvet的service方法结束后,Servlet引擎将检查getWriter或getOutputStream方法返回的输出流对象是否已经调用过close方法,如果没有,Servlet引擎将调用close方法关闭该输出流对象
转发和重定向的区别
重定向response.sendRedirect("success.jsp");
转发:request.getRequestDispatcher("success.jsp").forward(request,response);
1、.转发在服务器端完成的;重定向是在客户端完成的
2.转发的速度快;重定向速度慢
3..转发的是同一次请求;重定向是两次不同请求
4..转发不会执行转发后的代码;重定向会执行重定向之后的代码
5.转发地址栏没有变化;重定向地址栏有变化
6..转发必须是在同一台服务器下完成;重定向可以在不同的服务器下完成
response.getWriter().write("aaaaaaa");
/*response.setStatus(302);
response.setHeader("location","/servletdemo/index.jsp");*/
response.sendRedirect("/servletdemo/index.jsp");