Servlet请求转发

    请求转发是Web组件之间协作的一种方式,多个Web组件共享一个ServletResponse和ServletRequest对象。

    1. 请求转发的实现

    Servlet的请求转发是通过RequestDispatcher类来实现的,我们可以通过以下方式获取RequestDispatcher对象。

ServletContext context = this.getServletContext();
RequestDispatcher dispatcher = context.getRequestDispatcher("/test"); // 绝对路径
dispatcher.forward(request, response);

request.getRequestDispatcher("test"); // 相对路径
dispatcher.forward(request, response);

    2. forward方法处理流程

    当调用forward方法后,会先清空用于存放响应正文的数据缓冲区,也就是说你在源组件中,可能已经写了一些数据到缓冲区了(如下代码),这时你写的数据都会被清理掉。

PrintWriter out = response.getWriter();
out.println("hello");
		
ServletContext context = this.getServletContext();
RequestDispatcher dispatcher = context.getRequestDispatcher("/test"); // 绝对路径
dispatcher.forward(request, response);		

    这时你写的输出语句并不会输出到用户端,在调用forward方法时,直接被清理掉了。

    3. 注意点

    如果你尝试在forward方法前向客户提交响应结果,这样是会报IllegalStateException的。

response.flushBuffer();  //会报异常
out.close();	        //会报异常
 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值