servlet中重定向和转发的一些总结

在servlet中重定向和转发是控制页面跳转的两种常用方法。

重定向:`response.sendRedirect("new.jsp");`转发:`request.getRequestDispatcher("new.jsp").forward(request, response);`

我们从几个层面来总结一下:

1.表象和行为重定向是客户端行为,他其实是两次request,所以我们在浏览器的地址栏会看到地址会有变动,在重定向中,传输的信息会被丢失。转发是服务器行为,他有点像内部方法的调用,服务器把request/response的处理权,转交给另一个,我们在浏览器地址栏会看到地址栏不会变动。如果用通俗的比喻来解释的话:1.*小明***A公司**办理业务,A公司说这种业务应该去**B公司**处理,然后小明就去了**B公司**,这是***重定向***;2.*小明*去**A公司**办理业务,A公司知道这种业务应该去**B公司**处理,但是没有叫小明走,而是自己去联系**B公司**,并把处理结果给了*小明*,这是***转发***。 这里小明是客户端浏览器,A、B公司可以看成是服务器,重定向小明本来去A,最后去了B,并且全程是自己处理,所以是**客户端行为,地址变了,速度慢**;转发小明至始至终一直在A公司办理业务,并且得到了B公司的处理结果,所以是**服务器行为,地址没变,速度快**


2.应用场景

假设我们的业务中有增、删、改的时候,我们要修改一个数据,首先肯定是点击【修改】,然后会跳出修改页面供我们填写修改内容,填好后我们提交,这个时候应该用重定向(sendRedirect)跳转,因为用转发的话,每次刷新页面就会重新请求一次,可能会造成额外的操作(试想一下有没有遇到刷新一次页面就增加了一条数据的场景?)用重定向可以防止表单重复提交


3.面试答复

1.重定向是两次请求,两次响应;转发是一次请求,一次响应2.重定向地址栏发生变化,转发地址栏没有变化3.重定向无法通过request域传递数据,转发可以传递数据4.重定向可以定向其他系统,转发只能定向内部系统

猜你喜欢

转载自blog.csdn.net/qq_31108543/article/details/80035617
今日推荐