seaboat的专栏——a free boat on the sea.

思想自由,技术自由

排序:
默认
按更新时间
按访问量

web中间件切换(was切tomcat)

一、数据源迁移: ①数据源配置在web容器还是在项目本身? 根据开发与生产分离原则选择配置到web容器,以免开发泄露数据库密码。 ②数据库密码加密 原先was的数据源直接在console控制,密码是密文,较安全。改为tomcat正常的话是以明文配置,需改为密文。方案有两个:一是继承连接池工厂类B...

2015-03-10 17:31:28

阅读数:3857

评论数:0

头部——MimeHeaders

http协议的请求头部更像一个键值对,例如Content-Length : 123,前面为键后面为值,表示文本长度为123。对于若干个头部在请求对象中被封装成MimeHeaders对象,MimeHeaders对象里面包含了一个链表结构用于存放头部名和头部值。如下图上,每个MimeHeaderFie...

2015-03-06 08:28:13

阅读数:2558

评论数:0

消息字节——MessageBytes

在tomcat核心处理中有这么一个需求——“为了提高编码性能,对于socket接收到的字节流不马上进行某种编码的转码,而是应该保留字节流的形式,在需要时、在指定编码时才进行转码工作”。MessageBytes正是为解决这个问题而提出的一个类。 消息字节封装了不同类型方式用于表示信息,它包含了四种类...

2015-03-01 19:05:22

阅读数:1907

评论数:0

套接字输入缓冲装置——InternalInputBuffer

互联网的世界很复杂,信息从一端传向另一端过程也相当复杂,中间可能通过若干个硬件,为了提高发送和接收效率,在发送端及接收端都将引入缓冲区,所以两端的套接字都拥有各自的缓冲区,当然这种缓冲区的引入也带来了不确定的延时,在发送端一般先将消息写入缓冲区,直到缓冲区填满才发送,而接收端则一次只读取最多不超过...

2015-02-24 21:33:07

阅读数:2176

评论数:0

套接字输入流——InputStream

输入缓冲装置里面必须要包含读取字符的通道,否则就谈不上缓冲了,这个通道就是InputStream,它属于jdk中java.io包的类,有了它我们就可以从源头读取字符,它的来源可以有多种多样,这里主要探讨的是从socket连接中读取字符。 如上图,InputStream充当从操作系统底层读取s...

2015-02-19 23:22:55

阅读数:2064

评论数:0

套接字工厂——ServerSocketFactory

接收器Acceptor在接收连接的过程中,根据不同的使用场合可能需要不同的安全级别,例如在支付相关的交易就必须对信息加密后再发送,这其中还涉及到密钥协商的过程,而在另外一些普通场合则无需对报文加密。反应到应用层则是使用http与https的问题,具体跟http/https相关的一些知识请到前面相关...

2015-02-16 19:21:50

阅读数:2969

评论数:0

任务定义器——SocketProcessor

将socket扔进线程池前需要定义好任务,要进行哪些逻辑处理由SocketProcessor定义,根据线程池的约定,作为任务必须扩展Runnable。用如下伪代码表示 protected class SocketProcessor implements Runnable {         pub...

2015-02-08 19:31:23

阅读数:2054

评论数:0

任务执行器——Executor

上节说到接收器Acceptor在接收到socket后会有一系列简单的处理,其中将socket扔进线程池是最重要的一步,线程池是一个怎样东西?其原理在前面的“线程池原理”章节已经说明过了,这里重点讲tomcat中用于处理客户端请求的线程池——Executor。 为确保整个web服务器的性能,应该在接...

2015-02-07 19:21:27

阅读数:2113

评论数:0

Socket接收器——Acceptor

Acceptor是JIoEndpoint的内部类,主要的职责就是监听是否有客户端套接字连接并接收socket,再将socket交由任务执行者(Executor)执行。不断从系统底层读取socket,接着做尽可能少的处理(最好就是接收到后不做任何处理),最后扔进线程池。为什么强调要做尽可能少的处理?...

2015-02-01 19:47:35

阅读数:2734

评论数:8

流量控制闸门——LimitLatch套接字连接数限制器

Tomcat作为web服务器,对于每个客户端的请求将给予处理响应,但对于一台机器而言,访问请求的总流量有高峰期且服务器有物理极限,为了保证web服务器不被冲垮我们需要采取一些措施进行保护预防,需要稍微说明的此处的流量更多的是指套接字的连接数,通过控制套接字连接个数来控制流量。其中一种有效的方法就是...

2015-01-25 19:42:54

阅读数:2922

评论数:2

Java并发——线程池原理

“池”技术对我们来说是非常熟悉的一个概念,它的引入是为了在某些场景下提高系统某些关键节点性能,最典型的例子就是数据库连接池,JDBC是一种服务供应接口(SPI),具体的数据库连接实现类由不同厂商实现,数据库连接的建立和销毁都是很耗时耗资源的操作,为了查询数据库中某条记录,最原始的一个过程是建立连接...

2015-01-24 19:56:15

阅读数:3484

评论数:1

Tomcat内核之ASCII解码的表驱动模式

我们知道Tomcat通信是建立在Socket的基础上,而套接字在服务器端和客户端传递的报文都是未经过编码的字节流,每8位组成1个字节,计算机以二进制为基础,这是由于使用晶体管的开合状态表示1和0,这样8个电晶体管就可以组成一个字节,这正是应用层使用的最小单位——字节。 在通过Socket进行网络通...

2015-01-17 19:57:02

阅读数:2197

评论数:0

如何找到java对应的c/c++源码

很多时候java经常被c鄙视,因为c说我是你的基础,但java竟然有如此强的生命力就必然有其存在的价值。本文不探讨各种开发语言的优劣,仅仅介绍如何找到java对应c/c++实现的源码。当我们追究一个java类到jdk库的时候,可能会遇到一个方法被声明为native,是的,它表明是一个由c/c++实...

2015-01-11 18:48:03

阅读数:4106

评论数:1

Java并发框架——公平性

所谓公平性指所有线程对临界资源申请访问权限的成功率都一样,不会让某些线程拥有优先权。通过前面的CLH Node FIFO学习知道了等待队列是一个先进先出的队列,那么是否就可以说每条线程获取锁时就是公平的呢?关于公平性这里分拆成三个点分别阐述: ① 准备入队列的节点,此情况讨论的是线程加入等待队列时...

2015-01-09 20:58:11

阅读数:2131

评论数:0

Java并发框架——同步状态的管理

整个AQS框架核心功能都是围绕着其32位整型属性state进行,一般可以说它表示锁的数量,对同步状态的控制可以实现不同的同步工具,例如闭锁、信号量、栅栏等等。为了保证可见性此变量被声明为volatile,保证每次的原子更新都将及时反映到每条线程上。而对于同步状态的管理可以大体分为两块,一是独占模式...

2015-01-03 22:35:51

阅读数:2629

评论数:0

Java并发框架——AQS超时机制

AQS框架提供的另外一个优秀机制是锁获取超时的支持,当大量线程对某一锁竞争时可能导致某些线程在很长一段时间都获取不了锁,在某些场景下可能希望如果线程在一段时间内不能成功获取锁就取消对该锁的等待以提高性能,这时就需要用到超时机制。在JDK1.5之前还没有juc工具,当时的并发控制职能通过JVM内置的...

2014-12-27 21:15:37

阅读数:2315

评论数:0

Java并发框架——AQS阻塞队列管理(三)——CLH锁改造

在CLH锁核心思想的影响下,Java并发包的基础框架AQS以CLH锁作为基础而设计,其中主要是考虑到CLH锁更容易实现取消与超时功能。比起原来的CLH锁已经做了很大的改造,主要从两方面进行了改造:节点的结构与节点等待机制。在结构上引入了头结点和尾节点,他们分别指向队列的头和尾,尝试获取锁、入队列、...

2014-12-26 21:48:58

阅读数:3075

评论数:0

Java并发框架——AQS阻塞队列管理(二)——自旋锁优化

看Craig, Landin, and Hagersten发明的CLH锁如何优化同步带来的花销,其核心思想是:通过一定手段将所有线程对某一共享变量轮询竞争转化为一个线程队列且队列中的线程各自轮询自己的本地变量。这个转化过程由两个要点,一是构建怎样的队列&如何构建队列,为了保证公平性,构建的...

2014-12-21 21:49:10

阅读数:2836

评论数:5

Java并发框架——AQS阻塞队列管理(一)——自旋锁

我们知道一个线程在尝试获取锁失败后将被阻塞并加入等待队列中,它是一个怎样的队列?又是如何管理此队列?这节聊聊CHL Node FIFO队列。  在谈到CHL Node FIFO队列之前,我们先分析这种队列的几个要素。首先要了解的是自旋锁,所谓自旋锁即是某一线程去尝试获取某个锁时,如果该锁已经被其他...

2014-12-20 22:58:45

阅读数:3689

评论数:2

Tomcat内核之类加载器工厂

Java虚拟机利用类加载器将类载入内存,以供使用。在此过程中类加载器要做很多的事情,例如读取字节数组、验证、解析、初始化等。而Java提供的URLClassLoader类能方便地将jar、class或网络资源加载到内存。Tomcat中则用一个工厂类ClassLoaderFactory把创建类加载器...

2014-12-19 22:51:15

阅读数:2095

评论数:0

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