面试总结之一 Servlet 和 Filter

来源:互联网 发布:淘宝手机卡禁售 编辑:程序博客网 时间:2024/06/01 13:36

近段时间面试,各种碰壁,学到不少东西,深刻意识到自己的无知,且掌握之物已不成体系,故开此一搏,总结知识,辨析道理,为日后所用,望坚持。

最近一个问题起,Spring MVC 是基于Servlet的还是Filter的?--答曰 Filter(记得有配置过...Filter的)

今日想起,经查,大错之。

spring mvc的入口是servlet,而struts2是filter。

首先,就没有搞清楚Filter的概念,和Servlet的区别所在,备忘在此:

看Servelt规范:

引用
A filter is a reusable piece of code that can transform the content of HTTP requests, responses, and header information. Filters do not generally create a response or respond to a request as servlets do, rather they modify or adapt the requests for a resource, and modify or adapt responses from a resource.
A servlet is a Java™ technology-based Web component, managed by a container, that generates dynamic content. Like other Java technology-based components, servlets are platform-independent Java classes that are compiled to platform-neutral byte code that can be loaded dynamically into and run by a Java technology-enabled Webserver. Servlets interact with Web clients via a request/response paradigm implemented by the servlet container.

所以,Filter和Servlet的功能是不同的,Filter只是对请求或者响应做处理,而不会产生真正的响应,是非必要的。

二者的职责如下:

1、servlet:
创建并返回一个包含基于客户请求性质的动态内容的完整的html页面;
创建可嵌入到现有的html页面中的一部分html页面(html片段);
读取客户端发来的隐藏数据;
读取客户端发来的显示数据;
与其他服务器资源(包括数据库和java的应用程序)进行通信;
通过状态代码和响应头向客户端发送隐藏数据。
2、filter:
filter能够在一个请求到达servlet之前预处理用户请求,也可以在离开servlet时处理http响应:
在执行servlet之前,首先执行filter程序,并为之做一些预处理工作;
根据程序需要修改请求和响应;
在servlet被调用之后截获servlet的执行;

filter可用来进行字符编码的过滤,检测用户是否登陆的过滤,禁止页面缓存等;

备注:web.xml 的加载顺序是:context-param -> listener -> filter -> servlet 。

如果一个请求匹配了一个Serlvet,并且该Servlet配置了一个或者多个Filter,毫无疑问,先执行Filter,再执行 Servlet。 多个匹配的Filter,是按照其在web.xml中配置的顺序 来执行的。


参考资料: http://blog.csdn.net/sundenskyqq/article/details/8549932

  http://hikin.iteye.com/blog/663539




0 0
原创粉丝点击