请求重定向、请求转发、请求包含

重定向:地址栏有变化,一个Servlet,是二个请求


转发:地址栏没变化,至少2个Servlet,是一个请求(留头不留体,意思就是最好不要体(因为你都去叫别人帮忙了,你还做点事,那还不如不叫别人帮忙呢,自己做得了),留个头就行了,这个头用HttpWatch可以在刷新页面是看到)


包含:与转发的区别就是又留头又留体(意思是叫别人帮忙时,你自己也做点事情)


就比如:你的上司叫你做事,你对上司说这事我做不了,您去找李四做吧,这叫重定向(估计明天上司就叫你别来了)

      你的上司叫你做事,你对上司说行(其实自己不行),然后自己悄悄的去找李四帮自己做,这叫转发,如果自己也做点,那就叫包含。


重定向小结

l  重定向是两次请求;

l  重定向的URL可以是其他应用,不局限于当前应用;

l  重定向的响应头为302,并且必须要有Location响应头;

l  重定向就不要再使用response.getWriter()或response.getOutputStream()输出数据,不然可能会出现异常;


request获取请求参数

最为常见的客户端传递参数方式有两种:

l  浏览器地址栏直接输入:一定是GET请求;

l  超链接:一定是GET请求;

l  表单:可以是GET,也可以是POST,这取决与<form>的method属性值;

 

GET请求和POST请求的区别:

l  GET请求:

Ø  请求参数会在浏览器的地址栏中显示,所以不安全;

Ø  请求参数长度限制长度在1K之内;

Ø  GET请求没有请求体,无法通过request.setCharacterEncoding()来设置参数的编码;

l  POST请求:

Ø  请求参数不会显示浏览器的地址栏,相对安全;

Ø  请求参数长度没有限制;


请求转发与请求包含比较

l  如果在AServlet中请求转发到BServlet,那么在AServlet中就不允许再输出响应体,即不能再使用response.getWriter()和response.getOutputStream()向客户端输出,这一工作应该由BServlet来完成;如果是使用请求包含,那么没有这个限制;

l  请求转发虽然不能输出响应体,但还是可以设置响应头的,例如:response.setContentType(”text/html;charset=utf-8”);

l  请求包含大多是应用在JSP页面中,完成多页面的合并;

l  请求转发大多是应用在Servlet中,转发目标大多是JSP页面;

 

请求转发与重定向比较

l  请求转发是一个请求,而重定向是两个请求;

l  请求转发后浏览器地址栏不会有变化,而重定向会有变化,因为重定向是两个请求;

l  请求转发的目标只能是本应用中的资源,重定向的目标可以是其他应用;

l  请求转发对AServlet和BServlet的请求方法是相同的,即要么都是GET,要么都是POST,因为请求转发是一个请求;

l  重定向的第二个请求一定是GET;



    有时一个请求需要多个Servlet协作才能完成,所以需要在一个Servlet跳到另一个Servlet!
    > 一个请求跨多个Servlet,需要使用转发和包含。
    > 请求转发:由下一个Servlet完成响应体!当前Servlet可以设置响应头!(留头不留体,即使设置了响应体)
    > 请求包含:由两个Servlet共同未完成响应体!(都留)
    > 无论是请求转发还是请求包含,都在一个请求范围内!使用同一个request和response!
  * request域
    Servlet中三大域对象:request、session、application,都有如下三个方法:
    > void setAttribute(String name, Object value)
    > Object getAttribute(String name)
> void removeAttribute(String name);
    > 同一请求范围内使用request.setAttribute()、request.getAttribute()来传值!前一个Servlet调用setAttribute()保存值,后一个Servlet调用getAttribute()获取值。


总之:重定向:地址栏有变化,一个Servlet,是二个请求
转发:地址栏没变化,至少2个Servlet,是一个请求(留头不留体,意思就是最好不要体,留个头就行了)
就比如:你的上司叫你做事,你对上司说这事我做不了,您去找李四做吧,这叫重定向
你的上司叫你做事,你对上司说行(其实自己不行),然后自己悄悄的去找李四帮自己做,这叫转发

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值