关于filter,基本上都是通过cor模式来实例的,著名的servlet filter。
对于cor模式,Chain of Responsibility
模式
cor改进
说得很清楚了。
现在根据mina的filter实现,写小个示例,演示下mina的cor实现。其实mina的filter更加像是个双向链表。基于常见
的cor模式是有点诡异了[mina指南]诡
异的
IoFilterChain实现
。
所有代码都是基于接口编程。
Filter接口
package minacor;
public interface Filter {
void messageReceived(NextFilter nextFilter,Object message);
public interface NextFilter {
void messageReceived(Object message);
}
}
FilterChain接口,这只有一个简单方法,mina中还有更多方法
package minacor;
public interface FilterChain {
/**
* 在filter chain尾部加个filter
* @param filter
*/
void addLast(Filter filter);
}
Request接口
package minacor;
/**
* 请求类
* Request.java 2010-3-1 下午09:41:42
* @Description:
*
* @author <a href="www.java1995.cn">Xingsheng.Zhu@gmail.com</a>
* @version 2.6
*/
public interface Request {
/**
* 请求真正业务执行
* @param message
*/
public void execute(Object message);
/**
* 得到请求数据
* @return
*/
public Object getMessage();
}
FilterChain的默认实现
package minacor;
import minacor.Filter.NextFilter;
/**
*
* DefaultFilterChain.java 2010-3-1 下午09:46:03
* @Description:FilterChain默认实现
*
* @author <a href="www.java1995.cn">Xingsheng.Zhu@gmail.com</a>
* @version 2.6
*/
public class DefaultFilterChain implements FilterChain {
//chain上的第一个实体,相当于链表的第一个节点
private Entry head;
//chain上的最后一个实体,相当于链表最后一个节点
private Entry tail;
private Request request;
public Request getRequest() {
return request;
}
public void setRequest(Request request) {
this.request = request;
}
public DefaultFilterChain() {
this.head = new Entry(null, null, new HeadFilter());
this.tail = new Entry(head, null, new TailFilter());
head.nextEntry = tail;
}
@Override
public void addLast(Filter filter) {
register(tail.prevEntry, filter);
}
private void register(Entry prevEntry, Filter filter) {
Entry newEntry = new Entry(prevEntry, prevEntry.nextEntry, filter);
prevEntry.nextEntry.prevEntry = newEntry;
prevEntry.nextEntry = newEntry;
}
/**
*
*实体类,相当于链表上的节点,节点中包括了上一个节点与下一个节点
*以及真实数据,也就是Filter
*/
private class Entry {
private Entry prevEntry;
private Entry nextEntry;
private Filter filter;
private final NextFilter nextFilter;
public Entry(Entry prevEntry, Entry nextEntry, Filter filter) {
this.prevEntry = prevEntry;
this.nextEntry = nextEntry;
this.filter = filter;
this.nextFilter = new NextFilter() {
@Override
public void messageReceived(Object message) {
Entry nextEntry = Entry.this.nextEntry;
callNextMessageReceived(nextEntry, message);
}
};
}
public Entry getPrevEntry() {
return prevEntry;
}
public void setPrevEntry(Entry prevEntry) {
this.prevEntry = prevEntry;
}
public Entry getNextEntry() {
return nextEntry;
}
public void setNextEntry(Entry nextEntry) {
this.nextEntry = nextEntry;
}
public Filter getFilter() {
return filter;
}
public void setFilter(Filter filter) {
this.filter = filter;
}
public NextFilter getNextFilter() {
return nextFilter;
}
}
public void fireMessageReceived(Object message) {
Entry head = this.head;
callNextMessageReceived(head, message);
}
private void callNextMessageReceived(Entry entry, Object message) {
System.out.println("call next");
Filter filter = entry.getFilter();
NextFilter nextFilter = entry.getNextFilter();
filter.messageReceived(nextFilter, message);
}
private class HeadFilter implements Filter {
@Override
public void messageReceived(NextFilter nextFilter, Object message) {
nextFilter.messageReceived(message);
}
}
private class TailFilter implements Filter {
@Override
public void messageReceived(NextFilter nextFilter, Object message) {
request.execute(message);
}
}
}
package minacor;
/**
* Filter的一个简单实现
* DemoFilter.java 2010-3-1 下午09:50:47
* @Description:
*
* @author <a href="www.java1995.cn">Xingsheng.Zhu@gmail.com</a>
* @version 2.6
*/
public class DemoFilter implements Filter{
@Override
public void messageReceived(NextFilter nextFilter,Object message) {
message = message.toString()+" demofilter ";
nextFilter.messageReceived(message);
}
}
package minacor;
/**
* Request的一个简单实现
* PrintRequest.java 2010-3-1 下午09:53:50
* @Description:
*
* @author <a href="www.java1995.cn">Xingsheng.Zhu@gmail.com</a>
* @version 2.6
*/
public class PrintRequest implements Request {
private Object message;
public Object getMessage() {
return message;
}
public void setMessage(Object message) {
this.message = message;
}
public PrintRequest(Object message) {
this.message = message;
}
@Override
public void execute(Object message) {
System.out.println(" print request " + message.toString());
}
}
package minacor;
/**
* 服务器端,管理FilterChain,Request
* Server.java 2010-3-1 下午09:55:19
* @Description:
*
* @author <a href="www.java1995.cn">Xingsheng.Zhu@gmail.com</a>
* @version 2.6
*/
public class Server {
private DefaultFilterChain filterChain = new DefaultFilterChain();
public FilterChain getFilterChain(){
return filterChain;
}
/**
* 处理请求
* @param request
*/
public void handleRequest(Request request){
filterChain.setRequest(request);
filterChain.fireMessageReceived(request.getMessage());
}
}
package minacor;
/**
* 客户端
* Client.java 2010-3-1 下午09:56:48
* @Description:
*
* @author <a href="www.java1995.cn">Xingsheng.Zhu@gmail.com</a>
* @version 2.6
*/
public class Client {
public static void main(String[] args) {
Server server = new Server();
server.getFilterChain().addLast(new DemoFilter());
server.handleRequest(new PrintRequest("ffff"));
}
}
http://www.java1995.cn/blog/item/123
分享到:
相关推荐
在Mina 1.1.7版本中,提供的示例源码是学习和理解Mina框架工作原理及其实现各种网络协议的重要资源。这个压缩包"apache.mina.example"包含了一系列的示例项目,可以帮助开发者快速上手并深入理解Mina。 1. **Mina...
3. **Filter Chain**:Mina使用过滤器链(Filter Chain)模式处理网络通信。过滤器可以用于数据编码解码、安全处理、日志记录等。每个过滤器都可以对数据进行处理并传递给下一个过滤器。 4. **Service**:服务端的...
2. **Filter**:过滤器是Mina的核心概念之一,它们允许你在数据传输过程中进行拦截和处理。你可以添加多个过滤器来实现如数据编码解码、安全加密等功能。 3. **ProtocolCodecFactory**:这个接口用于定义如何将数据...
- **Filter**:过滤器是MINA的核心组件,用于处理数据的编码、解码以及各种业务逻辑。 - **Handler**:处理器接口,用于处理实际的业务逻辑,每个网络事件都会触发相应的处理器方法。 - **ProtocolDecoder/Encoder...
Mina基础示例 Mina,全称是Java Mina框架,是一个开源的网络通信应用框架,主要用于构建高性能、高可用性的网络服务器。Mina旨在简化网络编程,它提供了高级抽象,如事件驱动和异步I/O,使得开发者能够专注于业务...
mina编解码示例是基于Apache Mina框架的一个实践项目,主要展示了如何在Mina中进行数据的编码和解码操作。Apache Mina是一个高度可扩展的网络通信框架,广泛应用于开发高性能、高并发的网络应用程序,如TCP/IP和UDP...
在标题和描述中提到的“mina传输对象的示例”指的是如何在Mina框架下处理和传输自定义的数据对象。Mina允许开发者通过事件驱动和异步I/O模型来高效地构建网络服务。 Mina的核心组件包括: 1. **Session**: 表示...
3. **过滤器链**:Mina的过滤器(Filter)机制允许开发者插入自定义的逻辑在数据读写流程中,如数据编码解码、安全加密等。过滤器链可以灵活组合,提高代码复用性和模块化。 4. **服务端构建**:在服务端示例中,...
在2.0.7版本中,官方提供了一系列示例来帮助开发者理解和使用MINA框架。 首先,MINA的核心概念是“Session”和“Filter”。Session代表了网络连接,是MINA中处理I/O事件的基础。而Filter则类似于拦截器,用于处理在...
- Filter链:MINA采用过滤器链模式,允许开发者插入自定义的过滤器来处理数据,如编码、解码、安全等。 - IoSession:表示网络连接,包含与连接相关的状态信息和操作。 - IoProcessor:负责实际的I/O操作,如读写...
import org.apache.mina.filter.codec.textline.TextLineCodecFactory; import org.apache.mina.transport.socket.nio.NioSocketAcceptor; public class MinaServer { public static void main(String[] args) ...
"Mina demo mina jar包"指的是使用Apache Mina框架创建的一个演示示例,这个示例展示了如何运行一个基本的服务端,能够接收客户端的数据并返回响应。 在Mina框架中,服务端通常会创建一个Acceptor,监听特定的端口...
这就是一个基本的Mina应用示例,展示了如何使用Mina进行网络通信。 在实际开发中,你可以根据需求扩展过滤器,实现更复杂的业务逻辑,例如加密解密、身份验证等。同时,Mina还提供了丰富的API来处理异常、管理会话...
压缩包中的"mina"文件很可能包含了MINA的示例代码,这些代码可以帮助初学者快速理解如何使用MINA框架。通过这些实例,你可以学习到如何配置Acceptor、创建Filter链、编写Handler以及如何处理各种网络事件。这些实例...
- **示例应用**:MINA通常会附带一些示例程序,帮助开发者理解如何使用框架构建实际应用。 - **测试用例**:源码中包含了大量的单元测试,用于验证MINA的功能和性能。 通过阅读和分析`apache-mina-2.0.16`的源码,...
9. **mina-filter-compression-2.0.7.jar**:提供了数据压缩过滤器,可以压缩在网络上传输的数据,减少带宽使用,提高传输效率。 综合以上,Apache MINA 2.0.7的这些JAR文件涵盖了网络通信的各个方面,包括核心库、...
总的来说,这个"mina通讯例子"是一个基础的MINA使用示例,展示了如何使用MINA库在客户端和服务器之间交换自定义对象。通过学习这个例子,开发者可以了解MINA的基本工作原理,并进一步探索如何利用MINA构建更复杂的...
mina-filter-compression-2.0.7.jar是MINA的压缩过滤器,用于在网络传输中对数据进行压缩,提高数据传输效率,尤其在传输大数据量时能显著减少网络带宽的消耗。 综上所述,MINA 2.0提供的这套jar包集合,不仅包含了...
同时,你需要掌握Filter Chain的概念,这是Mina处理网络事件的关键机制,通过过滤器链,你可以添加自定义的逻辑来处理输入和输出数据。 此外,编码器和解码器(Encoder和Decoder)是Mina处理不同协议数据格式的重要...
以下是一段创建SSLFilter并添加到过滤器链的基本代码示例: ```java SslFilter sslFilter = new SslFilter(sslContext); sslFilter.setUseClientMode(false); // 设置为服务器模式 filterChain.addFirst("sslFilter...