`
wj131
  • 浏览: 142475 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

mina2 结合spring应用的小例子

    博客分类:
  • mina
阅读更多

先来看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、

 

 

 

 

 

 

分享到:
评论
1 楼 wuwu8023 2010-03-12  
请问多线程怎么配置的
配置之后 Handler 里面的sessionClosed方法中
加入 System.out.println(session.getRemoteAddress().toString()+" closed");是不是肯定会报错

相关推荐

    mina2+spring结合实例

    《Mina2与Spring整合应用实战》 在Java开发领域,Apache Mina和Spring框架的结合使用能够构建高效、可扩展的网络应用。Mina2作为一个轻量级的网络通信框架,提供了高度抽象的API,使得开发者可以方便地处理网络I/O...

    Mina例子包含与spring整合

    通过上述的介绍,我们可以看出"Mina例子包含与Spring整合"项目是如何利用Spring的灵活性和MINA的高性能来构建网络应用的。通过学习这个项目,开发者可以更好地理解和实践这两种技术在实际项目中的应用。

    基于spring的Mina框架

    总的来说,基于Spring的Mina框架结合了Spring的灵活性和Mina的高性能,为企业级的网络通信服务提供了强大的解决方案。开发者可以通过熟练掌握这两个框架的整合,构建出稳定、可扩展的网络应用。

    Mina-Spring-Hibernate.rar_mina_mina hibernate_spring mina

    通过Spring的Bean定义,我们可以配置Mina的Acceptor、ProtocolDecoder、ProtocolEncoder等组件,实现基于Spring的Mina应用。 5. Hibernate-Spring整合 Spring通过HibernateTemplate或JpaTemplate提供了一套便捷的...

    mina 与spring的结合开发,包头指令

    标题中的"mina 与spring的结合开发,包头指令"可能是指在使用MINA构建网络服务时,如何利用Spring框架来管理和配置MINA的应用上下文,以及如何通过Spring的配置来定义和处理网络通信中的包头信息。 在MINA中,数据...

    apache mina-spring 服务端程序

    通过这个项目,开发者可以学习到如何将Mina的异步I/O能力与Spring的容器管理及依赖注入机制结合,构建出健壮且易于维护的网络服务端程序。这包括理解Mina的事件模型、Spring的bean管理和网络编程的最佳实践。同时,...

    SSI+Mina2(Struts2+Spring4+Mybatis3+Mina2)集成发布就可运行

    标题中的"SSI+Mina2(Struts2+Spring4+Mybatis3+Mina2)集成发布就可运行"指的是一个基于Java的Web应用程序开发框架的整合,它结合了多种技术来构建高效、灵活和可扩展的网络应用。这个集成方案主要包括以下组件: 1....

    spring boot 整合mina 串口

    最后,启动Spring Boot应用,Mina将会监听配置的串口,等待接收和发送数据。为了测试,你可以使用串口调试工具(如RealTerm、CoolTerm等)连接到同一串口,发送和接收数据。 以上就是Spring Boot整合Mina实现串口...

    Mina+Struts2+Spring4+Mybatis3组合

    该项目是本人真实项目中使用到的mina + spring+struts2 + mybatis框架,里面有详细的注释说明,以及一个完整的接收消息、入库、返回例子。对需要真实项目开发的人员来说,可以直接使用。 另外,如果需要更加详细的...

    spring结合Mina

    spring结合Mina的配置文件,设计到spring构造 属性编辑器

    spring+mina实现http接口服务端通信客户端

    Spring 和 Mina 结合使用可以构建高性能的网络通信应用,而Spring MVC 是Spring 框架的一个模块,专门用于处理Web请求。在这个"spring+mina实现http接口服务端通信客户端"的项目中,我们将深入探讨如何整合这两个...

    springboot 深度整合mina开箱即用

    Spring Boot以其简洁的配置和快速的开发体验,已经成为Java领域中的主流微服务框架,而Mina则是一个强大的网络通信框架,常用于构建高性能、高并发的网络应用。通过整合这两者,我们可以构建出高效、灵活的网络服务...

    mina消息推送例子

    在这个“mina消息推送例子”中,我们将深入探讨Mina如何实现消息推送,并结合Spring框架进行集成。 首先,Apache Mina提供了一个异步事件驱动的网络应用编程接口(API),它简化了TCP/IP和UDP协议的处理,如HTTP、...

    mina2.0+spring

    2.系统读取mina-spring.xml。如果想把该工程导成jar则需要处理下配置文件的路径 3.结合自己系统时(导成jar集成进自己系统)需要继承与serverHandler,实现里面doService方法 4.本系统支持HTTP以及TCP链接,这个是...

    mina+spring+hibernate搭建所需jar包

    在构建Java企业级应用时,整合Apache MINA、Spring和Hibernate是常见的技术栈选择。这三个框架分别在不同的层面上提供服务:MINA为网络通信,Spring作为应用框架,而Hibernate则是对象关系映射(ORM)工具。以下是...

    spring mvc + Mina 配置部署

    之前的项目需要用到mina,实现的功能主要是:服务端主动发送消息到客户端,这个的服务端为外网的tomcat,客户端为内网的tomcat,由于无法知道内网tomcat 的地址,也就不能直接通过http的方式发送信息回来,最后想来...

    mina+spring做的聊天室程序

    在当今的互联网世界中,实时通信技术扮演着至关重要的角色,而Mina与Spring框架的结合则为开发高效、稳定的聊天室程序提供了强大的支持。本文将深入探讨如何利用Mina作为网络通信库,Spring作为应用框架,构建一个...

    spring mina

    Spring Mina是一个基于Java的网络通信框架,它简化了创建高性能和高可靠性的网络应用程序的过程。这个"spring mina"的示例项目很可能是为了演示如何在Spring框架中集成Mina,以便构建服务器端和客户端的网络通信应用...

    mina+spring实现多人聊天室程序

    Mina框架和Spring框架的结合,为开发者提供了一种高效、灵活的方式来实现这样的系统,特别是多人聊天室程序。下面我们将详细探讨如何利用这两个强大的工具来构建一个稳定且功能丰富的聊天室应用。 Mina框架,全称...

    maven_spring mvc_mina dome

    【标题】"maven_spring mvc_mina dome" 涉及到的是一个整合了Maven、Spring MVC和Mina的示例项目,旨在帮助初学者理解和掌握如何在实际开发中结合这三个技术栈。 【Spring MVC】是Spring框架的一部分,它是一个用于...

Global site tag (gtag.js) - Google Analytics