Tomcat过滤器模拟
直接上代码Filter.java
public interface Filter {
//过滤器
public void doFilter(Request request,Response response,FilterChain chain);
}
FilterChain.java
public class FilterChain {
//存放所有的过滤器
private List<Filter> filters ;
//记录当前过滤索引
private int index;
//过滤链初始化
public FilterChain()
{
filters = new ArrayList<Filter>(10);
}
public void addFilter(Filter filter)
{
filters.add(filter);
}
/**
* 迭代过滤
*/
public void doFilter(Request request,Response response)
{
if ( index >= filters.size() )
return;
filters.get( index++ ).doFilter(request, response, this);
}
}
Request.java
public class Request {
private String value;
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
@Override
public String toString() {
return this.value;
}
}
Response.java
public class Response {
private String value;
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
@Override
public String toString() {
return this.value;
}
}
FilterOne.java
public class FilterOne implements Filter{
/**
* 过滤FUCK字符
*/
@Override
public void doFilter(Request request, Response response, FilterChain chain) {
System.out.println("进入过滤器FilterOne---------------------------------------");
//执行下一个过滤器
chain.doFilter(request, response);
System.out.println("出去过滤器FilterOne---------------------------------------");
}
}
FilterTwo.java
public class FilterTwo implements Filter{
@Override
public void doFilter(Request request, Response response, FilterChain chain) {
System.out.println("进入过滤器FilterTwo---------------------------------------");
//执行下一个过滤器
chain.doFilter(request, response);
System.out.println("出去过滤器FilterTwo---------------------------------------");
}
}
Test.java
public class Test {
public static void main(String[] args) {
FilterChain chain = new FilterChain();
chain.addFilter(new FilterOne());
chain.addFilter(new FilterTwo());
chain.doFilter(new Request(), new Response() );
}
}
运行结果
进入过滤器FilterOne---------------------------------------
进入过滤器FilterTwo---------------------------------------
出去过滤器FilterTwo---------------------------------------
出去过滤器FilterOne---------------------------------------
Tomcat过滤器模拟的更多相关文章
- tomcat过滤器异常
Connected to server[2019-11-25 04:40:58,976] Artifact DUBBO_BG:Web exploded: Artifact is being deplo ...
- memcached+tomcat转发forward时 sessionid一直变化的问题
今天遇到了一个很奇怪的问题, 我在tomcat过滤器 中, 对请求过来的静态资源及html页面做了forword转发操作,核心代码如下: private void redirectMobile(Htt ...
- 同主机下Docker+nginx+tomcat负载均衡集群搭建
想用Docker模拟一下nginx+tomcat集群部署,今天折腾了一天,遇坑无数,终于在午夜即将到来之际将整个流程走通,借本文希望给同样遇到类似问题的小伙伴们留点线索. 主机环境是CentOS 7, ...
- Android服务器——使用TomCat实现软件的版本检测,升级,以及下载更新进度!
Android服务器--使用TomCat实现软件的版本检测,升级,以及下载更新进度! 算下来,TomCat服务器已经写了很长一段时间了,一直说拿他来搞点事 情,也一直没做,今天刚好有空,交流群还有人请 ...
- windows下apache httpd2.4.26集群完整搭建例子:下载、启动、tomcat集群例子
第一部分——下载 1.1: 百度搜索apache httpd关键字,第一个链接既是官方下载地址.如果这一步不会,此篇文章不适合你阅读,请自行停止. 1.2:进入官网http://httpd.apach ...
- nginx+tomcat实现负载均衡以及双机热备
还记得那些年吗? 还记得更新代码之后,服务器起不来被领导训斥吗?还记得更新代码,需要停机过多的时间被渠道部们埋怨吗?还记得更新代码,代码出错时自己吓个半死吗?于是我们聪明勤快的程序员,看着电影待到夜深 ...
- http和数据库sql分析与窃听技术
用tunnel,tunnel是一种技术称谓,将其放到真正的服务器和客户端之间.调试阶段可以使用webcream运行tomcat作为模拟的真正的服务器. 具体:用apache axis及其项目中的工具t ...
- Eclipse使用新手教程
说起java的IDE,朗朗上口的无非是Eclipse了,假若能熟练Eclipse,对于我们编写java程序会起到事半功倍的效果,大大提高我们工作效率.因此本篇博文,笔者仅仅是针对刚刚入门java的新手 ...
- CAS单点登录配置[4]:客户端配置
本节介绍一下客户端如何配置,客户端配置没有服务端那么复杂... 客户端Tomcat配置 1 首先确认证书文件已经拷贝到Tomcat的目录下,我们新建两个客户端的web应用,分别命名为Client1,C ...
随机推荐
- D - Cow Ski Area
Description Farmer John's cousin, Farmer Ron, who lives in the mountains of Colorado, has recently t ...
- js中不同的height, top的对比
每次看到js中的clientHeight(clientTop), offsetHeight(offsetTop),scrollHeight(scrollTop)就头大,根本分不清这几种的区别,然而碰到 ...
- 解决Gradle minifyEnabled无法找到错误
Android studio最新版0.9支持proguard minify,shrinkResources ,尝试了下,提示找不到minifyEnabled方法 Error:(29, 0) Gradl ...
- java 7K交通灯管理系统面试题
交通灯管理系统 模拟实现十字路口的交通灯管理系统逻辑.详细需求例如以下: 1. 异常随机生成依照各个路线行驶的车辆. 比如: 由南向而来去往北向的车辆----直行车辆 由西向而来去往 ...
- Python输出文件由线解释和扩展的具体内容
结束此处的测试代码中作者写的,第一段包含不正确的版本号,后者是正确的版本号: #! /usr/bin/python2.7 try: filename = raw_input('please i ...
- 动态传递参数到DevExpress.XtraReports的小结
原文:动态传递参数到DevExpress.XtraReports的小结 前两种方法和WinForm一样,可以传递参数.数组.实体对象.DataTable等1. 采用构造函数具体用法:在Report中p ...
- LevelDB初体验
近期工作须要找一个能使用磁盘存储数据,对写要求比較苛刻,须要每秒达100000TPS,读的时候须要能10000TPS左右,不能占用太多内存.单节点满足这个要求的常见有Redis.Memcached等, ...
- leetcode 之 Unique Paths
Unique Paths A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagra ...
- hardware_hp刀片服务器安装windows 2008系统配置
2012年10月26日星期五 第一步. 看刀片机柜的后的OA地址 点击 OK 查看 Actlve OA 例如: 192.168.254.31 l 第二步: 连接PC 到左侧第一个接口 修改本机ip为同 ...
- HDU 1243 畅通project 并査集
Total Submission(s): 31033 Accepted Submission(s): 16313 Problem Description 某省调查城镇交通状况,得到现有城镇道路统 ...