读书人

Servlet请求中转

发布时间: 2012-10-11 10:16:10 作者: rapoo

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();        //会报异常
?

?

?

?

?

?

?

读书人网 >编程

热点推荐