下面说说我对两个跳转方式的理解:
request的作用是拿着用户数据交给服务器。这就是request。
我们可以把request(转发)这样理解:有一个人叫黄彪,黄彪写信找李刚借钱,李刚的钱不够,李刚很义气,于是他又找李靖借钱,找李靖借了一部分和加上自己的一部分写信回复给了黄彪。在这过程,黄彪只发出一次请求,借钱,并收到了一次回复,他从李刚那里借钱,并不知道有一部分是出自李靖之手。
response重定向就是重新定方向,response是服务器端对客户端发来请求的回应,告诉用户重新发送一个对另一个URL的请求。
还用黄彪举例,第二次写信和李刚借钱,李刚这次回信,说自己其实没钱,并把李靖的地址给了黄彪,让黄彪写信找李靖去借,把李靖的地址发给了黄彪,黄彪写信给李靖,最终李靖收到信,并把钱回信寄给了黄彪。这次黄彪发送了两次请求,收到了两次回复。
他们的主要区别:
转发重定向比较 | 转发 | 重定向 |
---|---|---|
变量作用域 | request中存放的变量不会失效 | request存放的变量失效,进入一个新的request作用域 |
浏览器的地址 | 地址栏保持初值不会改变 | 改变为重定向的页面地址 |
作用范围 | 只能是同一个web应用中的组件 | 可重定向到其他程序资源或者其他站点 |
URL以/开头 | 相对于web应用程序根目录 | 相对于web站点根目录 |
各自优点 | 相对高效,隐藏实际链接地址。 | 能跳转到其他的服务器上的资源。 |
JSP的四大作用域
pageContext:只在当前页面生存,一旦当前页面关闭就失效了。
request:只在本次请求中生存,可以进行页面的跳转,但一旦刷新就失效了。
session:只在本次会话中生存,可以进行页面的刷新,但是一旦关闭浏览器他就失效了。
application:只在本次活动中生存,只要服务器不关闭,他就不会死,一旦服务器关闭了或者重启他就失效了。
跳转,其实就是相当于超链接<a href=""></a>标签一样;而重定向是先执行返回然后在执行,不容易被跟踪
跳转:request.getRequestDispatcher("想要跳转的页面名字").forward(request,response);
通过request对象来调用getRequestDispatcher方法来实现页面跳转,因为request是HTTPServletRequest类的实例所以可以被直接拿来使用。
重定向:response.SendRedirect("想要重定向页面的名字");
通过response.SendRedirect方法来实现页面重定向,因为response是HTTPServletResponse类的实例所以可以被直接拿来使用。