当前位置 : 主页 > 编程语言 > java >

jsp中转发和重定向的区别

来源:互联网 收集:自由互联 发布时间:2021-06-25
jsp中转发和重定向的区别 原创 2016年05月15日 15:19:11 标签: jsp / j2ee / java 773 转发: 1.RequestDispatcherrd=newRequestDispatcher(); rd.forward(request,response) 2.jsp:forword 重定向: 1.HttpServletResponseresponse=ne

jsp中转发和重定向的区别

原创  2016年05月15日 15:19:11
转发: 1.RequestDispatcher rd = new RequestDispatcher();    rd.forward(request, response)    2.<jsp:forword>
重定向: 1.HttpServletResponse response = new HttpServletResponse();    response.sendRedirect(location)  
2.response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY); String   newLocn   =   "/newpath/jsa.jsp ";  response.setHeader( "Location ",newLocn); 
3.Meta本身就是HTML标签。使用方法是 <meta   http-equiv= "refresh "  content= "5;   url=http://www.dreamdu.com/ "   />  相应的java代码  String   content=stayTime+ ";URL= "+URL;  response.setHeader( "REFRESH ",content);

1、 Forward 这种方式是在服务器端作的重定向。服务器往client 发送数据的过程是这样的:服务器在向客户端发送数据之前,是先将数据输出到缓冲区,然后将缓冲区中数据发送给client端。什么时候将缓冲区里的数据发送给client端呢?(1)当对来自client的request处理完,并把所有数据输出到缓冲区,(2)当缓冲区满,(3)在程序中调用缓冲区的输出方法out.flush()或response.flushbuffer(),web container才将缓冲区中的数据发送给client。 这种重定向方式是利用服务器端的缓冲区机制,在把缓冲区的数据发送到客户端之前,原来的数据不发送,将执行转向重定向页面,发送重定向页面的数据,重定向调用页的数据将被清除。 特别提示: 在<JSP:FORWORD>之前有很多输出,前面的输出已使缓冲区满,将自动输出到客户端,那么这种重定向方式将不起作用。 public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException { response.setContentType(”text/html; charset=UTF-8″); ServletContext sc = getServletContext(); RequestDispatcher rd = null; rd = sc.getRequestDispatcher(”/index.jsp”); rd.forward(request, response); } 2、 sendRedirect 这种方式是在客户端作的重定向处理。该方法通过修改HTTP协议的HEADER部分(设置状态代码302,命令浏览器发重新发送请求),对浏览器下达重定向指令的,让浏览器对在location中指定的URL提出请求,使浏览器显示重定向网页的内容。该方法可以接受绝对的或相对的URLs。如果传递到该方法的参数是一个相对的URL,那么Web container在将它发送到客户端前会把它转换成一个绝对的URL。public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException { response.setContentType(”text/html; charset=UTF-8″); //response.sendRedirect(”/index.jsp”); 效果和前面forward一样 response.sendRedirect(”http://www.sohu.com”); //跳转到sohu }     区别: 1、forward重定向是在容器内部实现的同一个Web应用程序的重定向,所以forward方法只能重定向到同一个Web应用程序中的一个资源,重定向后浏览器地址栏URL不变,而sendRedirect方法可以重定向到任何URL, 因为这种方法是修改http头来实现的,URL没什么限制,重定向后浏览器地址栏URL改变。 2、forward重定向将原始的HTTP请求对象(request)从一个servlet实例传递到另一个实例,而采用sendRedirect方式两者不是同一个application。 3、基于第二点,参数的传递方式不一样。forward的form参数跟着传递,所以在第二个实例中可以取得HTTP请求的参数。sendRedirect只能通过链接传递参数,response.sendRedirect(“login.jsp?param1=a”)。 4、sendRedirect能够处理相对URL,自动把它们转换成绝对URL,如果地址是相对的,没有一个‘/’,那么Web container就认为它是相对于当前的请求URI的。比如,如果为response.sendRedirect(”login.jsp”),则会从当前servlet 的URL路径下找login.jsp: http://127.0.0.1:8080/test/servlet/Servlet 重定向的URL: http://127.0.0.1:8080/test/servlet/login.jsp,如果为response.sendRedirect(”/login.jsp”)则会从当前应用径下查找url:http://127.0.0.1:8080/login.jsp。而forward不能这样处理相对路径。 java 他们的区别是: response.sendRedirect是向客户浏览器发送页面重定向指令,浏览器接收后将向web服务器重新发送页面请求,所以执行完后浏览器的url显示的是跳转后的页面。跳转页面可以是一个任意的url(本服务器的和其他服务器的均可)。 RequestDispatcher.forward 则是直接在服务器中进行处理,将处理完后的信息发送给浏览器进行显示,所以完成后在url中显示的是跳转前的页面。在forward的时候将上一页面中传送的request和response信息一同发送给下一页面(而response.sendRedirect不能将上一页面的request和 response信息发送到下一页面)。由于forward是直接在服务器中进行处理,所以forward的页面只能是本服务器的
网友评论