第3.45课 上课 Servlet导航与传值, 包含(include), 转向(…
3_45

Servlet导航与传值
服务器端重定向和客户端重定向区别
request.getRequestDispatcher(String arg)是服务器端重定向;
response.sendRedirect(String arg)是客户端重定向;
转向的特点:
1.地址栏的URl是不变,
如:servletA转向到servletB的时候,地址栏还是 A它本身,但是内容其实上已经是B的内容了。
2.上一次的请求参数还可以获取
重定向的特点:
1.地址栏的URL是会改变的
如:servletA转向到servletB的时候,地址栏就变成B了
2.上一次的请求参数不可以获取
包含(include)
把多个资源包含在当前这个资源中。
步骤
获取RequestDispatcher
执行include方法
注意点
可以同时调用多次include方法来包含多个页面
转向(forward)
服务器内部请求转发的过程,称之为“转向”。转向后,所有的响应以目标的资源的为准,当前资源的响应会忽略掉。
1.转向的时候,分发到服务器(应用)内部的另外一个资源(重定向时可以是服务器(应用)外部的资源),浏览器的URL不会改变。
2.转向因为是在服务器(应用)内部发生的,他们两个资源的收到Request是同一个!两个请求的请求Method、请求参数都一致,但是请求的URI不同。
// 先获取到一个请求到/test2的请求分发器
RequestDispatcher dispatcher = request.getRequestDispatcher("/test2");
// 通过请求分发器,负责把请求转向到新资源
dispatcher.forward(request, response);
常用的场景:
1.Servlet判断请求参数中包含的一些标记,然后针对这些标记转发到不同的jsp/servlet进行处理。
2.把请求转发给合适的类进行请求的处理
步骤
获取RequestDispatcher
执行forward方法
注意点
forward前后两个Servlet收到的request是同一个
转向后,所有的响应以目标的资源为准,当前资源的响应会忽略掉
执行转向的目标资源以/开头表示应用的根目录,没有/开头表示当前目录
include和forward的区别
不同点:
1.
include是把多个资源全部包含在一个页面上显示;
forward把当前请求转向到另外一个资源进行处理。
2.forward把当前请求转交给另外一个资源去处理,而当前这个资源的处理结果会被忽略。
3.每个Servlet只能forward一次,但是可以执行多次include。
相同点:
forward() 跟include() 在执行的时候,浏览器地址栏那的地址是不会改变。
include
合并多个资源
可以include多次
forward
只返回最后一个资源的结果
重定向(redirect)
特点:
1.redirect 会忽略所有的响应消息体的内容。
2.每个重定向其实都是一个新的GET请求。
重定向请求的规则:
1.前面以/开头,表示访问服务器的根目录
2.响应状态码是302
3.重定向不能发送POST请求
4.如果每次都重定向给自己,意味着循环重定向。所以避免重定向给自己。
每次重定向,都是一个新的GET请求!
应用场景:
1.删除(更新、)记录以后
2.登陆后
告诉浏览器,重新发送一个Get请求
步骤:response.sendRedirect("<新的资源>");
注意点
重定向目标URL
如果以/开头,表示服务器根目录
如果没有以/开头,表示当前目录
重定向永远不会有内容,Content-Length永远为0
重定向以后,浏览器发送新的GET请求到Location指定的资源,导致浏览器地址栏会发生变化
重定向之前提交的数据,在重定向后的资源中无法获取到,因为两个request不同
导航注意点
1.无论是forward还是include,甚至是重定向redirect,都要避免循环的分发请求。
例如:A forwardA、A include 、A include B,然后B include A。
2.如果在流关闭以后,就不能再include、forward、sendRedirect。
3.如果调用response对象的getWriter方法以后,就不能再调
用response的getOutputStream方法。反之亦然。
浙公网安备 33010602011771号