Filter的原理
2016-06-24 12:28
274 查看
模拟过滤器链的工作原理。和servlet和struts的拦截器站差不多。
先定义Filter接口:
package com.qbd.duan.main;
public interface Filter {
public void doFilter(Request request,Response response,FilterChain chain);
}
在写具体的实现类:
package com.qbd.duan.main;
public class FaceFilter implements Filter {
@Override
public void doFilter(Request request,Response response,FilterChain chain) {
// TODO Auto-generated method stub
request.requeststr=request.getRequeststr().replace(":)", "^_^")+"\nreqFace()"+"\n";
chain.doFilter(request, response, chain);
response.responsestr=response.getResponsestr()+"resFace()"+"\n";
}
}
package com.qbd.duan.main;
public class ReFilter implements Filter{
@Override
public void doFilter(Request request, Response response,FilterChain chain) {
// TODO Auto-generated method stub
request.requeststr=request.getRequeststr().replace("sb", "**")+"reqRe()"+"\n";
chain.doFilter(request, response, chain);
response.responsestr=response.getResponsestr()+"resRe()"+"\n";
}
}
然后写链条管理器用来进行添加移除Filter和执行下一个Filter
package com.qbd.duan.main;
import java.util.ArrayList;
import java.util.List;
public class FilterChain implements Filter {
private List<Filter> filters=new ArrayList<Filter>();
private int index;
public Filter add(Filter f){
filters.add(f);
return this;
}
public void remove(Filter f){
filters.remove(f);
}
public List<Filter> getFilters() {
return filters;
}
public void setFilters(List<Filter> filters) {
this.filters = filters;
}
@Override
public void doFilter(Request request,Response response,FilterChain chain) {
// TODO Auto-generated method stub
if(index==filters.size())
return ;
Filter f=filters.get(index);
index++;
f.doFilter(request,response,chain);
}
}
然后是两个实体类封装一些请求和相应:
package com.qbd.duan.main;
public class Request {
String requeststr;
public String getRequeststr() {
return requeststr;
}
public void setRequeststr(String requeststr) {
this.requeststr = requeststr;
}
}
package com.qbd.duan.main;
public class Response {
String responsestr;
public String getResponsestr() {
return responsestr;
}
public void setResponsestr(String responsestr) {
this.responsestr = responsestr;
}
}
然后是测试类:
package com.qbd.duan.main;
public class Main {
public static void main(String[] args) {
String str=":) sb nihao";
Request request=new Request();
request.setRequeststr(str);
Response response=new Response();
response.setResponsestr("response");
FilterChain chain=new FilterChain();
FilterChain chain1=new FilterChain();
chain.add(new FaceFilter());
chain1.add(new ReFilter());
chain.add(chain1);
chain.doFilter(request, response,chain);
System.out.println(request.getRequeststr());
System.out.println(response.getResponsestr());
}
}
先定义Filter接口:
package com.qbd.duan.main;
public interface Filter {
public void doFilter(Request request,Response response,FilterChain chain);
}
在写具体的实现类:
package com.qbd.duan.main;
public class FaceFilter implements Filter {
@Override
public void doFilter(Request request,Response response,FilterChain chain) {
// TODO Auto-generated method stub
request.requeststr=request.getRequeststr().replace(":)", "^_^")+"\nreqFace()"+"\n";
chain.doFilter(request, response, chain);
response.responsestr=response.getResponsestr()+"resFace()"+"\n";
}
}
package com.qbd.duan.main;
public class ReFilter implements Filter{
@Override
public void doFilter(Request request, Response response,FilterChain chain) {
// TODO Auto-generated method stub
request.requeststr=request.getRequeststr().replace("sb", "**")+"reqRe()"+"\n";
chain.doFilter(request, response, chain);
response.responsestr=response.getResponsestr()+"resRe()"+"\n";
}
}
然后写链条管理器用来进行添加移除Filter和执行下一个Filter
package com.qbd.duan.main;
import java.util.ArrayList;
import java.util.List;
public class FilterChain implements Filter {
private List<Filter> filters=new ArrayList<Filter>();
private int index;
public Filter add(Filter f){
filters.add(f);
return this;
}
public void remove(Filter f){
filters.remove(f);
}
public List<Filter> getFilters() {
return filters;
}
public void setFilters(List<Filter> filters) {
this.filters = filters;
}
@Override
public void doFilter(Request request,Response response,FilterChain chain) {
// TODO Auto-generated method stub
if(index==filters.size())
return ;
Filter f=filters.get(index);
index++;
f.doFilter(request,response,chain);
}
}
然后是两个实体类封装一些请求和相应:
package com.qbd.duan.main;
public class Request {
String requeststr;
public String getRequeststr() {
return requeststr;
}
public void setRequeststr(String requeststr) {
this.requeststr = requeststr;
}
}
package com.qbd.duan.main;
public class Response {
String responsestr;
public String getResponsestr() {
return responsestr;
}
public void setResponsestr(String responsestr) {
this.responsestr = responsestr;
}
}
然后是测试类:
package com.qbd.duan.main;
public class Main {
public static void main(String[] args) {
String str=":) sb nihao";
Request request=new Request();
request.setRequeststr(str);
Response response=new Response();
response.setResponsestr("response");
FilterChain chain=new FilterChain();
FilterChain chain1=new FilterChain();
chain.add(new FaceFilter());
chain1.add(new ReFilter());
chain.add(chain1);
chain.doFilter(request, response,chain);
System.out.println(request.getRequeststr());
System.out.println(response.getResponsestr());
}
}
相关文章推荐
- jQuery plugin items filter
- 全国哀悼日网站页面变成灰色的filter方法
- 用css filter做鼠标滑过图片效果
- ASP 使用Filter函数来检索数组的实现代码
- JavaScript 数组some()和filter()的用法及区别
- Vue.js报错Failed to resolve filter问题的解决方法
- ASP.NET MVC:Filter和Action的执行介绍
- jQuery遍历DOM节点操作之filter()方法详解
- jQuery中each()、find()和filter()等节点操作方法详解(推荐)
- JSP Filter的应用方法
- PHP中实现Bloom Filter算法
- Jquery find与filter函数区别 说明
- Event filter with query SELECT * FROM __InstanceModificationEvent WITHIN
- PHP内置过滤器FILTER使用实例
- PHP中filter函数校验数据的方法详解
- Android中的Intent Filter匹配规则简介
- javascipt:filter过滤介绍及使用
- 浅析AngularJS Filter用法
- Angularjs中如何使用filterFilter函数过滤
- AngularJS中的过滤器filter用法完全解析