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

mina1.7结合spring的应用

    博客分类:
  • mina
阅读更多

虽然说 mina已经发布了2.0的版本了。但是1.7还是应用很多。mina通过spring的配置,使用起来就更加的简单了

 

现在 先看mina在spring中的配置:

 

本次练习中是监听2个端口

applicationContext-mina.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>

 

 <bean
  class="org.springframework.beans.factory.config.CustomEditorConfigurer">
  <property name="customEditors">
   <map>
    <entry key="java.net.SocketAddress">
     <bean
      class="org.apache.mina.integration.spring.InetSocketAddressEditor" />
    </entry>
   </map>
  </property>
 </bean>

 

 

<!--创建服务器-->

 <bean id="ioAcceptor"
  class="org.apache.mina.integration.spring.IoAcceptorFactoryBean">
  <property name="target">
   <bean
    class="org.apache.mina.transport.socket.nio.SocketAcceptor" />
  </property>
  <property name="bindings">
   <list>//这里是个list 里面可以创建多个监听
    <bean
     class="org.apache.mina.integration.spring.Binding">
     <property name="address" value=":8888" />//监听端口:8888
     <property name="handler" ref="SampleHandler" />//SampleHandler:定义服务器的handler
     <property name="serviceConfig">
      <bean
       class="org.apache.mina.transport.socket.nio.SocketAcceptorConfig">
       <property name="filterChainBuilder"//配置filter
        ref="filterChainBuilder" />//指向:filterChainBuilder
       <property name="reuseAddress" value="true" />
      </bean>
     </property>
    </bean>
    
    <bean
     class="org.apache.mina.integration.spring.Binding">
     <property name="address" value=":9999" />//第二个监听端口:9999
     <property name="handler" ref="bossSampleHandler" />//监听该端口的 handler
     <property name="serviceConfig">
      <bean
       class="org.apache.mina.transport.socket.nio.SocketAcceptorConfig">
       <property name="filterChainBuilder"
        ref="filterChainBuilder" />
       <property name="reuseAddress" value="true" />
      </bean>
     </property>
    </bean>
    
   </list>
  </property>
 </bean>
 <bean id="SampleHandler" class="cn.org.handler.HandlerTwo" />

 <bean id="bossSampleHandler" class="cn.org.handler.HandlerOne" />

 

//定义filter
 <bean id="filterChainBuilder"
  class="org.apache.mina.integration.spring.DefaultIoFilterChainBuilderFactoryBean">
  <property name="filters">
   <list>
    <bean
     class="org.apache.mina.filter.codec.ProtocolCodecFilter">
     <constructor-arg>
        <bean
       class="org.apache.mina.filter.codec.textline.TextLineCodecFactory" /> //这个是编码格式filter
     </constructor-arg>
    </bean>
    <bean class="org.apache.mina.filter.LoggingFilter" />//日志的filter
   </list>
  </property>
 </bean>
</beans>

 

 

sprng的简单配置文件就是这样:

 

然后看 handler:

 

 

SampleHandler 和 bossSampleHandler 。我写的都是一样的:

 

package cn.org.handler;

import org.apache.mina.common.IdleStatus;
import org.apache.mina.common.IoHandlerAdapter;
import org.apache.mina.common.IoSession;

public class HandlerOne extends IoHandlerAdapter {

 public HandlerOne() {
  // TODO Auto-generated constructor stub
 }

 @Override
 public void exceptionCaught(IoSession session, Throwable cause)
   throws Exception {

 }

 @Override
 public void messageReceived(IoSession session, Object message)
   throws Exception {
  // TODO Auto-generated method stub
  System.out.println("收到信息");
  System.out.println("message :"+message.toString());
 }

 @Override
 public void messageSent(IoSession session, Object message) throws Exception {
      System.out.println("小心发送");
 }

 @Override
 public void sessionClosed(IoSession session) throws Exception {
  // TODO Auto-generated method stub
  super.sessionClosed(session);
 }

 @Override
 public void sessionCreated(IoSession session) throws Exception {
  System.out.println(session.getRemoteAddress().toString() +"---create");

 }

 @Override
 public void sessionIdle(IoSession session, IdleStatus status)
   throws Exception {
               System.out.println(session.getServiceAddress() +"IDS");
 }

 @Override
 public void sessionOpened(IoSession session) throws Exception {
     System.out.println("连接打开:"+session.getLocalAddress());
 }

}

 

 

 

 

现在测试:

 

Test.java

 

public class Test {

 /**
  * @param args
  */
 public static void main(String[] args) {
  ClassPathXmlApplicationContext ct =    new ClassPathXmlApplicationContext("applicationContext-mina.xml");  

 }

}

 

 

控制台打印出:

 

2010-1-16 19:00:51 org.springframework.context.support.AbstractApplicationContext prepareRefresh
信息: Refreshing
org.springframework.context.support.ClassPathXmlApplicationContext@4b4333: display name [org.springframework.context.support.ClassPathXmlApplicationContext@4b4333]; startup date [Sat Jan 16 19:00:51 CST 2010]; root of context hierarchy
2010-1-16 19:00:51 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [applicationContext-mina.xml]
2010-1-16 19:00:51 org.springframework.context.support.AbstractApplicationContext obtainFreshBeanFactory
信息: Bean factory for application context [org.springframework.context.support.ClassPathXmlApplicationContext@4b4333]:
org.springframework.beans.factory.support.DefaultListableBeanFactory@1975b59
2010-1-16 19:00:52 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
信息: Pre-instantiating singletons in
org.springframework.beans.factory.support.DefaultListableBeanFactory@1975b59: defining beans [org.springframework.beans.factory.config.CustomEditorConfigurer#0,ioAcceptor,SampleHandler,bossSampleHandler,filterChainBuilder]; root of factory hierarchy

表明服务器就已经启动了:

 

 

现在你可以用telent的方式测试。也可以写个客户端的测试类:

 

写了个客户端的测试类:Clint.java

public class Clint {

 /**
  * @param args
  */
 
 final static char end = 0x1a;
 
 public static void main(String[] args) {
     SocketConnector connector = new SocketConnector();
  SocketAddress address = new InetSocketAddress("127.0.0.1", 8888);
  SocketConnectorConfig config = new SocketConnectorConfig();
  config.setConnectTimeout(10);// 秒
  connector.getFilterChain().addLast( "codec", new ProtocolCodecFilter( new TextLineCodecFactory( Charset.forName( "GB2312" )))); //设置编码过滤器 

  connector.getFilterChain().addLast( "logger", new org.apache.mina.filter.LoggingFilter() );

  IoSession session =null;
  ConnectFuture cf = connector.connect(address, new ClintHandler(),
    config);
  cf.join();
  if (cf.isConnected()) {
   session = cf.getSession();
   System.out.println("连接成功");
   session.write("abc");
  }else{
   System.out.println("连接失败!!!");
  }

    }
 }

 

这这个测试类中。我只 连接了端口:8888  。也可以测试连接端口:9999。看下是什么情况

主要是jar包:spring.jar和mina1.7里面的jar包。还有下载slf4j-nop-1.5.2.jar(这个包是日志相关的)

 

分享到:
评论
1 楼 花瓣雨 2013-05-22  
写的非常不错,能否给个完整的demo工程学习一下呢,谢谢了。

相关推荐

    MINA1.7包(源码)

    MINA1.7版本是一个成熟的版本,它提供了丰富的网络通信API,支持TCP/IP和UDP/IP协议,以及SSL/TLS加密,广泛应用于服务器端开发,如构建FTP、SMTP、HTTP等服务。 MINA的核心特性包括: 1. **非阻塞I/O**:MINA基于...

    mina2+spring结合实例

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

    Mina-Spring-Hibernate.rar_mina_mina hibernate_spring mina

    Spring通过HibernateTemplate或JpaTemplate提供了一套便捷的数据库操作接口,封装了Hibernate的操作,使得在Spring应用中使用Hibernate变得简单。同时,Spring还支持基于注解的事务管理,可以无缝地与Hibernate配合...

    基于spring的Mina框架

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

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

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

    apache mina-spring 服务端程序

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

    spring boot 整合mina 串口

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

    spring结合Mina

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

    mina2.0+spring

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

    Mina例子包含与spring整合

    4. **MINA与Spring的整合**:将MINA与Spring结合,可以利用Spring的管理功能来配置MINA的服务器和客户端,如Bean的生命周期管理、AOP切面等。这使得MINA应用更易于配置、测试和维护。整合过程通常包括在Spring配置...

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

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

    mina+spring做的聊天室程序

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

    mina+spring+hibernate搭建所需jar包

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

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

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

    Mina+Struts2+Spring4+Mybatis3组合

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

    springboot 深度整合mina开箱即用

    Spring Boot是由Pivotal团队提供的全新框架,旨在简化Spring应用的初始搭建以及开发过程。它集成了大量的Spring生态系统,如Spring MVC、Spring Data、Spring Security等,并提供了一种默认的、合理的设置,使得...

    mina_spring模仿springmvc控制器

    本文将深入探讨如何将Mina与Spring结合,模仿Spring MVC的控制器模式,以适应移动终端的项目开发需求。 首先,理解Mina的核心概念是至关重要的。Mina提供了一个事件驱动的模型,通过I/O多路复用技术,如NIO(非阻塞...

    spring mvc + Mina 配置部署

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

    mina 集成spring 传输文件和文本

    这个主题探讨的是如何通过Mina和Spring结合实现文件和文本的双向传输。 **描述解读:**"用一个监听既可以传文件又可以传文本" 这里的描述表明我们将构建一个监听器,该监听器能够同时处理文件和文本数据的发送与...

    spring mina

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

Global site tag (gtag.js) - Google Analytics