Why do ServletResponse object not passed through filters once the output is prepared in the servlet -


in head first jsp , servlets reading filters chapter, in see when filters used final output(servletresponse) prepared in servlet not passed through filter , directly sent client(end user). why that. in example says response not passed through filter , sent directly client , have use wrappers such httpservletresponsewrapper.

  1. when filters enabled can intercept request, why not response not intercepted.

  2. why response create custom response extending httpservletresponsewrapper.

can please explain

you make confusion. filters can intercept , change or replace both request , response, , can act before or after servlet processing. problem if pass original response down chain, on return chain.dofilter, can committed, said differently may have been sent client , late !

let's how filter works. relevant method dofilter:

void dofilter(servletrequest request, servletresponse response, filterchain chain) {     // before calling chain.dofilter, filter can     // modify request, wrap request , pass chain, wrap response ,     // pass dummy response chain, or directly commit response , return     // without calling chain      chain.dofilter(req, resp); // pass original or wrapped requests          // , responses down chain servlet (in no other filter decides         // directly commit response)      // after calling chain, response should have allready been committed (sent client ...)     // , can no longer changed ... unless wrapped "dummy" response     // passed chain - in case time process original response } 

Comments