首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

容易使用Filter模拟Servlet中的过滤器

2012-09-25 
简单使用Filter模拟Servlet中的过滤器涉及到的类:1:Request.java??????????? ? 负责请求信息2:Response.ja

简单使用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

?

热点排行