当前位置: 代码迷 >> J2EE >> 关于ServletContext中转请求
  详细解决方案

关于ServletContext中转请求

热度:30   发布时间:2016-04-17 23:08:45.0
关于ServletContext转发请求。
public class sss extends HttpServlet {


public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletExceptionIOException {
ServletContext context=this.getServletContext();
response.getOutputStream().write("哈哈".getBytes());

try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
context.getRequestDispatcher("/serv").forward(request, response);
}

}


访问页面后为什么”哈哈“没有打印在页面上?不应该死先打印在页面上,然后再访问另一个页面吗?
------解决思路----------------------
你要搞清楚,并不是你往response里面写了东西,服务端就立即会发回客户端的。要么写入的数据超过了缓冲区,要么你手动flush。否则,数据并不会发送到客户端。而你在后面紧接着调用了forward,请看下面的说明:
The Forward Method
The forward method of the RequestDispatcher interface may be called by the
calling servlet only when no output has been committed to the client. If output data
exists in the response buffer that has not been committed, the content must be
cleared before the target servlet’s service method is called. If the response has been
committed, an IllegalStateException must be thrown.

也就是说forward会先清除已经写入buffer但是还没有真正发给客户端的数据,然后再转到相应的servlet处理,这段英文摘选自servlet3.0 spec。
  相关解决方案