jsp 中request 、response以及filter互相之间的关系

来源:互联网 发布:ons模拟器mac版 编辑:程序博客网 时间:2024/04/29 10:44

  大家都知道request和response是servlet第一次被创建时由web容器创建的,filter时用来在客户端与服务器之间进行过滤操作设置的。

   首先 当客户端要访问服务器时,本地浏览器会将当前html页面上的数据包括本地磁盘上的cookie封装到request内,然后通过http协议传送到服务器,在它到达服务器之后不会马上到达目标servlet并执行service()方法,而是会先调用过滤器经过过滤器过滤处理(比如将request内数据编码转换格式)之后,过滤器调用chain.dofilter(request,response)方法,意思是执行后面的servlet或者下一个过滤器,最后到达servlet后开始执行相应service()方法,request内的数据被取出处理。这时候就开始用到了respons,response就是服务器用来向客户端传输数据用的。这个地方注意,因为好多人会认为response可以用来在服务器servlet之间传输数据,这是不正确的,也许大家看到过response.sendRedirect("a.jsp");虽然jsp也是servlet,但是这里的意思是重定向,同样是将重定向数据“a.jsp”回送给了客户端浏览器,由浏览器重新访问“a.jsp”。response可以给客户端传输以下信息:1,cookie (由服务器生成传送回本地磁盘)2 重定向网址资源信息比如上面的a.jsp  3、通过response.getOutputStream()获取的传输流向客户端传输html静态页面。而当客户端请求经过过滤器到达servlet 并且执行完了service()方法(这时需要回送给客户端的信息已经封装到了response数据流之中)之后,这个流程会再次进入过滤器,并从chain.dofilter()之后开始执行,执行完过滤器dofilter()之后服务器端response才会继续传输给客户端浏览器,保存cookie,形成html显示页面。

       所以说request和response是相辅相成的一对对象,前者封装客户端请求数据,后者封装会送给客户端的数据。至于filter一定要注意是对客户端和服务器端的过滤,像服务器端的转发是不会再次触发filter的(当然可以通过独特配置实现触发过滤器),因为转发是服务器内部的操作,但是重定向会触发filter,因为重定向可以说是完成了两次客户端到服务器端的访问。filter一般不止一个,像这样的话,filter会按照filter-mapping的配置顺序依次过滤

0 0
原创粉丝点击