Java
文章平均质量分 77
王炎林
这个作者很懒,什么都没留下…
展开
-
Filter and Dispatcher
使用Struts框架时,需要在web应用程序的web.xml文件中增加filter配置。如下代码filter> filter-name> struts filter-name> filter-class> org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter filte原创 2013-04-22 17:08:06 · 2473 阅读 · 0 评论 -
tomcat服务器解析(二) --- Endpoint
Endpoint主要用来提供基础的网络I/O服务,封装了网络通讯相关的细节。在AbstractProtocol中对Endpoint有这样一段注释 /** * Endpoint that provides low - level network I/O - must be matched to the * ProtocolHandler im原创 2015-05-11 20:12:14 · 10763 阅读 · 1 评论 -
tomcat服务器解析(四) ---- 组成模块分解
前面部分梳理了tomcat服务器处理http请求的一个流程,这里进行内容总结,梳理下在tomcat服务器实现中的,各种功能模块。[Endpoint]Endpoint是基础的网络设施,通过Endpoint来实现网络连接和控制,它是服务器对外I/O操作的接入点。主要任务是管理对外的socket连接,同时将建立好的socket连接交到合适的工作线程中去。content:org.a原创 2015-05-11 20:13:54 · 4406 阅读 · 0 评论 -
tomcat服务器解析(三)---- Handler for Endpoint
前面的分析到,请求最终被封装成了一个SocketProcessor对象,放在Executors线程池中去执行。这些都还只是在tomcat内部的socket的处理层面上,那请求最终是如何被转到开发人员所写的servlet上的?NioEndpoint.SocketProcessor所做的工作在私有方法doRun中 if (handshake == 0)原创 2015-05-11 20:15:06 · 3780 阅读 · 0 评论 -
tomcat服务启动解析
[web容器简介]先需要区分几个概念:Web Server 、Web ContainerWeb Server:能够通过HTTP提供服务的进程,可以是一套完整的系统、一个软件等Web Container:管理Java Servlet、JSP的容器,是Web Server的一个组件。一般负责,负责管理servlet的生命周期,url请求映射,请求权限验证等。常见的web容器原创 2015-05-14 17:25:07 · 4428 阅读 · 0 评论 -
tomcat服务器解析(七)-- Processor&Endpoint&ProtocolHandler
请求到达Poller处理,最终是由Processor来进行处理,为了说明这中间过程所涉及的部分,先整理下在tomcat服务的各个组成部分:ProtocolHandler、Endpoint、Endpoint.Handler、Processor它们之间的引用关系如下[ProtocolHandler] org.apache.coyote.ProtocolHan原创 2015-06-17 20:26:11 · 5088 阅读 · 2 评论 -
tomcat服务器解析(五)-- Poller
在前面的分析中介绍过,Acceptor的作用是控制与tomcat建立连接的数量,但Acceptor只负责建立连接。socket内容的读写是通过Poller来实现的。 Poller使用java nio来实现连接的管理。关于nio,主要需要明确三个概念:Channel、Selector和SelectionKey.在这里的使用上,它们之间的关系可以简单这样理解,Channel必须原创 2015-06-05 22:59:07 · 9672 阅读 · 1 评论 -
tomcat服务器解析(六)-- Acceptor
Acceptor负责用来管理连接到tomcat服务器的数量,来看看Acceptor在tomcat服务器中的应用,是如何实现连接管理的,socket连接建立成功之后,是如何实现内容的读写的(读写是交由Poller机制去完成)。先准备一点java nio中实现socket连接所需的基础知识:SocketChannel和ServerSocketChannelSocketChann原创 2015-06-07 17:41:26 · 6143 阅读 · 0 评论 -
Java Reference
Java Reference简要笔记。。。原创 2015-06-11 20:26:29 · 2484 阅读 · 0 评论 -
求解!关于Http和Socket
问题是这样,我写了一个LynnHttpClient的类,还有一个Socket的服务器类。在LynnHttpClient类的main方法中,我使用HttpURLConnection向服务端发了一条记录。但在服务端使用Socket读取数据的时候,为什么要读两次才能把HTTP头和内容读出来。代码如下客户端public class LynnHttpClient { p原创 2015-09-02 14:43:57 · 2104 阅读 · 1 评论 -
一个ClassCastException引发的思考
一个ClassCastException引发的思考,在做一个简单的功能试验时,代码抛出了下面的异常明明类的完全限定名是一样的,竟然会转换失败。。。完整的项目代码如下所示import java.io.IOException;import java.util.HashMap;import java.util.Map;import javax.se原创 2015-11-07 11:27:03 · 4727 阅读 · 1 评论 -
Session和Cookie
Session是属于服务器端生成和管理的对象,由于HTTP请求本身是无状态的,因此在服务器端使用Session来管理HTTP请求的状态。服务器端会把session对象存在内存中。Cookie是属于浏览器前端的数据存储方案,数据存储于电脑本地磁盘上,在访问某个域名的服务时,浏览器会自动加载属于当前域的cookie数据,将cookie信息发送到服务器端。[Cookie和原创 2015-10-27 20:28:50 · 2256 阅读 · 0 评论 -
ThreadLocal的原理
在多线程环境下,会使用ThreadLocal来保存变量,这样即使在多线程的环境下,也能够以线程安全的方式来使用变量。1、在多线程环境中,使用ThreadLocal来保存变量时,变量是存在什么地方? 简要来说,使用ThreadLocal来保存相关变量时,这个变量是存在当前使用ThreadLocal对象的这个线程中的,也就是当前线程,即Thread.curren原创 2016-03-05 23:25:35 · 2386 阅读 · 0 评论 -
Hadoop RPC分析 (二) -- Server
[Hadoop RPC服务端:Server]服务端的基本思路可以简述如下:通过网络获取到远程调用相关的信息,找到对应的方法,执行完成后,将结果通过网络发送给客户端。对于服务端,我们将主要关心内部的实现机制,找到服务端处理一次远程调用的整个流程。与Server相关的类主要为下面几个(都是Server的内部类)Server.Listener & Server.Liste原创 2016-07-25 20:49:12 · 3474 阅读 · 0 评论 -
tomcat服务器解析(一)
httpservlet自己并不能独立运行,需要依赖于一个web容器才能够运行。维基百科中对httpservlet和web容器的关系做了简要说明 A web container (also known as a servlet container) is essentially the component of a web server that interacts with the s原创 2015-05-11 20:09:25 · 4308 阅读 · 2 评论 -
ZooKeeper简要笔记
整理的ZooKeeper的简要笔记原创 2015-04-16 20:28:22 · 3093 阅读 · 0 评论 -
ThreadLocal简单学习
学习Struts2时,遇到ThreadLocal,不甚理解,所以对此作了一番学习。ThreadLocal是什么呢?首先这并不是一个线程类,它是用来提供本地线程数据,也就是它保存的数据是线程相关的,每个线程都有一份数据副本,一个线程可以对其保存的副本进行修改,却不会影响其它的线程中的数据。这样说不易理解,比较这三种情况的数据,1、非ThreadLocal类型的静态成员数据;2、非Thre原创 2013-04-21 19:54:23 · 1904 阅读 · 1 评论 -
java线程同步之CountDownLatch
1、类说明jdk的concurrent包中的CountDownLatch类是一个线程同步的辅助类,它使得线程可以一直等待在其它线程中执行的操作,直到此操作结束。CountDownLatch在初始化的时候指定一个大小值N,调用CountDownLatch的await方法的线程会陷入等待之中,直到这个CountDownLatch对象的countDown方法被调用N次为止,无论是在一个线程中调用N次原创 2014-01-22 16:47:12 · 1768 阅读 · 0 评论 -
Netty的ChannelPipeline
1、如何理解Netty的ChannelPipeline 在Netty中,每个Channel被创建的时候都需要被关联一个对应的pipeline(通道),这种关联关系是永久的(整个程序运行的生命周期中)。ChannelPipeline可以理解成一个消息( 或消息事件,ChanelEvent)流转的通道,在这个通道中可以被附上许多用来处理消息的handler,当消息在这个通道中流转的时候,如原创 2014-01-16 10:43:43 · 16001 阅读 · 0 评论 -
Netty详解
原文链接 http://www.blogjava.net/czihong/articles/391927.htmlNetty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序[官方定义],整体来看其包含了以下内容:1.提供了丰富的协议编解码支持,2.实现自有的buffer系统,减少复制所带来的消耗,3.转载 2014-01-16 10:41:01 · 7538 阅读 · 2 评论 -
Netty的ChannelFuture
在Netty中的所有的I/O操作都是异步执行的,这就意味着任何一个I/O操作会立刻返回,不保证在调用结束的时候操作会执行完成。因此,会返回一个ChannelFuture的实例,通过这个实例可以获取当前I/O操作的状态。ChannelFuture为完成或未完成状态。完成和未完成可对应的各种I/O操作结果如下所示 *原创 2014-01-16 10:42:41 · 14390 阅读 · 0 评论 -
ReentrantLock解析
最近学习Jdk的源代码时,读到了ConcurrentHashMap的源码实现时,发现每一个分段Segment都是ReentrantLock类型,于是顺带对ReentrantLock的源代码进行了学习。。在这里做一个笔记总结。因为只有在工作之余才能有空看看,所以思路有点零散,仅供参考。。。。1、如何确定哪个线程可重复进入该锁 在获取锁的时候,首先会检查原创 2014-10-25 10:56:26 · 20697 阅读 · 1 评论 -
条件锁
ReentrantLock类有一个方法newCondition用来生成这个锁对象的一个条件(ConditionObject)对象,它实现了Condition接口。Condition提供了线程通讯的一套机制await和signal等线程间进行通讯的方法。。1、适用场景 当某线程获取了锁对象,但因为某些条件没有满足,需要在这个条件上等待,直到条件满足才能够往下继续执行时,就需要原创 2014-10-30 17:47:55 · 3870 阅读 · 0 评论 -
共享锁和排它锁(ReentrantReadWriteLock)
1、什么是共享锁和排它锁 共享锁就是允许多个线程同时获取一个锁,一个锁可以同时被多个线程拥有。 排它锁,也称作独占锁,一个锁在某一时刻只能被一个线程占有,其它线程必须等待锁被释放之后才可能获取到锁。2、排它锁和共享锁实例 ReentrantLock就是一种排它锁。CountDownLatch是一种共享锁。这两类都是单纯的一类,即,要么原创 2014-11-16 14:27:22 · 16175 阅读 · 1 评论 -
Java自旋锁
Linux系统中自旋锁的原理和实现想当复杂,会涉及操作系统、内核等等一系列的东东,Java的自旋锁可以理解成让当前线程不停地在循环体内执行,直到满足线程进入临界区为止。在AbstractQueuedSynchronizer中就有自旋锁的使用,参见 acquireQueued方法final boolean acquireQueued(final Node node,原创 2014-11-17 20:43:26 · 2695 阅读 · 0 评论 -
Executor框架
1、框架定义的接口 Executor框架的接口主要由三个接口定义,Executor、ExecutorService和ScheduledExecutorService Executor是最上层接口,定义了一个Runnable的任务执行的接口 void execute(Runnable command); ExecutorService继承自Executor,在原创 2014-11-18 19:52:05 · 998 阅读 · 0 评论 -
Executor实现----AbstractExecutorService实现分析
1、首先来看一段使用示例 ExecutorService recmdService = Executors. newFixedThreadPool(1); Future> recmdFuture = recmdService.submit( new Callable>() { @Override publi原创 2014-11-23 14:42:46 · 6006 阅读 · 2 评论 -
Executor-ThreadPoolExecutor实现
1、ThreadPoolExecutor的主要作用在Oracle中对ThreadPoolExecutor的作用进行了说明:1、在大量的异步任务到达的情况下,使用线程池能够提升性能;2、提供一种资源管理和调度的方法。一般通过Executors的工厂方法来生成一个线程池对象,Executors提供了多种方法来构造不同的线程池:1、带有缓存性质的线程池 Executors.new原创 2014-12-06 10:23:09 · 3677 阅读 · 0 评论 -
synchronized锁住了什么
先看一个简单示例,下面这段代码能够正常通过编译。public class SyncTest { public SyncTest syncVar; public static SyncTest syncStaticVar; public static synchronized void testStaticSync() {原创 2015-03-17 11:12:27 · 11744 阅读 · 0 评论 -
Hadoop RPC分析(一) -- Client
[Hadoop RPC调用入口]在使用Hadoop RPC基本框架中,主要是通过getProxy来获得一个客户端代理对象,通过这个对象来向服务端发送RPC请求。getProxy有多个重载方法,最终都是调用到了下面这个函数来进行实现(来自org.apache.hadoop.ipc.RPC)publicstatic ProtocolProxy getProtocolProxy(原创 2016-07-25 20:47:31 · 4539 阅读 · 0 评论