初识java之Mina(一)

Apache Mina Server 是一个网络通信应用框架,也就是说,它主要是对基于 TCP/IP、UDP/IP协议栈的通信框架(当然,也可以提供 JAVA 对象的序列化服务、虚拟机管道通信服务等),Mina 可以帮助我们快速开发高性能、高扩展性的网络通信应用,Mina 提供了事件驱动、异步(Mina 的异步 IO 默认使用的是 JAVA NIO 作为底层支持)操作的编程模型。

首先先写个简单的server,来实现异步的文件上传。

public class Main {
	private static final int PORT = 8080;
	public static void main(String[] args) throws Exception {
		NioSocketAcceptor accept = new NioSocketAcceptor();
		accept.getFilterChain().addLast("codec",
				new ProtocolCodecFilter(new ObjectSerializationCodecFactory()));
		accept.getFilterChain().addLast("logging", new LoggingFilter());
		accept.setHandler(new FileUploadHandler());
		accept.bind(new InetSocketAddress(PORT));

		System.out.println("upload  server started.");
	}
}

handle的处理就狠简单了。

public class FileUploadHandler extends IoHandlerAdapter {
	private BufferedOutputStream out;
	private int count;
	private static final Log log = LogFactory.getLog(FileUploadHandler.class);
	public void sessionOpened(IoSession session) throws Exception {
		System.out.println("server open");
	public void exceptionCaught(IoSession session, Throwable cause)
			throws Exception {
		System.out.println("exception");
		session.close(true);
		super.exceptionCaught(session, cause);
	}
	public void messageReceived(IoSession session, Object message) {
		System.out.println("server received");
		try {
			if (message instanceof FileUploadRequest) {
				FileUploadRequest request = (FileUploadRequest) message;
				System.out.println(request.getFilename());
				if (out == null) {
					String [] array = request.getFilename().split("//");
					System.out.println(array[1]);
					out = new BufferedOutputStream(new FileOutputStream("D://"+array[1]));
					out.write(request.getFileContent());
				} else {
					out.write(request.getFileContent());
				}
				count += request.getFileContent().length;
			} else if (message instanceof String) {
				if (((String) message).equals("finish")) {
					System.out.println("size is " + count);
					out.flush();
					out.close();
					out = null;
					session.write("success");
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	public void sessionClosed(IoSession session) throws Exception {
		System.out.println("server session close");
	}
}

  

时间: 2024-10-13 15:55:40

初识java之Mina(一)的相关文章

屌丝的第一次博客 初识Java

大家好, 我是第一次玩这个博客,首先我要强调的是我不太会说话!如果有什么得罪的地方,你TM的来打我啊?(*^__^*) 嘻嘻!!! 前面只是和大家开了个玩笑,进入正题,本人是第一次接触Java,以后还要向大家请教啊! 现在只学习了Java的第一章“初识Java”,了解了一下Java的由来,以及他的发展史!! 最主要的是我知道了Java的程序结构,以及编写Java程序的注意事项,主要有以下几点: 1.Java的程序结构 public class 类名(必须要和文件名相同){ public stat

Java学习笔记心得——初识Java

初识Java 拿到这本厚厚的<Java学习笔记>,翻开目录:Java平台概论.从JDK到TDE.认识对象.封装.继承与多态...看着这些似懂非懂的术语名词,心里怀着些好奇与担忧,就这样我开始走进Java的世界.  Java产生的历史 Java来自于Sun公司的一个叫Green Project中撰写的程序语言,全球信息网(World Wide Web)兴起,Java Applet成为网页互动技术的代表,特别适合于Internet应用程序开发. Java语言的特点 1.面向对象 这是Java最重要

初识JAVA反射&lt;一&gt;_0626

反射 一.最开始接触javaSE的时候就没有怎么学过反射,感觉好难,老师讲的也很晦涩,然后就没有然后了,最近项目中用到了AOP切面编程,全都是运用的反射,不学不行了,索性问问过来人. 1.一种说法是java反射实际上就是转换,讲java代码转换为二进制. 2.第二种说法就是将javaBean什么的转换成你需要的形式. 现在给我的想法,我觉得在SpingMVC上就用到了反射,我前台的ajax传过来的值,可以直接传到我的Controller的参数中得类,比如说, $.ajax{ .... data:

初识JAVA,对servlet的理解

一.WEB开发的简单理解 Web开发是一个指代网页或网站编写过程的广义术语.网页使用 HTML.CSS 和 JavaScript编写.这些页面可能是类似于文档的简单文本和图形.页面也可以是交互式的,或显示变化的信息.编写交互式服务器页面略微复杂一些,但 却可以实现更丰富的网站.如今的大多数页面都是交互式的,并提供了购物车.动态可视化甚至复杂的社交网络等现代在线服务. 通俗的说,web开发就是我们说的做网站.它分为网页部分,和逻辑部分也就是我们说的前台与后台.前台负责与用户的交互,显示数据.用到H

初识JAVA(【面向对象】:pub/fri/pro/pri、封装/继承/多态、接口/抽象类、静态方法和抽象方法;泛型、垃圾回收机制、反射和RTTI)

JAVA特点: 语法简单,学习容易 功能强大,适合各种应用开发:J2SE/J2ME/J2EE 面向对象,易扩展,易维护 容错机制好,在内存不够时仍能不崩溃.不死机 强大的网络应用功能 跨平台:JVM,字节码 两个命令: javac helloworld.java:将Java文件编译为字节码的.class文件 java helloworld:运行Java程序...??暂时这么认为 数据类型: 普通数据类型:int a=3; 对象数据类型:使用关键字new,String s=new String("

java复习--初识java

1. 初识Java 1.什么是Java? Java是一门计算机语言,属于高级语言,是SUN公司(已经被Oracle公司收购)于1995年推出的一门高级语言. 为了使软件开发人员针对特定的市场进行开发,SUN公司将Java分为三个技术平台,分别是JavaSE.JavaEE.JavaME JavaSE(Java Platform Standard Edition)标准版,是为开发普通桌面应用程序提供的解决方案,JavaSE是三个平台中最核心的部分,JavaEE和JavaME都是从JavaSE的基础上

(一)初识java ---我的第一个java程序

初识java ---我的第一个java程序 课程目录 l  準備 l  開発環境的準備 l  環境変数Path設定 l  第一个程序 目标 «  实现自己的HelloWorld并运行看到结果 一.準備 (1)计算机(パソコン) (2)计算机硬件:肉眼能看到的部分 (3)计算机软件 系统软件:xp, windows, Linux, Mac 应用软件:office.qq…. (4)语言 自然语言:人与人交流沟通的 计算机语言:人与计算机交流沟通的 C,C++,C#,Java (5)人机交互 图形界面

初识Java Web

初识Java Web 系统学习Java Web也有一周时间了,整理一下这一周中接触到的新概念以及根据这一周的所学知识完成的一个基于JSP+Servlet+Java Bean+MySql的留言板Demo 几个概念 tomcat tomcat是一个"Web App Server",底层是Socket的一个程序,是JSP/Servlet的一个容器,简单来说,当我们在我们电脑本地编写HTML,css时,我们写的页面只能自己访问,别人不能远程访问我们写的页面,而tomcat就是一个能让别人访问自

初识Java及基础知识

java不仅仅是一种程序设计语言,他还是一个完整的平台,有一个庞大的代码库.首先你要做的,可能需要下载 jdk 包,下载和安装,自行百度. 下载完 jdk 之后,JDK目录树如下:  目录结构 描述 bin 编译器和工具 demo 演示 docs HTML格式的类库文档(解压 2sdkversion-doc.zip 之后j) include 用于编译本地方法的文件 jre Java 运行环境 lib 类库文件 src 类库源文件 java 中基本程序设计会用的基础知识:数据类型.变量.运算符.字