- 博客(38)
- 资源 (2)
- 收藏
- 关注
原创 [Mina2.0源码](六)服务端、客户端读数据
服务端建立请求后,就阻塞在NioProcessor父类AbstractPollingIoProcessor的内部类Processor.run()中的int selected = select(SELECT_TIMEOUT);等待OP_READ事件。当客户端往通道中写数据后,就唤醒往下执行。 if (selected > 0) { //L
2013-08-19 17:02:07
1294
原创 [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
3477
原创 [MINA2.0源码](四)客户端完成建立连接
服务端完成连接后,这里往下执行 if (selected > 0) { nHandles -= processConnections(selectedHandles()); }processConnections处理事件。 private int processConnections(Iterator hand
2013-08-15 10:34:25
1150
原创 [MINA2.0源码](三)服务端建立连接——NioSocketSession
服务端启动后,便会一直阻塞在NioSocketAcceptor父类AbstractPollingIoAcceptor内部类Acceptor.run()方法的int selected = select();上,直到有建立连接的请求到来。监听到连接请求就会执行其后的processHandles(selectedHandles()); private void processHand
2013-08-09 16:06:02
2429
1
原创 [MINA2.0源码](二)客户端发起连接请求——NioSocketConnector
NioSocketConnector负责客户端向服务端发起连接请求,会创建一个NioSocketSession,尤其负责读写操作。功能与服务端的NioSocketAcceptor相对应,他们都是IoServer的子类,功能类似。MINA客户端代码: public connectServer() { // set local connector connector = new N
2013-08-09 16:05:26
6610
原创 [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
1884
原创 Java NIO例子——MINA的最简单模型
Selector、SelectionKey、ServerSocketChannel、SocketChannel、SelectableChannel。。。头晕了,一下子理解不来,用socket的模式没法套。做了个简单的例子:Server端
2013-08-01 19:35:34
1659
原创 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
6579
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
534
原创 [Java IO源码]缓冲流的实现原理
java.io包中的类大致可以分为:InputStream、OutputStream、Reader、Writer。InputStream/Reader可以理解为input from数据源,OutputStream/Writer可以理解为output to数据目的地。他们的前者处理的是字节,后者处理的是字符。而数据源则可能是来自硬盘上的文件、内存中的变量、网络的数据等等。(分类图参考ht
2013-01-22 10:39:12
3133
原创 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
821
原创 [Spring3.x源码]Ageci(二)授权器
上一篇中配置的FilterSecurityInterceptor即是授权器FilterSecurityInterceptor.doFilter(ServletRequest request, ServletResponse response, FilterChain chain)public void doFilter(ServletRequest request, Servlet
2013-01-11 16:10:05
810
原创 [Spring3.x源码]Acegi(一)验证器
以下是简化了的Acegi的配置文件: <![CDATA[ CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON PATTERN_TYPE_APACHE_ANT /**=mySecAuthenticationProc
2013-01-11 15:38:45
1021
原创 [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
1495
原创 [Spring3.x源码]事务(一)配置事务切面
使用AOP对事务进行配置,配置文件: <aop:advisor pointcut="execution(* *.*(..))" advice-ref="txAdvice" /> AOP在解析节点时,会执行到DefaultBeanDefinitionDocumentReader.parseBeanDefinit
2013-01-05 16:03:53
1270
原创 [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
1066
原创 [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
762
原创 [Spring3.x源码]AOP(二)组装配置信息
AbstractApplicationContext context = new FileSystemXmlApplicationContext("beans.xml");这个过程不仅会解析普通的标签,标签也会被解析。1.IoC在解析XML的时候,DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(Element root, B
2013-01-01 11:12:36
1203
原创 [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
641
原创 [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
784
原创 [Spring3.x源码]IoC(二)解析XML建立上下文
AbstractApplicationContext context = new FileSystemXmlApplicationContext("beans.xml");完成XML的解析与上下文对象的实例化1.FileSystemXmlApplicationContext public FileSystemXmlApplicationContext(String[] config
2012-12-31 13:51:37
733
原创 [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
839
原创 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
1108
原创 [Tomcat6.0源码]设计模式的使用
【策略模式】类型:行为模式。定义一组算法,将每个算法都封装起来,并且使它们之间可以互换。策略模式使这些算法在客户端调用它们的时候能够互不影响地变化。例:Tomcat中Catalina类,用Digester来解析配置文件server.xml。EngineRuleSet继承了RuleBase类,重写addRuleInstance()方法,用来解析Engine节点。HostRuleSet解析
2012-11-01 17:20:22
941
原创 [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
863
原创 [Tomcat6.0源码]Servlet API之Request
在写servlet的时候,会继承HttpServlet,重写它的doPost、doGet(),这两个方法都有两个参数HttpServletRequest、HttpServletResponse。request中保存的是请求报文的信息。以getParameter()为例,看看数据是如何在在两个servlet中传递的。一、request的来源tomcat最终调用到我们自己编写的servelt是
2012-10-16 14:14:20
1269
原创 [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
1188
原创 [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
1066
原创 [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
793
原创 [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
1615
原创 [Tomcat6.0源码]请求的处理一Socket
《组件的启动》中JIoEndpoint的start会启动Acceptor.run来监听请求(Acceptor是JIoEndpoint的内部类): Socket socket = serverSocketFactory.acceptSocket(serverSocket); serverSocketFactory.in
2012-09-25 15:45:21
735
原创 [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
972
原创 [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
808
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
481
原创 [Tomcat6.0源码]组件的实例化
一、Server和Service的实例化Catalina.createStartDigester();中Server对象的创建。digester.addObjectCreate("Server", "org.apache.catalina.core.StandardServer", "cla
2012-09-06 17:27:21
595
原创 [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
595
原创 [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
675
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人