- 浏览: 102388 次
- 性别:
- 来自: 成都
最新评论
-
daichenqiu:
写的很好啊,赞!
Tomcat :一个简单的Servlet容器 -
Jnerd:
Handler初始化的应该注册read,否则select就会阻 ...
NIO Reactor模式(阅读NIO笔记) -
Jnerd:
运行了不正确呢
NIO Reactor模式(阅读NIO笔记)
文章列表
Tomcat :一个简单的Servlet容器
- 博客分类:
- Tomcat
Servlet容器处理Servlet请求的简单流程图如下图所示:
UML类图如下图所示:
HttpServletProcessor类:
package com.flyer.tomcat.first;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java. ...
【译】如何设计一个好的API
- 博客分类:
- Java基础
好的API,应该是易于学习、易于使用即使没有文档、很难被误用、易于阅读并且使用它的代码容易维护、足够强大来满足需求、易于扩展。
API设计流程
收集需求-》一个简单的设计说明-》尽早和经常写API-》写服务提供接口比较重要-》维护现实需求
1.一般原则
API应该只做一件事,并且把它做好
功能应该很容易解释,如果很难命名,一般都是一个坏的信号。一个好的名字驱动开发。容易切分和合并模块。
API应该设计的尽可能的小,但是也不要太过于小
API应该满足它的需求
实现不应该影响API
保持最小的可访问性
使类和成员变量尽可能的私有化。 ...
ReentrantReadWriteLock类
package com.zhang.concurrent;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
/**
* TODO Document TestReentrantReadWriteLock
* <p />
...
Java RMI简单例子
- 博客分类:
- Java基础
rmi调用一般过程:
接口:
package com.zhang.rmi;
import java.rmi.Remote;
import java.rmi.RemoteException;
/**
* 实现Remote接口,定义的方法都需要抛出RemoteException
* <p />
*
* @author Administrator
*/
public interface TestRmiInterface extends Remote {
String concat(String a, String b) thro ...
Effective Java,枚举类型使用
- 博客分类:
- Java基础
将不同的行为与每个枚举常量关联起来:在枚举类型中声明一个抽象的方法,并在特定于常量的类类主体中,实现具体的方法。
/**
* 用户角色
* <p />
*
* @author Administrator
*/
public enum Role {
ROLE_ADMIN {
@Override
public String getName() {
return "ROLE_ADMIN";
}
},
ROLE_USE ...
1.< context-param>
context-param 元素用来设定web站台的环境参数(context),它包含两个子元素:
param-name和param-value.
< param-name>参数名称< /param-name>
设定Context名称
< param-value>值< /param-value>
设定Context名称的值
配置spring配置文件的位置,使加载时可以找到相应的spring配置文件
<context-param>
<param-nam ...
1. OSGI bundle间的协作方式
类似SOA,每个bundle可以通过BundleContext注册对外提供的服务,同时也可以通过BundleContext来获得需要引用的服务。借助使用bundle的元数据来实现工程之间package的共享。export package和import package。
在OSGI框架中,Service是个实际的概念,只有通过BundleContext注册成Service才能使得一个POJO作为Service在OSGI框架中被使用,同时也只有通过BundleContext来获取发布到框架中的Service,通过Service的方式来实现Bundle之间 ...
1.参考资料:Hadoop快速入门,来自hadoop官方站,中文,且比较权威。配置hadoop配置文件时,发现该文档此段落已经过期,请参考英文版本:http://hadoop.apache.org/common/docs/r1.0.3/single_node_setup.html。
2.安装环境:window32位机器,用以学习测试,生产环境需要在linux环境下安装使用。
(1)先决条件
安装Cygwin软件,下载地址:http://www.cygwin.com/
遇到的问题:sshd服务启动失败
卸载服务命令:cygrunsrv -R sshd
原因是权限问题,后来 ...
1.简介
过滤器能够在Servlet、JSP或HTML等web组件被调用之前检查ServletRequest对象,修改请求头和请求正文的内容或者对请求进行预处理操作
能够在Servlet、JSP或HTML等web组件被调用之后检查ServletReponse对象,修改响应头和响应正文。
利用包装类ServletRequestWrapper和ServletResponseWrapper来修改ServletRequest对象和ServletResponse对象。
2.如何创建过滤器?
必须实现javax.servlet.Filter接口。
NIO Reactor模式(阅读NIO笔记)
- 博客分类:
- Java并发
注:内容均节选自附件中的ppt文档。
1.网络服务一般的结构:
读取请求--->解码请求--->处理服务--->编码响应--->发送响应
经典的服务设计是“每一个请求一个线程”,如下图
2.Reactor模式
Reactor响应I/O事件,分发到合适的Handler处理。
Handler执行非阻塞的动作。
基本的Reactor设计,单线程版本
示例代码:
package com.zhang.nio;
import java.io.IOException;
import java.net.InetSocketAddress;
...
NIO Buffer and Channel
- 博客分类:
- Java并发
1.Buffer类图
新创建的ByteBuffer,四个属性的位置
capacity:容量,指定缓冲区的大小。
ByteBuffer byteBuffer = ByteBuffer.allocate(BUFFER_SIZE);
limit:第一个不应该读取或写入的元素的索引。缓冲区的限制不能为负,并且不能大于其容量。
Position: 下一个要读取或写入的元素的索引。缓冲区的位置不能为负,并且不能大于其限制。
遵循条件:0 <= 标记 <= 位置 <=
限制 <= 容量
不同的方法都是编辑buffer,移动这些标记 ...
【转载】NIO基本概念
- 博客分类:
- Netty
慢慢了解的过程中,觉得有必要重新回顾一下IO的基本概念,深入理解一下基础。
缓冲区操作
以下内容摘自《Java NIO》:缓冲区,以及缓冲区如何工作,是所有 I/O 的基础。所谓“输入/输出”讲的无非就是把数据移进或移 ...
Netty学习(2)
- 博客分类:
- Netty
1.package org.jboss.netty.bootstrap;
Bootstrap:初始化Channel的辅助类,为子类提供通用的数据结构。
ServerBootstrap:创建新的服务器端Channel的辅助类,接收连接请求。
ClientBootstrap:创建新的客户端Channel的辅助类,发起连接请求 ...
Netty学习(1)
- 博客分类:
- Netty
注:本文翻译自Netty官方网站,地址:https://netty.io/
Netty介绍
Netty是一个异步事件驱动的网络应用框架,可以快速开发易维护的高性能协议服务器和客户端。
Netty是一个NIO的客户端服务器框架,可以快速和简单开发网络应用(比如开发协议的服务器和客户端),大大简化并提高了网络编程的效率(比如开发TCP和UDP socket 服务器)。“快和简单”并不意味着基于Netty所开发的应用会有性能和维护性的问题。Netty从实现很多的协议中获得很多的经验,比如FTP、SMTP、HTTP、许多二进制和text-based遗留(legacy)协议。因此,Netty已 ...
1.下载与安装
下载地址:http://code.google.com/p/msysgit/,该地址没有被墙,git官方网站http://git-scm.com/已经被墙,无法访问下载。
选择下载Git-1.7.11-preview20120710.exe,这是笔者写这篇文章时的最新版本。下载完成,点击exe一路安装即可。
2.配置
(1)每一次提交都需要包含你的名字和你的Email地址,因此需要配置一下这两个参数,使用以下命令:
git config --global user.name "Your Name"
git config --global use ...