简单使用Filter模拟Servlet中的过滤器

涉及到的类:

1:Request.java              负责请求信息

2:Response.java           负责返回信息的处理

3:FilterChain.java          过滤器链

4:Filter.java                  过滤器接口类

5:HtmlFilter.java           html字符特殊字符过滤器

6:SensitiveFilter.java   敏感字符的过滤器

7:Main.java                 模拟程序的客户端测试程序

下面分别依次看代码:

 

Request.java

package com.gd.filter.web;

/**
 * 
 * @author Sandy
 * 请求对象
 */
public class Request {
	String requestString;

	public String getRequestString() {
		return requestString;
	}

	public void setRequestString(String requestString) {
		this.requestString = requestString;
	}

}

 

Response.java

package com.gd.filter.web;

/**
 * 
 * @author Sandy
 * 响应对象
 */
public class Response {
	String responseString;

	public String getResponseString() {
		return responseString;
	}
	public void setResponseString(String responseString) {
		this.responseString = responseString;
	}

}

 

 FilterChain.java

package com.gd.filter.web;

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

/**
 * 
 * @author Sandy
 * 过滤器链
 */
public class FilterChain implements Filter {
	List<Filter> filters = null;

	int index = 0;

	public FilterChain() {
		super();
		filters = new ArrayList<Filter>();
	}

	/*往filter链中添加一个过滤器,这里用到了个一个技巧就是返回this对象,这样可以实现添加完成一个
	 *过滤器链后,还可以紧接着添加下一个filter
	 *this.add(filter1).add(filter2)的方式
	 */
	public FilterChain add(Filter filter) {
		this.filters.add(filter);
		return this;
	}
	//过滤方法
	public void doFilter(Request request, Response response, FilterChain chain) {
		if (index == filters.size())
			return;
		Filter filter = filters.get(index);
		index++;
		filter.doFilter(request, response, chain);
	}
}

 Filter.java

package com.gd.filter.web;

/**
 * 
 * @author Sandy
 * 创建一个Filter接口
 */

public interface Filter {
	void doFilter(Request  request,Response  responses,FilterChain chain);

}

 HtmlFilter.java

package com.gd.filter.web;

/**
 * 
 * @author Sandy 
 * html中特殊字符替换过滤器
 */
public class HtmlFilter implements Filter {

	public void doFilter(Request request, Response response, FilterChain chain) {

		request.requestString = request.requestString.replace("<", "[")
				.replace(">", "]")
				+ "------HtmlFilter()";
		chain.doFilter(request, response, chain);
		response.responseString += "-------------+HtmlFilter()";
	}

}

 SensitiveFilter.java  

package com.gd.filter.web;

/**
 * @author Sandy 
 * 替换敏感字符的过滤器
 */
public class SensitiveFilter implements Filter {
	public void doFilter(Request request, Response response, FilterChain chain) {
		request.requestString = request.requestString.replace("被抓住", "抓住")
				.replace("被扣留", "扣留")
				+ "----------SensitiveFilter()";
		chain.doFilter(request, response, chain);
		response.responseString += "SensitiveFilter()";
	}
}

  Main.java

package com.gd;

import com.gd.filter.web.FilterChain;
import com.gd.filter.web.HtmlFilter;
import com.gd.filter.web.Request;
import com.gd.filter.web.Response;
import com.gd.filter.web.SensitiveFilter;

/**
 * 
 * @author Sandy
 * 主客户端测试程序
 */
public class Main {

	/**
	 * @param args
	 */
	public static final String NEW_STRING = "<javaSrcipt>,被抓住,被扣留";

	public static void main(String[] args) {
		Request request = new Request();
		request.setRequestString(NEW_STRING);
		Response response = new Response();
		response.setResponseString("response--------");
		FilterChain chain = new FilterChain();
		chain.add(new HtmlFilter()).add(new SensitiveFilter());
		chain.doFilter(request, response, chain);
		System.out.println(request.getRequestString());
		System.out.println(response.getResponseString());

	}

}

 

附件中是完整的模拟servlet的filter

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值