servlet转发

    Servlet可以将发送给自己的请求转发给另一个URL地址,这个URL地址可以是html、jsp、servlet或其他的http地址。Servlet中的请求转发有三种形式,主要是通过HttpServletRequest对象和HttpServletResponse对象实现。

 

 

 

public void service(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{
//......
1.request.getRequestDispatcher("/url").include(request,response);
2.request.getRequestDispatcher("/url").forward(request,response);
3.request.sendRedirect("/url");
//......
}

    三种方式的区别是:

include:将url中的内容包含到当前的servlet输出当中,在服务器端完成,一般叫做包含;

forward:将当前的Request和response对象交给指定的url处理,一般称作转发请求;在服务器端完成,客户端

              地址栏看到的路径还是当前请求的servlet路径;

sendRedirect:指示客户端重新发起一次请求,第二次请求指向其参数的url,一般称作重定向;客户端的地址栏将

              改变为url值,是由客户端发起的第二次请求。

 

include与forward的区别:

 include是把别人包含进来,forward则是丢掉自己

include是把另一个servlet/jsp处理过后的内容拿过来与本身的servlet的内容一起输出;

forward是把请求的内容转发到另一个servlet/jsp中。在forward之前,在原始的servlet中不能对输出做flush。最终只有被被forward去的servlet的内容被输出。

 

在原始servlet中设置的响应状态码和响应头会被include的servlet忽略。include的servlet在处理的时候只会保留进入include的servlet之后的状态码和状态头。

对于forward,在两个servlet设置的状态码和状态头都会被用到。

 

使用include转发时,response的编码格式不是UTF-8,所以请求时会出现乱码现象,因此需要显示的response的编码修改为UTF-8/GBK/GB2312。

 

不管是include、forward还是sendRedirect,在该行代码执行之后的语句仍然被执行,只是输出到response的内容没有作用了。

 

总结:

sendRedirect与include、forward的区别在于是不是同一个Request,sendRedirect会有两次交互;

include与forward的区别在于输出的内容,include包含两者的结果,而forward只有forward一个,以及响应头。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值