责任链模式

本文介绍了一种使用Java实现的过滤器模式,通过具体的例子展示了如何创建请求和响应对象,以及如何利用过滤器链来处理这些请求。具体包括了HtmlFilter、XMLFilter和JavascriptFilter三个过滤器的具体实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、ServletResponse

package com.sunrex.design.pattern;

public class ServletResponse {

	public String responseStr() {
		return " response " + (ServletRequest.i--);
	}
}

 

2、ServletRequest

package com.sunrex.design.pattern;

public class ServletRequest {
	public static int i = 0;
	public String getAttribute(String str) {
		i++;
		return str + " + " + i;
	} 
}

 

 

3、Filter接口

package com.sunrex.design.pattern;

public interface Filter {
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain);
}

 

 

4、FilterChain类

package com.sunrex.design.pattern;

import java.util.ArrayList;
import java.util.List;

public class FilterChain implements Filter {

	private List<Filter> filters = new ArrayList<Filter>();
	int index = 0;
	
	public FilterChain addFilter(Filter filter) {
		this.filters.add(filter);
		return this;
	}
	
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) {
		if(index >= filters.size()) return;
		Filter f = filters.get(index);
		index ++;
		f.doFilter(request, response, chain);
	}
	
}

 

 

5、HtmlFilter类

package com.sunrex.design.pattern;

public class HtmlFilter implements Filter {

	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) {
		System.out.println("--HtmlFilter.start--"+ request.getAttribute("test"));
		chain.doFilter(request, response, chain);
		System.out.println("--HtmlFilter.end--" + response.responseStr());
	}

}

 

 

6、XMLFilter类

package com.sunrex.design.pattern;

public class XMLFilter implements Filter {

	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) {
		System.out.println("  --XMLFilter.start--"+ request.getAttribute("test"));
		chain.doFilter(request, response, chain);
		System.out.println("  --XMLFilter.end--" + response.responseStr());
	}
}

 

 

7、JavascriptFilter类

package com.sunrex.design.pattern;

public class JavascriptFilter implements Filter {

	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) {
		System.out.println("    --JavascriptFilter.start-- " + request.getAttribute("test"));
		chain.doFilter(request, response, chain);
		System.out.println("    --JavascriptFilter.end--" + response.responseStr());
	}

}

 

 

8、测试类-FilterTest类

package com.sunrex.design.pattern;

public class FilterTest {

	public static void main(String[] args) {
		FilterChain fc = new FilterChain();
		fc.addFilter(new HtmlFilter()).addFilter(new XMLFilter()).addFilter(new JavascriptFilter());
		ServletRequest request = new ServletRequest();
		ServletResponse response = new ServletResponse();
		
		fc.doFilter(request, response, fc);
	}

}

 

 

9、程序执行结果

--HtmlFilter.start--test + 1
  --XMLFilter.start--test + 2
    --JavascriptFilter.start-- test + 3
    --JavascriptFilter.end-- response 3
  --XMLFilter.end-- response 2
--HtmlFilter.end-- response 1

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值