日常我们使用浏览器最常用的就是在不同的页面中跳转,而在Servlet
中的页面跳转使用的就是转发和重定向,也可以简单的认为转发和重定向就是实现页面的跳转,但是肯定是有区别的
request.getRequestDispatcher("xxx.jsp").forward(request,response);
这个例子就是一个简单携带request和response的转发,从这句代码分析我们可以得知,这个转发需要request对象
,我们加入源码查看.getRequestDispatcher(String path)
这个方法的返回值是一个RequestDispatcher对象,百度得知这个类是一个Web资源包装器,查看源码发现有两个方法forward()
和include()
(那肯定是主要介绍forward()方法哈,有兴趣可以自行百度两个方法的详解)forward()
用来转发request和response给指定的web资源,看到这里应该对这个代码有了一点理解了,首先将web资源路径传递到RequestDispatcher对象中,再调用forward方法将request和response一起传递给指定的web资源,实现携带请求转发
response.sendRedirect("https://www.baidu.com");
实现简单的重定向,本质也是跳转
本质都是实现页面的跳转
RequestDispatcher
对象的forward()
response.sendRedirect()
什么时候用转发,什么时候用重定向?
当我们需要携带数据存进request域中保存,跳转界面读取request域中的数据,这个时候我们需要用到转发。
不需要携带数据,只进行请求处理并不暴露Servlet进行跳转,可以用重定向
判断什么时候用转发还是重定向可以从以下几点判断
当然这只是一个参考,具体业务具体分析,还需要注意的是无论是转发还是重定向,后续代码还是会运行,并不会跳转而停止,除非手动return
原文:https://www.cnblogs.com/cndada/p/14621515.html