简述Servlet使用sendRedirect()和forward()两种方法的异同点

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简述Servlet使用sendRedirect()和forward()两种方法的异同点相关的知识,希望对你有一定的参考价值。

相同点:都能实现页面跳转或者是服务器资源的跳转;
不同点:1、sendRedirect(“目的地”) 是response 对象的方法,forward(request,response)是request.getRequestDispatcher("目的地") 方法 返回的对象 requestDispatcher 的方法;
2、sendRedirect() 在客户端运行,会产生新的请求,地址栏显示新地址,forward()在服务端运行,地址栏的地址不变;
3、sendRedirect() 跳转之后,不能获取request中的对象,而forward()可以获取;
4、forward()速度更快。
参考技术A * 请求转发与重定向的区别
* 1.请求转发数据不会丢失,重定向数据会丢失
* 2.请求转发URL地址栏不变,重定向URL地址栏变化可以防止表单重复提交
* 3.请求转发不加上web项目名称,重定向需要加上web项目名
* 4.请求转发只能在一个web应用程序内转发,重定向可以到其他应用程序
* 5.请求转发后面调用的方法类别和前面的相同,重定向会全部变为get方法,和前面没有关系
* 请求转发是一次请求,重定向为多次请求生成多个request对象,但是form表单第一次如果是post方法
* 当重定向是,再次生成新的request时,则变成默认的doget方法
参考技术B sendRedirect是跳转。
forward()是转发。
简单打个比方
A 页 到B页 到C页。三个页。A是起始。当B接收到A来的数据之后。
如果在B中用跳转的方式到C。那么在C中访问不到A的request
如果在B中用转发的方式到C。那么在C中可以访问A的request
转发就是原样再给别人。邻居送你家了一盒月饼,但是你家太多了。直接再把这盒月饼给别人。实际上别人吃的是你邻居家送的月饼。
参考技术C forword()页面跳转时可以传递参数而sendRedirect()是重定向不能传递参数本回答被提问者采纳

servlet中能够相互传值吗

在网上怎么查不到相关的信息呢?
通过SERVLET_A从数据库中取得信息。
然后再跳转到另一个SERVLET_B中去、
再通过SERVLET_B跳转到一个页面中、
并且在这张页面中加载相关有效数据。
这样的思想能够实现吗?

Sverlet相互传值可以使用跳转的形式,总共有两种,如下:
1) redirect方式[效率不高]
request和response没有传给目标页面
response.sendRedirect("/a.jsp");
页面的路径是相对路径。sendRedirect可以将页面跳转到任何页面,不一定局限于本web应用中,如:
response.sendRedirect("URL");跳转后浏览器地址栏变化。
这种方式要传值出去的话,只能在url中带parameter或者放在session中,无法使用request.setAttribute来传递。
传值:HttpSession session =request.getSession();
session.setAttribute("bbbb", 1111111111);
取值:session.getAttribute("bbbb");

传值:RequestDispatcher rd =application.getRequestDispatcher("/queryResult.jsp?a="+000);
取值:request.getParameter("a")

2) forward方式[更多地使用此方法进行服务器端的跳转]
ServletContext application =this.getServletContext(); //this是这个页面
RequestDispatcher rd = application.getRequestDispatcher("/目标页面");
rd.forward(request, response);
Servlet页面跳转的路径是相对路径。forward方式只能跳转到本web应用中的页面上,跳转后浏览器地址栏不会变化。
使用这种方式跳转,传值可以使用三种方法:url中带parameter,session,request.setAttribute
传值:request.setAttribute("a", 00);
取值:request.getAttribute("a");

传值:HttpSession session =request.getSession();
session.setAttribute("bbbb", 1111111111);
取值:session.getAttribute("bbbb");

传值:RequestDispatcher rd =application.getRequestDispatcher("/queryResult.jsp?a="+000);
取值:request.getParameter("a");
getParameter()只能传递字符串,而setAttribute()/getAttribute()还可以传递对象
其次getParameter方法传递的数据,会从Web客户端传到Web服务器端,代表HTTP请求数据。
只能是页面发送到后台或者Web客户端传到Web服务器端
参考技术A session cookie

当cookie被禁用时可以用URL重写或隐藏表单域
参考技术B 可以,保存入session就可以咯。
reqeust也可以。

比如request.setAttribute("v1",v1);或者request.setParameter("v1",v1);方法

session.add();方法 //还是session.set();方法记不清了,总之就是这些个方法吧值放入session或request.在另一个页面:

request.getParameter("v1");//获得request中v1,具体的值就是你上面保存进去的本回答被提问者和网友采纳
参考技术C 用session保存 或者request保存咯!!

以上是关于简述Servlet使用sendRedirect()和forward()两种方法的异同点的主要内容,如果未能解决你的问题,请参考以下文章

为啥servlet中的response.sendRedirect()在收到JQuery的post请求后不起作用?

servlet post response.sendRedirect 乱码

response.sendRedirect 在 Servlet 过滤器中不起作用

无法使用 response.sendRedirect 重定向

关于JSP中的response.sendRedirect和RequestDispatcher的区别

ServletContext域对象