http上传文件深度解析-高性能http传输

最近在做web服务器的时候将一些应用集成在了服务器里面,比如说文件上传,结果调试用了一个星期的时间,搞得自己头昏脑涨,现在总于解决了,现将注意细节叙述如下: http上传协议很简单,用post协议,协议头部包含Content-Length项,这是一次上传的所有body部分长度总和,包括多文件之间的分割等等,所以也就难怪了,http上传要比ftp等慢,其实慢就慢在body解析上,下面对于文件分割作一些阐述。 一个典型的http上传协议头类似于这样:

POST /public/upload.action HTTP/1.1
ost: maiit.com:8088
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9b5) Gecko/2008041514                  Firefox/3.0b5
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 阅读全文 >>

JMS 使用 ActiveMQ 传送文件

这里使用的 MQ 中间件是开源的 ActiveMQ,我们没有采用 BytesMessage 来按字节传送文件,而是 ActiveMQ 为我们提供了 org.apache.activemq.BlobMessage,可以用它来传送大对象。org.apache.activemq.ActiveMQSession 中有以下几个创建 BlobMessage 对象的方法:

createBlobMessage(URL url)

createBlobMessage(URL url, boolean deletedByBroker)

createBlobMessage(File file)

createBlobMessage(InputStream in)

接收到 BlobMessage 消息后,可以调用其 getInputStream() 方法获得数据,然后写成磁盘文件,文件名、文件大小等可通过 Message 的 getXxxProperty("Property.Name") 取的。 阅读全文 >>

JMS 基本知识及消息传送模型

JMS(Java Message Service) 是 Java 为面向消息中间件(MOM)定义的接口。JMS 的通信管道就是消息队列,说到消息队列,历史就悠久,在 MS 系统中很早就有 MSMQ,譬如邮件、群组就是些消息队列。JMS 因其异步,所以可用来解决高并发的问题,分布式可对负载进行均衡。

JMS 已成为 J2EE 规范中的一部分,所以在 J2EE 应用服务器中都有 JMS 核心部分 MQ 的实现,MQ 也有独立的产品,如 ActiveMQ、JBoss MQ(已更名为 JBoss Messaging)、WebSphere MQ 等。

如果我们蒙着头来理解,JMS 消息通信中的主要角色应该有:消息生产者(Producer)消息消费者(Consumer)、它们间的消息队列(Queue)、以及所传送的消息(Message)阅读全文 >>

Java 线程同步,对象锁与互斥规则

在前面一篇 是同步方法还是 synchronized 代码?-- 详解多线程同步规则 其实已清楚讲述了这里想要是解的话题,只是之前的长篇大论,没个重点,读来实在会让人受累,故在此单列一专题,假以图示,也为自己加深对同步锁的理解。道中人觉得哪里说得有出入或有更妙的理解方式,尽管拍过来。

记得我初识多线程时,就是很简单化的去理解了同步:说到要同步,无外乎就是给方法加 synchronized 关键字,或者给代码块加上 synchronized(this) 括起来[注:jdk 1.5 后可用 Lock 来同步代码],以为这样就万事大吉,就能保证一个线程执行时,另一个线程就进不来。其实不尽然,因为静态同步方法与非静态同步方法是有区别的,而 synchronized(this) 括号中是用 this 还是要用别的对象,也是有讲究的,这些问题可以阅读前一篇:是同步方法还是 synchronized 代码?-- 详解多线程同步规则阅读全文 >>

SLF4J 的几种实际应用模式--之三:JCL-Over-SLF4J+SLF4J

我们前面已经讲过了 SLF4J 的两种用法:SLF4J+Log4J  和 SLF4J+Logback,那是在比较理想的情况下,所用组件只使用了 SLF4J 这一种统一日志框架的时候。可是 JCL 一直影响深远,SLF4J 渐入佳境的时个,在你的项目中很可能所用的组件,它们分别用了 JCL 和 SLF4J 两种组件。比如说在项目中用了 Hibernate 3.5 和 Struts,或其他 Apache 的一些开源组件,你大约也不想用了 SLF4J 的组件日志信息输出到 A 处,用了 JCL 的组件日志输出到 B 处,那你自己写的代码中的日志信息该往哪儿写呢?

中国人一直都愿追求大一统,不喜欢城邦制的便于分而治之。但说到日志输出还是得统一到单一通道中来,一方面多个通道浪费资源,另方面也便于配置和管理。那么既然 SLF4J 是趋势,当 SLF4J 和 JCL 被丢到一个坛子里,首先会让 SLF4J 为主,JCL 为辅,也就是要把 JCL 桥接到 SLF4J 上来,通过 SLF4J 统一输出日志信息。于是也就是这篇要介绍的 SLF4J 使用模式:JCL-Over-SLF4J+SLF4J。 阅读全文 >>

SLF4J 的几种实际应用模式--之二:SLF4J+Logback

前面讲的 SLF4J 的用法之一是 SLF4J+Log4J,而这里要推出的组合是 SLF4J+LogBack。不用 Log4J?难道还有比 Log4J 更好的日志实现吗?是的,答案就是 LogBack。假如你知道 LogBack 和 Log4J 是同出一位大师之手,你就不会觉得惊讶了。LogBack 对 Log4J 进行了增强,并投入了 SLF4J 的怀抱,它还被作者认定为 Log4J 的继任者。

为什么叫做 Logback,我就不知道了,反正不要叫做 Brokeback 就行。这里是推崇用 Logback 替代 Log4J 的十几个理由:Reasons to prefer logback over log4j,说的大至是更快;好测试;与 SLF4J 关系紧;文档丰富;能自动加载配置文件;多个 JVM 写一个日志文件,或其他 I/O 错误时不影响程序执行;配置文件中加入条件控制;强大的日志过滤;更强的日志切分功能;自动压缩、删除日志文件;异常栈中更多的数据信息。 阅读全文 >>

SLF4J 的几种实际应用模式--之一:SLF4J+Log4J

SLF4J(Simple Logging Facade for Java) 是一个通用的日志框架,不能何以谓之 Facade(门面),所扮眼的角色相当于 Jakarta Commons Logging。就像 JCL 需要底层的日志实现,如 Log4J、java.util.logging、Simple Logger 等来完成具体的信息输出,事实上基本总是 JCL+Log4J 那么一个绝配。SLF4J 的原旨也是能支持多种下层日志框架实现,但最好的日志实现仍然是 Log4J,所以本篇讲述 SLF4J 的第一种用法 SLF4J+Log4J。

需要的配置文件和组件包,下面三个 jar 文件和一个 properties 文件都是要放在项目的 ClassPath 上。

1. slf4j-api-1.5.11.jar
2. slf4j-log4j12-1.5.11.jar
3. log4j-1.2.15.jar
4. log4j.properties(也可以是 log4j.xml,本例中用 log4j.propertes) 阅读全文 >>

Java SE6 中的新功能特性简介

1. String 新增了 isEmpty() 方法
     对于 String 不需要用 str.length() !=0  来判断

2. Arrays 新增 copyOf() 从已知数组中拷贝直接返回一个新的数组
     不再需要,先准备一个数组,然后用 System.arrayCopy() 来从旧数组往新数组中拷贝数据

3. Arrays 还新增了  copyOfRange() ,binarySearch(arr, fromIndex, toIndex, des) 方法,可在一个范围内查找。

4. 可以用 Calendar 实例的 getDisplayNames() 和 getDisplayName() 获得区域化的日期格式显示

5. System上新增 console() 获得 Console 实例,可用其的 printf()、readLine()、readPassword()、reader()、writer() 等方法,如 阅读全文 >>

新一代通用日志框架 SLF4J 用户指南


SLF4J 用户指南

Simple Logging Facade for Java(简单日志门面--门面一词总觉有些别扭,还没找到更好的词),简称 SLF4J,是作为各种日志框架的简单门面或者抽象的。比如,那些日志框架有 java.util.logging, log4j 和 logback 等,SLF4j 允许终端用户在部署的时候插入自己想要的日志框架。

Hello World

依照编程的传统,这个例子描绘了简单的方式来使用 SLF4j 输出 "Hello world"。它从获得一个名为 "HelloWorld" 的 logger 开始。接着使用这个 logger 输出 "Hello World" 日志消息。 阅读全文 >>

做网站用UTF-8还是GB2312?

经常我们打开外国网站的时候出现乱码,又或者打开很多非英语的外国网站的时候,显示的都是口口口口口的字符,

  WordPress程序是用的UTF-8,很多cms用的是GB2312。

  ● 为什么有这么多编码?

  ● UTF-8和GB2312有什么区别?

  ● 我们在国内做网站是用UTF-8编码格式还是GB2312编码格式好? 

  一. 各种编码的来历

  可能很多同学一直对字符的各种编码方式懵懵懂懂,根本搞不清为什么他们有这么多编码。 阅读全文 >>