模拟javaWeb责任链的设计
2024-10-07 14:41:18
这篇文章介绍了责任链模式的应用:本文介绍如果自己实现一个责任链
定义请求和响应信息
简单定义请求类Request(封装一个字符串)
public class Request {
String requestStr; public String getRequestStr() {
return requestStr;
} public void setRequestStr(String requestStr) {
this.requestStr = requestStr;
}
}
简单定义响应类Response
public class Response {
String responseStr; public String getResponseStr() {
return responseStr;
} public void setResponseStr(String responseStr) {
this.responseStr = responseStr;
} }
定义Filter(参数接收Request和Response)
至于为什么接收FilterChain(是为了下面filter里面能够调用FilterChain的doFilter()方法)
定义Filter接口
把Request对象和Response对象交给处理器Filter:处理器既能处理Request对象 也能处理Response对象
public interface Filter {
void doFilter(Request request, Response response, FilterChain chain);
}
定义两个Filter实现类
public class HTMLFilter implements Filter { @Override
public void doFilter(Request request, Response response, FilterChain chain) {
//process the html tag <>
request.requestStr = request.requestStr.replace('<', '[')
.replace('>', ']') + "---HTMLFilter()";
chain.doFilter(request, response, chain);
response.responseStr += "---HTMLFilter()";
} }
public class SesitiveFilter implements Filter { @Override
public void doFilter(Request request, Response response, FilterChain chain) {
request.requestStr = request.requestStr.replace("被就业", "就业")
.replace("敏感", "") + "---SesitiveFilter()";
chain.doFilter(request, response, chain);
response.responseStr += "---SesitiveFilter()"; } }
定义FilterChain
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);
}
}
main()方法测试
public class Main { /**
* @param args
*/
public static void main(String[] args) {
String msg = "大家好:),<script>,敏感,被就业,网络授课没感觉,因为看不见大家伙儿";
Request request = new Request();
request.setRequestStr(msg);
Response response = new Response();
response.setResponseStr("response");
FilterChain fc = new FilterChain();
fc.addFilter(new HTMLFilter())
.addFilter(new SesitiveFilter())
; fc.doFilter(request, response, fc);
System.out.println(request.getRequestStr());
System.out.println(response.getResponseStr());
} }
以上代码特点是 Request的处理是正序 Response的处理时倒序:
方便大家看清步骤:这是断点执行顺序
Filter里面调用了filterChain的doFilter方法
FilterChain里面调用了filter的doFilter方法
最新文章
- JSF的CommandXxx组件的update用法总结
- TCP/IP WebSocket MQTT
- LeetCode H-Index II
- cf(#div1 B. Dreamoon and Sets)(数论)
- NBUT 1122 Shameimaru&#39;s Candid Camera(水)
- 分页控件(PageControl)的相关属性说明
- 《Python 学习手册4th》 第七章 字符串
- 推荐一个可视化的学习Git的好网站:LearnGitBranching
- 大数的加法运算,杭电oj-1002
- 再谈机器学习中的归一化方法(Normalization Method)
- postgrel执行VACUUM报VACUUM cannot run inside a transaction block
- jQuery子页面获取父页面元素并绑定事件
- element UI Cascader 级联选择器 编辑 修改 数组 路径 问题(转载)
- P1438 无聊的数列
- 使用swagger来编写在线api文档
- Reverse Words in a String leetcode java
- 关于UITableView的黑线条
- python 全局变量与局部变量
- Web 前端性能优化相关内容解析
- LINUX修改、增加IP的方法,一张网卡绑定多个IP/漂移IP【转】
热门文章
- JDBC的ResultSet游标转spark的DataFrame,数据类型的映射以TeraData数据库为例
- golang-练习3
- MySQL数据库INNODB 表损坏修复处理过程
- postgre存储过程或者视图中";::";双冒号是什么意思
- Ubuntu分区小知识与分区方案
- Testng报错:method-selectors?,parameter*,groups?,packages?,classes?
- 如何在pycharm中进入shell脚本调试代码
- .NET Core 构建跨平台的桌面应用
- DOS基础使用专题(强烈推荐)
- delphi 创建桌面快捷方式