19.Web组件之间的相互跳转
2018-06-19 本文已影响0人
若愚同学
Web组件之间跳转:从AServlet跳转到BServlet.
三种类型:
1:请求转发(forward)
2:URL重定向(redirect)
3:请求包含(include)
请求转发(forward)
AServlet操作完毕之后,请求转发到BServlet,继续完成余下的功能.
语法:
request对象.getRequestDispatcher(String path).forward(request,)
参数:
path:表示目标资源名称(跳转到哪里去)
注意:别忘了写forward(request,response)
请求转发的特点:
1:浏览器地址路径没变,依然是AServlet的资源名称.
2:只发送了一个请求.
3:共享同一个请求,在请求中共享数据.
4:最终的响应输出由BServlet来决定.
5:只能访问当前应用中的资源,不能跨域跳转.
图片1.png6:可以访问WEB-INF中的资源.
注意:不要重复转发!
java.lang.IllegalStateException:cannot forward atfer response has been committed
请求转发,path要怎么写?
1. 有斜杠。 斜杠其实就是根。
如果我们 /forward/s2 相当于是去根中找一个资源叫/forward/s2资源,能找到。可以转发。
2. 没斜杠,就是相对路径。
相对于谁呢?相对于转发代码写在哪,就相对于谁。
找当前资源的最后一个斜杠。
/forward/abc/xyz/s2, 那么"forward/s2" 就直接拼接到相对路径(/forward/abc/xyz)后面
3. 以后,我们都加上斜杠。
因为斜杠是直接从根里面找。
URL重定向(redirect):
AServlet操作完毕之后,重定向到BServlet,继续完成余下的功能.
语法:
response对象.sendRedirect(String path);
参数:path,表示目标资源名称
URL重定向的特点:
1:浏览器地址栏路径发生变化,编程Servlet2的资源名称.
2:只发送了两个请求.
3:因为是不同的请求,所以不能共享请求中的数据.
4:最终的响应输出由Servlet2来决定
5:可以跨域访问资源.
6:不可以访问WEB-INF中的资源.
面试题:
请求转发和URL重定向的区别?
回答方式:
1):分别解释各自的定义(若不知道如何定义,写代码).
2):罗列各自的特点(若是做对比,请最好画表格).
3):各自的应用场景(来源于
自的特点).
请求转发和URL重定向的选择?
1:若需要共享请求中的数据,只能使用请求转发.
2:若需要访问WEB-INF中的资源,只能使用请求转发.
3:若需要跨域访问,只能使用URL重定向.
4:请求转发可能造成表单的重复提交问题.
5:其他时候,任选.