java servlet拾遗(2)-请求转发、包含、重定向

Servlet对象全部由Servlet容器创建,并且Servlet对象的service()方法也由容器调用,那么一个Servlet对象能否直接调用另外一个Servlet对象的service()方法?很遗憾,不行。一个servlet对象无法获得另外一个servlet对象的引用,只能通过Servlet容器调用。假如一个请求,需要两个Servlet对象的service方法共同完成,该怎么做呢?
Servlet提供了三种方法:
 
一、请求转发
  • Servlet A对象先对请求做a处理,然后把请求转发到其他Web组件,如Servlet B对象,由Servlet B对象继续完成后续操作
  • javax.servlet.RequestDispatcher 接口,命名上可以看出来,请求路由接口,使用public void forward(ServletRequest request, ServletResponse response)  throws ServletException, IOException;进行转发
  • javax.servlet.RequestDispatcher  两种获取方式 
  1. 调用ServletContext 的 public RequestDispatcher getRequestDispatcher(String path); path表示绝对路径,即以"/"开头的路径
  2. 调用ServletRequest  的 public RequestDispatcher getRequestDispatcher(String path);path表示相对路径,即相对于当前源Servlet组件的路径,不以"/开头
Servlet A对象转发到Servlet B对象时,ServletRequest ,ServletResponse,都是共用的,而HttpServletRequest  自定义的方法,则是不通用的,这个少稍微注意。
 
二、包含
  •  Servlet Main 输出时,需要包含header,leftNav,footer,多么典型的应用
  • javax.servlet.RequestDispatcher 接口 public void include(ServletRequest request, ServletResponse response)  throws ServletException, IOException; 使用这个方法,则可以包含这些通用页面或者组件
 
三、重定向
  • 请求转发、包含,都是本应用内使用,如果需要使用其他的服务,则需要使用重定向。
  • 用户请求Servlet对象时,Servlet对象处理业务后,返回http 状态码 302,响应中还包含了一个URL,客户端则会自动再次请求另外一个URL,并接收响应结果。
  • javax.servlet.http.HttpServletResponse 的public void sendRedirect(String location) throws IOException; String location表示重定向的地址,以http://开头的地址则是绝对地址,可以是本应用,也可以是外部的web应用,以/开头,则是本地web 绝对地址应用
  • 典型的应用,登陆时包含一个地址,登录成功之后,直接重定向到这个地址,省的用户再次点击。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值