Servlet和Filter的区别
1.关系
2.介绍
概念
Servlet:是一种运行在服务器端的Java应用程序,独立于平台和协议,可以动态生成web网页,它工作与客户端请求和服务器的中间层。
Filter:是一个可以复用的代码片段,可以用来转换请求,响应以及头信息,filter不能产生请求和响应,他只能在请求到达servlet之前对于请求进行修改,或者在请求返回客户端之前对响应进行处理。
生命周期
Servlet :在系统启动或者请求到达Servlet时,通过init()方法进行初始化,一旦被装入web服务器,一般不会从web服务器中删除,直到服务器关闭才会调用destroy()方法进行销毁,每次请求,Request都会被初始化,响应请求后,请求被销毁,但是Servlet不会随着请求的销毁而销毁,
如果某个Servlet配置了<load-on-startup>1</load-on-startup>,该Servlet是在Tomcat(Servlet)启动的时候初始化,如果没有配置,则是在请求到来时初始化。
Filter:是在系统启动的时候通过init()初始化的,每次请求都会调用dofiter()方法进行处理,服务器停止的时候调用destroy()进行销毁。
职责
Servlet:可以动态创建基于客户请求的页面,可以读取客户端发来的隐藏数据和显示数据,可以和其他的服务器资源进行通讯,通过状态代码和响应头向客户端返回数据。
Filter:主要是对请求到达servlet之前对请求和请求头信息进行前处理,和对数据返回客户端之前进行后处理
3.区别
Servlet的流程比较短,URL来了之后对其进行处理,处理完成就返回数据或者转向另一个页面,
Filter的流程比较长,在一个filter处理之后还可以转向另一个filter进行处理,然后在交给Servlet,但是Servlet处理后就不能向下传递了,
Filter可以用来进行字符串编码的过滤,检测用户是否登陆的过滤,禁止页面的缓存等。