先来看spring中的配置:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<bean
class="org.springframework.beans.factory.config.CustomEditorConfigurer">
<property name="customEditors">
<map>
<entry key="java.net.SocketAddress">
<bean
class="org.apache.mina.integration.beans.InetSocketAddressEditor" />
</entry>
</map>
</property>
</bean>
<bean id="ioAcceptor"
class="org.apache.mina.transport.socket.nio.NioSocketAcceptor"
init-method="bind" destroy-method="unbind">
<property name="defaultLocalAddress" value=":1235" />
<property name="handler" ref="SampleHandler" />
<property name="filterChainBuilder" ref="filterChainBuilder" />
<property name="reuseAddress" value="true" />
</bean>
<bean id="executorFilter"
class="org.apache.mina.filter.executor.ExecutorFilter" />
<bean id="mdcInjectionFilter"
class="org.apache.mina.filter.logging.MdcInjectionFilter">
<constructor-arg value="remoteAddress" />
</bean>
<bean id="codecFilter"
class="org.apache.mina.filter.codec.ProtocolCodecFilter">
<constructor-arg>
<!--
<bean
class="org.apache.mina.filter.codec.textline.TextLineCodecFactory" />
-->
<bean class="cn.org.handler.MyCodeFactory"></bean>//自定义的 字符编码类
</constructor-arg>
</bean>
<bean id="loggingFilter"
class="org.apache.mina.filter.logging.LoggingFilter" />
<bean id="SampleHandler" class="cn.org.handler.HandlerTwo" />
<!--boss server -->
<bean id="bossSampleHandler" class="cn.org.handler.HandlerOne" />
<bean id="filterChainBuilder"
class="org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder">
<property name="filters">
<map>
<entry key="executor" value-ref="executorFilter" />
<entry key="mdcInjectionFilter"
value-ref="mdcInjectionFilter" />
<entry key="codecFilter" value-ref="codecFilter" />
<entry key="loggingFilter" value-ref="loggingFilter" />
</map>
</property>
</bean>
</beans>
然后再看 :SampleHandler:
很简单的:
package cn.org.handler;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;
public class HandlerTwo extends IoHandlerAdapter {
@Override
public void messageReceived(IoSession session, Object message)
throws Exception {
// TODO Auto-generated method stub
// super.messageReceived(session, message);
System.out.println("message :"+message);
}
@Override
public void sessionClosed(IoSession session) throws Exception {
// TODO Auto-generated method stub
super.sessionClosed(session);
}
@Override
public void sessionIdle(IoSession session, IdleStatus status)
throws Exception {
// TODO Auto-generated method stub
super.sessionIdle(session, status);
}
}
测试的://启动 可以通过telnet 端口号来,也可以写个客户端的测试类
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
ClassPathXmlApplicationContext ct = new ClassPathXmlApplicationContext("applicationContext-mina.xml");
}
}
客户端的测试类:
public class ClintTest {
/**
* @param args
*/
public static void main(String[] args) {
// 创建客户端连接器.
NioSocketConnector connector = new NioSocketConnector();
connector.getFilterChain().addLast( "logger", new LoggingFilter() );
connector.getFilterChain().addLast( "codec", new ProtocolCodecFilter( new TextLineCodecFactory( Charset.forName( "GBK" )))); //设置编码过滤器
connector.setConnectTimeout(1);
connector.setHandler(new HandlerOne());//设置事件处理器
ConnectFuture cf = connector.connect(
new InetSocketAddress("127.0.0.1", 1235));//建立连接
cf.awaitUninterruptibly();//等待连接创建完成
cf.getSession().write("知识");//发送消息
//cf.getSession().write("quit");//发送消息
cf.getSession().close();
cf.getSession().getCloseFuture().awaitUninterruptibly();//等待连接断开
connector.dispose();
}
}
还有自定义的 编码类:
package cn.org.handler;
import java.nio.charset.Charset;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.filter.codec.ProtocolCodecFactory;
import org.apache.mina.filter.codec.ProtocolDecoder;
import org.apache.mina.filter.codec.ProtocolEncoder;
import org.apache.mina.filter.codec.textline.LineDelimiter;
import org.apache.mina.filter.codec.textline.TextLineDecoder;
import org.apache.mina.filter.codec.textline.TextLineEncoder;
public class MyCodeFactory implements ProtocolCodecFactory {
private final TextLineEncoder encoder;
private final TextLineDecoder decoder;
/*final static char endchar = 0x1a;*/
final static char endchar = 0x0d;
public MyCodeFactory() {
this(Charset.forName("gb2312"));
}
public MyCodeFactory(Charset charset) {
encoder = new TextLineEncoder(charset, LineDelimiter.UNIX);
decoder = new TextLineDecoder(charset, LineDelimiter.AUTO);
}
@Override
public ProtocolDecoder getDecoder(IoSession session) throws Exception {
// TODO Auto-generated method stub
return decoder;
}
@Override
public ProtocolEncoder getEncoder(IoSession session) throws Exception {
// TODO Auto-generated method stub
return encoder;
}
public int getEncoderMaxLineLength() {
return encoder.getMaxLineLength();
}
public void setEncoderMaxLineLength(int maxLineLength) {
encoder.setMaxLineLength(maxLineLength);
}
public int getDecoderMaxLineLength() {
return decoder.getMaxLineLength();
}
public void setDecoderMaxLineLength(int maxLineLength) {
decoder.setMaxLineLength(maxLineLength);
}
}
这样简单的例子就OK了
jar 包 :spring.jar mina2.0的jar包 slf4j-nop.1.5.2.jar、
分享到:
相关推荐
通过上述的介绍,我们可以看出"Mina例子包含与Spring整合"项目是如何利用Spring的灵活性和MINA的高性能来构建网络应用的。通过学习这个项目,开发者可以更好地理解和实践这两种技术在实际项目中的应用。
在这个“mina消息推送例子”中,我们将深入探讨Mina如何实现消息推送,并结合Spring框架进行集成。 首先,Apache Mina提供了一个异步事件驱动的网络应用编程接口(API),它简化了TCP/IP和UDP协议的处理,如HTTP、...
此外,还可以结合Spring框架,将Mina2集成到Spring Boot应用中,实现更灵活的服务注册和发现。 总结,Apache Mina2提供了一套强大的工具,使得开发人员能够轻松构建高性能的网络应用,包括实现远程方法调用。通过...
首先,SSH整合通常指的是将SSH与应用程序服务器如Spring、Struts或Hibernate等Java EE框架相结合,以便通过SSH协议进行远程管理和操作。例如,在Spring框架中,SSH整合允许开发者安全地执行远程命令、管理服务器或...
在这个场景中,“ssh2 annotation”可能指的是使用SSH2协议并结合Java注解(Annotation)来配置和管理应用程序。在Java中,注解是一种元数据,可以提供编译器或运行时系统使用的信息,简化代码并减少配置文件的需求...
1. **ActiveMQ Camel Tomcat 示例**:此示例展示了如何在运行于Apache Tomcat的应用程序中嵌入Apache ActiveMQ和Camel,提供了一个将消息系统与Web应用结合的例子。 2. **Aggregate 示例**:展示的是Camel 2.3中的...