java 之 编码实现Filter学习示例
2012-03-09 15:10
706 查看
public interface Filter { void doFilter(Request request,Response response,FilterChain chain); }
public class HTMLFilter implements Filter { @Override public void doFilter(Request request, Response response, FilterChain chain) { request.setRequestStr(request.getRequestStr().replace('<', '[').replace('>', ']')); chain.doFilter(request, response, chain); response.setResponseStr("-----------HtmlFilter()"); } }
public class SensitiveFilter implements Filter { @Override public void doFilter(Request request, Response response, FilterChain chain) { request.setRequestStr(request.getRequestStr().replace("s","js")); chain.doFilter(request, response, chain); response.setResponseStr("-----------SensitiveFilter()"); } }
import java.util.ArrayList; import java.util.List; public class FilterChain implements Filter { List<Filter> filters = new ArrayList<Filter>(); int index = 0; public FilterChain addFilter(Filter f) { this.filters.add(f); return this; } @Override public void doFilter(Request request, Response response, FilterChain chain) { if(index==filters.size()) { return; } Filter f = filters.get(index); index++; f.doFilter(request, response, chain); } }
public class Request { private String requestStr; public String getRequestStr() { return requestStr; } public void setRequestStr(String requestStr) { this.requestStr = requestStr; } }
public class Response { private String responseStr="response"; public String getResponseStr() { return responseStr; } public void setResponseStr(String responseStr) { this.responseStr += responseStr; } }
public class TestFilter { /** * @param args */ public static void main(String[] args) { String msg = "<script>"; Request request = new Request(); request.setRequestStr(msg); Response response = new Response(); FilterChain fc = new FilterChain(); fc.addFilter(new HTMLFilter()).addFilter(new SensitiveFilter()); fc.doFilter(request, response, fc); System.out.println(request.getRequestStr()); System.out.println(response.getResponseStr()); } }
打印结果:
[jscript]
response-----------SensitiveFilter()-----------HtmlFilter()
##########################################################################################
通常我们所访问的资源是一个servlet或jsp页面,而jsp其实是一个被封装了的servlet(每个jsp执行前都会被转化为一个标准的servlet,这点若还有不明白的请自己到网上查一下吧),于是我们就可以统一地认为我们每次访问的都是一个Servlet,而每当我们访问一个servlet时,web容器都会调用该Servlet的service方法去处理请求。而在service方法又会根据请求方式的不同(Get/Post)去调用相应的doGet()或doPost()方法,实际处理请求的就是这个doGet或doPost方法。写过servlet的朋友都应该知道,我们在doGet(或doPost)方法中是通过response.getWriter()得到客户端的输出流对象,然后用此对象对客户进行响应。 到这里我们就应该理解了过滤器的执行流程了:执行第一个过滤器的chain.doFilter()之前的代码——>第二个过滤器的chain.doFilter()之前的代码——>……——>第n个过滤器的chain.doFilter()之前的代码——>所请求servlet的service()方法中的代码——>所请求servlet的doGet()或doPost()方法中的代码——>第n个过滤器的chain.doFilter()之后的代码——>……——>第二个过滤器的chain.doFilter()之后的代码——>第一个过滤器的chain.doFilter()之后的代码。
相关文章推荐
- java 之 编码实现Filter学习示例
- 【JAVAWEB学习笔记】24_filter实现自动登录和解决全局的编码问题
- 我的Java开发学习之旅------>Base64的编码思想以及Java实现
- 今天看到了一个用java实现复制,剪切,删除文件或文件夹的示例,感觉不错,欢迎学习(带详细注释)
- java学习之利用TCP实现的简单聊天示例代码
- Java实现二维码QRCode的编码和解码与示例解析
- 我的Java开发学习之旅------>Base64的编码思想以及Java实现
- java使用http实现文件下载学习示例
- java实现fibonacci数列学习示例分享(斐波那契数列)
- JavaWeb-过滤器Filter学习(二)设置全站编码与设置页面缓存
- 【算法学习】快速排序算法实现(Java)
- JavaWeb基础 实现Servlet接口 简单示例
- java如何实现系统监控、系统信息收集、sigar开源API的学习
- Java学习笔记——文本操作(记事本实现)
- java实现的计算器功能示例【基于swing组件】
- Java学习笔记——文本操作(记事本实现)
- java实现泛域名解析,附SpringMVC源码示例
- JAVA学习55_Java正则表达式的语法与示例
- 深度学习项目示例-采用caffe实现LENET网络实现铲齿识别-并可视化过程
- Java中Filter、Servlet、Listener的学习