jsp重定向forward和sendRedirect的比较
来源:互联网 发布:镇江市美工招聘信息网 编辑:程序博客网 时间:2024/05/12 19:16
JSP的重定向有两种:forward和sendRedirect,它们的原理以及区别是什么呢?
它们在使用上的区别有很多,那些都是表面现象,在理解了它们各自的原理以后,使用上的区别那就能容易掌握了。
一、原理.
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);
}
{
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部分,对浏览器下达重定向指令的,让浏览器对在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");
}
{
response.setContentType("text/html; charset=UTF-8");
response.sendRedirect("/index.jsp");
}
二、区别.
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://10.1.18.8:8081/dms/servlet/Servlet 重定向的URL: http://10.1.18.8:8081/dms/servlet/login.jsp,如果为response.sendRedirect("/login.jsp")则会从当前应用径下查找url:http://10.1.18.8:8081/login.jsp。而forward不能这样处理相对路径。
- jsp重定向forward和sendRedirect的比较
- jsp重定向forward和sendredirect的比较
- jsp重定向forward和sendRedirect的比较
- sendRedirect()重定向和forward()转发的比较
- JSP 中 forward 转发 和 sendRedirect 重定向的区别
- forward和sendRedirect重定向的区别
- JSP的重定向forward和sendRedirect的原理以及区别
- 请求重定向与请求转发的比较(HttpServletResponse.sendRedirect方法和RequestDispatcher.forward方法)
- Jsp重定向(response.sendRedirect())和转发(request.getRequestDispatcher().forward(request,r)的区别
- Forward()(转发)和sendRedirect()(重定向)的区别
- 使用forward和sendRedirect进行重定向有什么区别
- 转发和重定向区别( forward与sendRedirect区别)
- servlet转发(forward)和重定向(sendRedirect)向应用
- 转发request.getRequestDispatcher().forward(request,response)和重定向response.sendRedirect()的区别
- sendRedirect()重定向与forward()转发的区别
- jsp中forward和sendRedirect的区别
- jsp:forward和response.sendRedirect的区别
- JSP中forward和sendRedirect的区别
- Eclipse 3.4+MyEclipse 6.01+MyEclipse 6.01注册机+Eclipse 3.1.1汉化包+Myeclipse6.0使用教程官方下载地
- Video Drivers 和 OpenGL
- 2008.10.08 晴
- eMule分析之ED2K链接格式的创建
- JSEclipse——Eclipse上的JavaScript开发工具
- jsp重定向forward和sendRedirect的比较
- Socket编程中select()的妙用 (转载)
- 35岁IT老人的随笔
- XMLHttpRequest Object Methods
- 程序员的九重境界,你是第几重?
- java 前台输入
- 英语格言[50句]
- XMLHttpRequest Object Properties
- XMLHTTP 跨浏览器的用法