自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(38)
  • 资源 (2)
  • 收藏
  • 关注

原创 Tomcat/work目录

work目录下放的是编译后的项目,

2014-07-28 18:17:27 671

原创 [Mina2.0源码](六)服务端、客户端读数据

服务端建立请求后,就阻塞在NioProcessor父类AbstractPollingIoProcessor的内部类Processor.run()中的int selected = select(SELECT_TIMEOUT);等待OP_READ事件。当客户端往通道中写数据后,就唤醒往下执行。 if (selected > 0) { //L

2013-08-19 17:02:07 1280

原创 [MINA2.0源码](五)客户端写数据——FilterChain

客户端session初始化完后,就可以写数据了:session.write("Hello,Server!I'm Client.");AbstractIoSession public WriteFuture write(Object message) { return write(message, null); }转调 public WriteFutu

2013-08-16 11:46:16 3453

原创 [MINA2.0源码](四)客户端完成建立连接

服务端完成连接后,这里往下执行 if (selected > 0) { nHandles -= processConnections(selectedHandles()); }processConnections处理事件。 private int processConnections(Iterator hand

2013-08-15 10:34:25 1110

原创 [MINA2.0源码](三)服务端建立连接——NioSocketSession

服务端启动后,便会一直阻塞在NioSocketAcceptor父类AbstractPollingIoAcceptor内部类Acceptor.run()方法的int selected = select();上,直到有建立连接的请求到来。监听到连接请求就会执行其后的processHandles(selectedHandles()); private void processHand

2013-08-09 16:06:02 2412 1

原创 [MINA2.0源码](二)客户端发起连接请求——NioSocketConnector

NioSocketConnector负责客户端向服务端发起连接请求,会创建一个NioSocketSession,尤其负责读写操作。功能与服务端的NioSocketAcceptor相对应,他们都是IoServer的子类,功能类似。MINA客户端代码: public connectServer() { // set local connector connector = new N

2013-08-09 16:05:26 6497

原创 [MINA2.0源码](一)服务端建立监听——NioSocketAccepter

MINA源码的SVN地址https://svn.apache.org/repos/asf/mina/mina/tags/2.0.7MINA源码结构紧凑,各类分工明确,以处理Socket的相关类为例,主要有:NioSocketAcceptor、NioProcessor、NioSocketSession、NioSocketConnectorNioSocketAcceptor是服务端用于初始化,

2013-08-09 09:11:39 1851

原创 Java NIO例子——MINA的最简单模型

Selector、SelectionKey、ServerSocketChannel、SocketChannel、SelectableChannel。。。头晕了,一下子理解不来,用socket的模式没法套。做了个简单的例子:Server端

2013-08-01 19:35:34 1643

原创 Java NIO怎么理解通道和非阻塞?

nio引入了buffer、channel、selector等概念。通道相当于之前的I/O流。“通道”太抽象了。java解释不清的东西只能看它底层是怎么解释的——操作系统的I/O控制,通道控制方式?I/O设备:CPU——通道——设备控制器——I/O设备(通道和设备控制器的关系是多对多,设备控制器和I/O设备的关系也是多对多。)I/O过程,参考http://www.nbrkb.ne

2013-01-29 21:08:13 6559 1

原创 Java RMI猜测

先上例子,来自http://damies.iteye.com/blog/51778HelloInterface.java、Hello.java、HelloServer.java、HelloClient.java1.HelloInterface.javaimport java.rmi.Remote;import java.rmi.RemoteException;/** *

2013-01-29 17:14:35 523

原创 [Java IO源码]缓冲流的实现原理

java.io包中的类大致可以分为:InputStream、OutputStream、Reader、Writer。InputStream/Reader可以理解为input from数据源,OutputStream/Writer可以理解为output to数据目的地。他们的前者处理的是字节,后者处理的是字符。而数据源则可能是来自硬盘上的文件、内存中的变量、网络的数据等等。(分类图参考ht

2013-01-22 10:39:12 3099

原创 Mina2.0入门——例子

准备jar包:mina-core-2.0.2.jar、log4j-1.2.15.jar、slf4j-api-1.6.1.jar、slf4j-log4j12-1.6.1.jar。一、服务端public class MinaServer { public static void main(String[] args) throws IOException { IoAccepto

2013-01-16 16:15:49 798

原创 [Spring3.x源码]Ageci(二)授权器

上一篇中配置的FilterSecurityInterceptor即是授权器FilterSecurityInterceptor.doFilter(ServletRequest request, ServletResponse response, FilterChain chain)public void doFilter(ServletRequest request, Servlet

2013-01-11 16:10:05 787

原创 [Spring3.x源码]Acegi(一)验证器

以下是简化了的Acegi的配置文件: <![CDATA[ CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON PATTERN_TYPE_APACHE_ANT /**=mySecAuthenticationProc

2013-01-11 15:38:45 1012

原创 [Spring3.x源码]事务(二)事务的执行

执行代理对象的方法时,会遍历其前面类。最中会执行到事务的切面TransactionInterceptor.invoke(final MethodInvocation invocation)public Object invoke(final MethodInvocation invocation) throws Throwable { // Work out the target cla

2013-01-05 16:53:39 1483

原创 [Spring3.x源码]事务(一)配置事务切面

使用AOP对事务进行配置,配置文件: <aop:advisor pointcut="execution(* *.*(..))" advice-ref="txAdvice" /> AOP在解析节点时,会执行到DefaultBeanDefinitionDocumentReader.parseBeanDefinit

2013-01-05 16:03:53 1252

原创 [Spring3.x源码]AOP(四)切面的执行

1.调用对象的方法后,会执行此代理的对象的invoke。JdkDynamicAopProxy.invoke(Object proxy, Method method, Object[] args): public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { MethodInvocat

2013-01-01 22:28:32 1052

原创 [Spring3.x源码]AOP(三)代理类的实例化

获取bean的代理对象:Hello hello = (Hello)context.getBean("hello"); 1.在IoC创建bean对象的时候会执行AbstractAutowireCapableBeanFactory.createBean(final String beanName, final RootBeanDefinition mbd, final Object[] args)

2013-01-01 14:06:59 753

原创 [Spring3.x源码]AOP(二)组装配置信息

AbstractApplicationContext context = new FileSystemXmlApplicationContext("beans.xml");这个过程不仅会解析普通的标签,标签也会被解析。1.IoC在解析XML的时候,DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(Element root, B

2013-01-01 11:12:36 1190

原创 [Spring3.x源码]AOP(一)例子

AOP可用于增加事务、日志、监控等功能,而不需要去逐个修改业务代码。现在需要给IoC例子中的Hello的方法增加日志记录的功能:修改配置文件beans.xml,增加记录日志的类LogHello,java,再加两个jar包aspectjweaver.jar、cglib-nodep-2.1_3.jar。beans.xml修改如下: <beans xmlns="http://www.spri

2012-12-31 14:35:53 635

原创 [Spring3.x源码]IoC(三)实例化bean对象

获取bean对象:Hello hello = (Hello)context.getBean("hello"); 1.AbstractApplicationContext中 public Object getBean(String name) throws BeansException { return getBeanFactory().getBean(name); }getB

2012-12-31 14:06:06 777

原创 [Spring3.x源码]IoC(二)解析XML建立上下文

AbstractApplicationContext context = new FileSystemXmlApplicationContext("beans.xml");完成XML的解析与上下文对象的实例化1.FileSystemXmlApplicationContext public FileSystemXmlApplicationContext(String[] config

2012-12-31 13:51:37 721

原创 [Spring3.x源码]IoC(一)例子

编写bean(Hello.java)、配置文件(beans.xml)、调用端(TestSpring.java),项目中导入spring.jar、common-logging.jar包1.Hello.javapublic class Hello { private String name; public Hello(){} public Hello(String args){

2012-12-31 13:42:38 832

原创 Hadoop2.0入门——伪分布式运行WordCount

环境:VMware9.0,CentOS6.3,jdk1.6.0_24,hadoop-2.0.2-alpha。1.安装完CentOS6.3后,将网卡设为桥接模式:2.安装jdk1).卸载CentOS自带的openJdk,命令:rpm -qa|grep jdk查看自带的jdk版本号,再命令:rpm -e --nodeps jdk名称2).将jdk-6u24-linux-i586

2012-12-18 18:43:37 1091

原创 [Tomcat6.0源码]设计模式的使用

【策略模式】类型:行为模式。定义一组算法,将每个算法都封装起来,并且使它们之间可以互换。策略模式使这些算法在客户端调用它们的时候能够互不影响地变化。例:Tomcat中Catalina类,用Digester来解析配置文件server.xml。EngineRuleSet继承了RuleBase类,重写addRuleInstance()方法,用来解析Engine节点。HostRuleSet解析

2012-11-01 17:20:22 933

原创 [Tomcat6.0源码]Servlet API之Session、Cookie

一、Session的使用在servlet中取得Session:HttpSession session = request.getSession();request.getSession()即org.apache.catalina.connector.Request.getSession(): public HttpSession getSession() {

2012-10-22 23:24:13 848

原创 [Tomcat6.0源码]Servlet API之Request

在写servlet的时候,会继承HttpServlet,重写它的doPost、doGet(),这两个方法都有两个参数HttpServletRequest、HttpServletResponse。request中保存的是请求报文的信息。以getParameter()为例,看看数据是如何在在两个servlet中传递的。一、request的来源tomcat最终调用到我们自己编写的servelt是

2012-10-16 14:14:20 1239

原创 [Tomcat6.0源码]Servlet API之ServletConfig、ServletContext

我们编写Servlet类的时候,都继承自HttpServlet。而HttpServlet又继承了GenericServlet类,实现了Servlet、ServletConfig接口。(图片来自http://getmc.blog.bokee.net/bloggermodule/blog_viewblog.do?id=57343)在写doPost()、doGet()的时候,ServletC

2012-10-09 22:50:53 1174

原创 [Tomcat6.0源码]请求的处理四Pipeline、Valve、FilterChain

CoyoteAdapter.service()中调用postParseRequest对请求进行封装,匹配相关的Host、Context、Wrapper等。接着执行:connector.getContainer().getPipeline().getFirst().invoke(request, response);程序将按Connector(N-1)Engine(1-N)Host(1-N)

2012-09-27 11:29:40 1059

原创 [Tomcat6.0源码]请求的处理三Mapper、JMX

CoyoteAdapter.service(): if (postParseRequest(req, request, res, response)) { // Calling the container //Http1.1调用StandardEngineValve.invoke(request,response)

2012-09-27 11:27:38 777

原创 [Tomcat6.0源码]请求的处理二Request

Worker.run()取到socke后,往下执行handler.process(socket)。handler来源于Http11Protocol.init(): public void init() throws Exception { endpoint.setName(getName()); endpoint.setHandler(cHandler);

2012-09-25 16:21:25 1585

原创 [Tomcat6.0源码]请求的处理一Socket

《组件的启动》中JIoEndpoint的start会启动Acceptor.run来监听请求(Acceptor是JIoEndpoint的内部类): Socket socket = serverSocketFactory.acceptSocket(serverSocket); serverSocketFactory.in

2012-09-25 15:45:21 726

原创 [Tomcat6.0源码]项目的部署

上回说到在HostConfig.start()会部署所有的项目: public void start() { if (log.isDebugEnabled()) log.debug(sm.getString("hostConfig.start")); try { ObjectName hostON = n

2012-09-13 00:22:08 960

原创 [Tomcat6.0源码]组件的启动

1.Bootstrap初始化后,执行start(),调用Catalina.start(): /** * Start a new server instance. */ public void start() { if (getServer() == null) { load(); }

2012-09-13 00:13:42 797 3

原创 [Tomcat6.0源码]组件的初始化

1.Bootstrap.main()做的几件事:1)daemon.init();创建Catalina对象 2)daemon.load(args);调用Catalina.load();通过解析server.xml对相关组件的实例化和初始化 3)daemon.start();调用Catalina.start()依次启动各组件前面已经了解Catalina.load()用Digester实

2012-09-11 18:40:18 475

原创 [Tomcat6.0源码]组件的实例化

一、Server和Service的实例化Catalina.createStartDigester();中Server对象的创建。digester.addObjectCreate("Server", "org.apache.catalina.core.StandardServer", "cla

2012-09-06 17:27:21 587

原创 [Tomcat6.0源码]强大的Digester

上回说到,Catalina的load方法,主要是创建Digester对象来解析conf/server.xml,以此来创建Server、Service等相关组件类。关键步骤:Digester digester = createStartDigester();digester.push(this);digester.parse(inputSource);1.建立解析规则2.将Cat

2012-09-05 15:49:07 587

原创 [Tomcat6.0源码]从BootStrap的main开始

BootStrap的mian方法:1.BootStrap.init();除了设置一些路径和加载相关的jar,主要就是创建了Catalina的对象。2.1Bootstrap.load();用反射调用Catalina的load方法2.2用Digester工具类解析conf/server.xml,创建相关对象:Server、Service、Engine、Host、Context等

2012-09-04 23:58:28 663

《80x86汇编语言与计算机体系结构》随书光盘

《80x86汇编语言与计算机体系结构》书中例子有用到作者的io.h等文件,这些文件在随书光盘中。

2009-03-15

Enterprise Java with UML中文版

最佳UML入门图书。展示了如何在软件开发的整个过程中利用UML构建更好的企业级Java系统

2008-10-08

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除