java 之 编码实现Filter学习示例
来源:互联网 发布:java文件执行过程 编辑:程序博客网 时间:2024/05/22 02:09
public interface Filter {void doFilter(Request request,Response response,FilterChain chain);}
public class HTMLFilter implements Filter {@Overridepublic 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 {@Overridepublic 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;}@Overridepublic 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学习示例
- java 之 编码实现Filter学习示例
- Java学习之Filter
- Java学习之Filter
- JAVA学习之 浅析Filter
- java学习之Servlet Filter
- JAVA互联网学习之Filter
- Filter统一编码实现
- JAVA WEB中用使用filter实现字符编码转换
- Servlet —— Filter示例:字符编码
- Servlet —— Filter示例:字符编码
- JAVA学习篇--javaweb之Filter详解
- JAVA学习篇--javaweb之Filter详解
- java 之 枚举学习示例
- java web filter listenter 示例
- Java 8 Streams filter 示例
- Java Web 学习笔记之五:实现Filter解决中文乱码问题
- 使用Filter实现编码过滤器
- JMX服务端和客户端的代码
- EXTJS 比较日期大小
- Ubuntu ssh 配置,常用命令
- 基于WinCE模拟器的应用程序调试
- sqlite 数据库官方文档(翻译版)
- java 之 编码实现Filter学习示例
- js
- 实现google suggest效果
- 素数
- 采用多线程调用ocx技术,避免主程序崩溃
- AS3中释放优化的几条常识
- 2011优秀创意和设计
- android 记住密码
- java做成 ZIP文件