sendRedirect()与forward()
1.前面慢,后者快
2.前面无法读取request.setAttribute()所保存的数值,而后者可以读取
3.前者地址栏显示真正转向后的地址,而后者显示的是转向前的地址
4.前者,转向地址开始的"/",表示的是本机的根目录;而后者,"/"表示的是应用的根目录
response.sendRedirect("/Test/admin/admin.jsp");
//---------------------------------------------------------------------
request.setAttribute("message", "您输入的两次新密码不相符!");
request.getRequestDispatcher("/admin/Result.jsp").forward(request, response);
获取RequestDispatcher
可以通过ServletContext的下列方法获得实现RequestDispatcher接口的对象:
• getRequestDispatcher
• getNamedDispatcher
getRequestDispatcher方法以String参数描述ServletContext作用域的路径。该路径必须相对于ServletContext的根,并且以“/”开头。该方法使用路径(path)来查找servlet,用RequestDispatcher对象包装,然后返回结果对象。如果没有基于指定路径的servlet,提供一个RequestDispatcher返回路径值。
getNamedDispatcher方法以String参数表示ServletContext已知的servlet名称。如果找到servlet,用RequestDispatcher对象将它包装并返回。如果没有和指定名称关联的servlet,该方法必须返回null。
为了能够使用当前请求的相对路径(不是ServletContext根的相对路径)来获得RequestDispatcher对象,ServletRequest接口提供以下方法:
• getRequestDispatcher
该方法的行为和ServletContext的同名方法类似。servlet容器使用request对象中的信息将指定的相对路径转换成完整路径。比如,以“/”为根的上下文,请求/garden/tools.html,通过ServletRequest.getRequestDispatcher("header.html") 获得的requestDispatcher实际上等同于调用ServletContext.getRequestDispatcher("/garden/header.html")。
RequestDispatcher路径的query字符串
ServletContext和ServletRequest使用path参数创建RequestDispatcher对象的方法,允许在path后添加query字符串。比如,开发人员可以通过下列代码获得RequestDispatcher:
String path = “/raisons.jsp?orderno=5”;
RequestDispatcher rd = context.getRequestDispatcher(path);
rd.include(request, response);
query字符串中指定的参数用来创建RequestDispatcher,优先于传递给包含servlet的同名的其他参数。该参数和RequestDispatcher关联,只在include或forward调用中有效。
使用RequestDispatcher
要使用requestDispatcher,servlet可以调用RequestDispatcher接口的include或forward方法。这些方法的参数可以是通过Servlet接口的service方法传递的request和response参数,也可以是规范2.3中引入的request和response包装类的子类的实例。后者,包装实例必须包装容器传递给service方法的request和response对象。
容器供应商必须确保向目标servlet转发请求和原请求处于同一个VM,同一个线程。
include方法
RequestDispatcher接口的include可以随时调用。include方法的目标servlet可以完整访问request对象,但是使用response对象上有一些限制:
它只能向response对象的ServletOutputStream或者Writer写入信息,提交响应(将内容输出到响应缓冲尾部),或者显式调用ServletResponse接口的flushBuffer方法。它不能设置header,或者调用任何影响响应header的方法。任何那样的尝试必须都被忽略。
包含的请求参数
除了使用getNamedDispatcher方法获得的servlet之外,include的servlet可以访问调用它的路径。设置以下请求属性:
javax.servlet.include.request_uri
javax.servlet.include.context_path
javax.servlet.include.servlet_path
javax.servlet.include.path_info
javax.servlet.include.query_string
include的servlet的这些属性通过request对象的getAttribute方法访问。
如果include的servlet通过getNamedDispatcher方法获得,那么这些属性没有设置。
forward方法
RequestDispatcher接口的forward方法只有在输出还未提交给客户端时,才可以由调用servlet调用。如果输出数据存在于还未提交的响应缓冲中,内容必须在目标servlet的service方法调用之前清空。如果响应已被提交,必须抛出IllegalStateException异常。
暴露给目标servlet的request对象的path元素必须映射用来获得RequestDispatcher的路径。
唯一例外是如果RequestDispatcher是通过getNamedDispatcher方法获得的,这种情况下,request对象的path元素必须必须映射最初的请求。
在RequestDispatcher接口的forward方法返回之前,servlet容器必须发送,提交并关闭响应内容。
分享到:
相关推荐
sendredirect()和forward()方法的区别_xyy511的专栏-CSDN博客.mht
sendRedirect()和forward()的区别,我是个新手,觉得很受用,呵呵,大家学习
<jsp:forward page="转的页面"> 与 response.sendredirect("转的页面")的区别 sendredirect:
页面之间的跳转可以通过两种方式实现:forward和sendRedirect。 forward:可以在JSP页面中使用,可以在Servlet中实现。 在JSP页面中使用”目标文件”/>,例如要跳转到userlist.jsp,可以写: 代码如下: ”userlist...
Servlet之forward、sendRedirect、 include区别与使用实例 ,具体效果和过程看博文http://blog.csdn.net/evankaka/article/details/45169569
跳转方式 ...运用forward方法只能重定向到同一个Web应用程序中的一个资源。...Forward代码中的"/uu"则代表相对与WEB应用的路径。如http://localhost:8080/Test应用(则提交至http://localhost:8080/Test/uu);
RequestDispatcher.forward()方法和HttpServletResponse.sendRedirect()方法的区别是:前者仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址,他是不会改变Request的值,如果你需要在下一个...
主要介绍了java 中sendredirect()和forward()方法的区别,需要的朋友可以参考下
Jsp利用response.sendRedirect、cookie传参
用于初学者,牛人不用了,jsp增删改查...
转发和重定向的区别 forward和redirect的区别 request.getRequestDispatcher()..forward(request,response);和 response.sendRedirect();的区别详解
Servlet跳转方式 sendReDirectServlet跳转方式 sendReDirectServlet跳转方式 sendReDirectServlet跳转方式 sendReDirectServlet跳转方式 sendReDirect
jsp response.sendRedirect不跳转的原因分析及解决.docx
jsp response.sendRedirect()用法详解.docx
jsp跳转getRequestDispatcher()和sendRedirect()的区别.docx
最后在网上找到原因如下: 首先我们要明白用response.sendRedirect做转向的原理,它其实是向浏览器发送一个特殊的Header,然后由浏览器来做转向,转到指定的页面,所以用sendRedirect时,浏览器的地址栏上可以看到...
<一>——forward与sendRedirect的区别 ********************************************************************************* forward:可以在JSP页面中使用,可以在Servlet中实现。 在JSP页面中使用<jsp:forward...
尽管HttpServletResponse.sendRedirect方法和RequestDispatcher.forward方法都可以让浏览器...下面是HttpServletResponse.sendRedirect方法实现的请求重定向与RequestDispatcher.forward方法实现的请求转发的总结比较
主要介绍了jsp跳转getRequestDispatcher()和sendRedirect()的区别,需要的朋友可以参考下