Servlet总结02——请求转发

我们很多时候要对请求进行转发,例如:

1.servlet处理完相关业务后,将请求转发到一个jsp页面;

2.基于mvc模式,定义一个servlet充当控制器,将请求转发个特定servlet或jsp;

在Servlet中我们可以使用javax.servlet.RequestDispatcher来处理请求转发。

 

(一)RequestDispatcher

requestDispatcher对象由servlet容器创建,用于封装一个由路径所标识的服务器资源。

转发的动作包括:

1) public void forward(ServletRequest request, ServletResponse response) throws ServletException, IOException;

该方法必须在响应被提交给客户端之前调用,否则抛出IllegalStateException异常。forward进入后,原先的Servlet将终止执行。

2) public void include(ServletRequest request, ServletResponse response) throws ServletException, IOException;

include进入被调用的对象后,执行完相关操作后仍然会继续原先的servlet。

note:注意forward和include的区别。

 

(二)获得RequestDispatcher对象。

从ServletRequest对象获取:

public RequestDispatcher getRequestDispatcher(String path);

从ServletContext对象获取:

public RequestDispatcher getRequestDispatcher(String path);

public RequestDispatcher getNamedDispatcher(String name);

note:servletRequest和servletContext有同样的方法:getRequestDispatcher,那么区别是什么?

区别:

servletRequest的getRequestDispatcher方法,参数path可以以斜杠(/)开头,代表当前上下文根的路径。

如果不用斜杠开头,则相对于当前Servlet的路径。

servletContext的getRequestDispatcher方法,参数path必须要以斜杠(/)开头。

 

(三)sendRedirect和forward的区别

sendRedirect是HttpServletResponse的方法。他的工作原理是:

关键点:调用sendRedirect方法,会在响应中设置locaction响应报头,它告诉浏览器再访问一次directory的新资源。

这对于用户来说是透明的,一切都是有浏览器完成的。用户只是发现地址栏发生了变化。

整个过程有两次请求。

 

而forward的原理如下:

关键点:这个过程对于用户而言更透明,他并不知道服务端内部是哪个servlet处理了请求,甚至地址栏都没有任何变化。

这个过程只有一次请求。

转载自:http://www.cnblogs.com/huangfox/archive/2011/10/21/2220132.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值