`
ryanflyer
  • 浏览: 102388 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论
文章列表
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,应该是易于学习、易于使用即使没有文档、很难被误用、易于阅读并且使用它的代码容易维护、足够强大来满足需求、易于扩展。   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 /> ...
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 ...
  将不同的行为与每个枚举常量关联起来:在枚举类型中声明一个抽象的方法,并在特定于常量的类类主体中,实现具体的方法。 /** * 用户角色 * <p /> * * @author Administrator */ public enum Role { ROLE_ADMIN { @Override public String getName() { return "ROLE_ADMIN"; } }, ROLE_USE ...

web.xml配置

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接口。
注:内容均节选自附件中的ppt文档。   1.网络服务一般的结构:   读取请求--->解码请求--->处理服务--->编码响应--->发送响应 经典的服务设计是“每一个请求一个线程”,如下图  2.Reactor模式 Reactor响应I/O事件,分发到合适的Handler处理。 Handler执行非阻塞的动作。 基本的Reactor设计,单线程版本 示例代码:   package com.zhang.nio; import java.io.IOException; import java.net.InetSocketAddress; ...
  1.Buffer类图  新创建的ByteBuffer,四个属性的位置 capacity:容量,指定缓冲区的大小。   ByteBuffer byteBuffer = ByteBuffer.allocate(BUFFER_SIZE);  limit:第一个不应该读取或写入的元素的索引。缓冲区的限制不能为负,并且不能大于其容量。   Position: 下一个要读取或写入的元素的索引。缓冲区的位置不能为负,并且不能大于其限制。   遵循条件:0 <= 标记 <= 位置 <= 限制 <= 容量   不同的方法都是编辑buffer,移动这些标记 ...
慢慢了解的过程中,觉得有必要重新回顾一下IO的基本概念,深入理解一下基础。   缓冲区操作 以下内容摘自《Java NIO》:缓冲区,以及缓冲区如何工作,是所有 I/O 的基础。所谓“输入/输出”讲的无非就是把数据移进或移 ...

Netty学习(2)

1.package org.jboss.netty.bootstrap;     Bootstrap:初始化Channel的辅助类,为子类提供通用的数据结构。 ServerBootstrap:创建新的服务器端Channel的辅助类,接收连接请求。 ClientBootstrap:创建新的客户端Channel的辅助类,发起连接请求 ...

Netty学习(1)

注:本文翻译自Netty官方网站,地址:https://netty.io/ Netty介绍 Netty是一个异步事件驱动的网络应用框架,可以快速开发易维护的高性能协议服务器和客户端。 Netty是一个NIO的客户端服务器框架,可以快速和简单开发网络应用(比如开发协议的服务器和客户端),大大简化并提高了网络编程的效率(比如开发TCP和UDP socket 服务器)。“快和简单”并不意味着基于Netty所开发的应用会有性能和维护性的问题。Netty从实现很多的协议中获得很多的经验,比如FTP、SMTP、HTTP、许多二进制和text-based遗留(legacy)协议。因此,Netty已 ...

GIt入门

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 ...
Global site tag (gtag.js) - Google Analytics