JSP页面跳转与请求转发的区别
1、response.sendRedirect(url):指请求重定向,原来页面的参数在这里是得不到的,即用request.getParameter("param")返回的是null;
2、forward表示请求转发,指将原页面的request,response对象传入新的页面,这样新旧页面拥有相同的request和response对象,使用request.getParameter("param")就可以得到相应的值;
3、ServletContext.getRequestDispatcher与 ServletRequest.getRequestDispatcher的区别:
ServletContext.getRequestDispatcher 路径必须是相对上下文的绝对路径
ServletRequest.getRequestDispatcher 可以是相对也可以是绝对
4、注意:使用forward转发后在浏览器上看到的地址栏显示的是转发前的还不是转发后的。比如从test.jsp转发到(forward)good.jsp,那么地址栏显示的是test.jsp.这是因为forward是在服务器端进行的,浏览器根本不知道,而重定向是在客户端进行的,如果使用response.sentRedirect("red.jsp")会直接定向到red.jsp。当我们在jsp页面请求servlet时并在servlet中进行forawrd转发到另一个red.jsp页面,这时地址栏显示的是servlet的名称而不是red.jsp。
服务器端进行转向的4种方法:
1. ServletContext的getRequestDispatcher()
2. ServletContext的getNamedDispatcher()
3. ServletRequest的getRequestDispatcher()
4. ServletResponse的sendRedirect()进行转向。
前三个属于转发第4个是重定向;
建议使用forward方法,因为这些这样比较高效,传递参数较方便,当我们请求一个站外地址时就要使用ServletResponse的sendRedirect()方法了。
<jsp:fordward>与 sendRedirect 方法的比较
相同点:<jsp:fordward>和sendRedirect都可以将浏览器浏览的网页重导至另一个网页;
不同点:
<jsp:fordward>动作是利用伺服端,将资料输出至缓冲区的机制,在前一个网页尚未输出到客户端前,取消资料的输出,然后输出另一个网页的资料,达到重导浏览器的效果,两网页间可以分享 request 对象内的变量。
sendRedirect动作是透过HTTP协议的Header,对浏览器下达重导指令,因此不牵涉到服务器端缓冲区的问题,由于 sendRedirect 方法作用于客户端,所以重导前后网页无法分享存在于request 对象内的变量。 |