关于java web中Filter和Servlet的一些理解

作java web开发  不管是新手仍是老手 都不可避免的要接触到filter和servlet 乃至于不少状况下都要自定义filter和servlet  他们都是有生命周期的  基本的相似初始化方法和销毁方法比较好理解 再也不赘述。 java

filter  是拦截器 过滤器的意思  当客户端发起一个请求的时候  请求信息以request对象的方法传入到服务端 在web.xml中 能够自定义不少filter  web容器 将他们组织成相似一个锁链(chain)的东西 对请求进行拦截。若是你看过spring中aop部分的ProxyFactoryBean的源码  会发现里面的模式和filter几乎是同样的   web


invocation = new ReflectiveMethodInvocation(proxy, target, method, args, targetClass, chain);
// Proceed to the joinpoint through the interceptor chain.
retVal = invocation.proceed();

这个里面的chain便是一个链   对调用某目前对象方法进行相应的拦截  spring

可是在javax.servlet.Filter中  还有个dispatcher参数  这个参数的取值为REQUEST,FORWARD,INCLUDE和ERROR  表示该请求方式  默认状况下是REQUEST   也即浏览器发起的请求。 其它方式  好比request.getRequestDispatcher("xx").forward(request, response);这种方式  该filter是不进行拦截的。其它几个也是相似。 浏览器

servlet你能够理解为一个处理动做 经过servlet-mapping中的url-pattern对请求路径进行相应的拦截  它是没有相似filter中的dispatcher参数的。 app

咱们目前接触的比较多的filter有  CharacterEncodingFilter:  对请求内容进行统一编码
                                        FilterDispatcher:struts2中的核心控制器
框架

Servlet比较出名是springMVC中的DispatcherServlet   是一个标准的干净的MVC框架 编码

相关文章
相关标签/搜索