Tomcat - 如何设计一个简单的web容器 在学习Tomcat前,很多人先入为主的对它的认知是巨复杂的:所以第一步,在学习它之前,要打破这种观念,我们通过学习如何设计一个最基本的web容器来看它需要考虑什么:进而在真正学习Tomcat时,多把重点放在它的顶层设计上,而不是某一块代码上, 思路永远比具体实现重要的多.@pdai Tomcat - 如何设计一个简单的web容器 写在前面 基础认知:如何实现服务器和客户端(浏览器)的交互 HTTP协议 Socket SeverSocket 一个简单…
Tomcat - 理解Tomcat架构设计 前文我们已经介绍了一个简单的Servlet容器是如何设计出来,我们就可以开始正式学习Tomcat了,在学习开始,我们有必要站在高点去看看Tomcat的架构设计.@pdai 准备知识 一些准备知识点. Tomcat和Catalina是什么关系? Tomcat的前身为Catalina,Catalina又是一个轻量级的Servlet容器 Tomcat的前身为Catalina,Catalina又是一个轻量级的Servlet容器.在美国,catalina是一个很…
Tomcat - 源码分析准备和分析入口 上文我们介绍了Tomcat的架构设计,接下来我们便可以下载源码以及寻找源码入口了.@pdai 源代码下载和编译 首先是去官网下载Tomcat的源代码和二进制安装包,我这里分析最新的Tomcat9.0.39稳定版本https://tomcat.apache.org/download-90.cgi 下载二进制包和源码 下载二进制包的主要目的在于,让我们回顾一下包中的内容:其次,在我们后面通过源码包编译后,以方便和二进制包进行对比. 下载两个包 查看二进制包中…
之前在另外一个平台(http://www.jointforce.com/jfperiodical/article/1035)发表的一篇文章,现在发布到自己的博客上. 开发一个web容器涉及很多不同方面不同层面的技术,例如通信层的知识,程序语言层面的知识等等,且一个可用的web容器是一个比较庞大的系统,要说清楚需要很长的篇幅,本文旨在介绍如何设计一个web容器,只探讨实现的思路,并不涉及过多的具体实现.把它分解划分成若干模块和组件,每个组件模块负责不同的功能,下图列出一些基本的组件,并将对每个组件…
在之前的博客中我更大家说过Http协议是对tcp协议的封装,其底层还是使用tcp协议来进行数据传出的,浏览器实际上就是一个Socket客户端,今天呢我们就开始着手利用ServerSocket来编写一个自己的web容器,首先在编写容器之前我们要先确定两点. 1.ServerSocket能正常接收到浏览器的请求信息 我们创建一个ServerSocket package cn.wz.net.demo; import java.io.DataInputStream; import java.io.IOE…
昨天我们已经能够确定浏览器的请求能够被我们自己编写的服务类所接收并且我们服务类响应的数据也能够正常发送到浏览器客户端,那么我们今天要解决的问题就是让我们的数据能够被浏览器识别并解析. Http(Https)协议 我们发送到浏览器的数据如果想要被浏览器正常的解析,那其必须符合http协议规定的数据格式.其请求信息的格式我们已经能够看到如下所示: 我们来简单的分析一下这个请求头信息 1.首先第一行包含了三个信息 :请求类型:get 请求资源路径和参数:/portal/  该请求的http协议版本.这…
Attribute的直接翻译是属性,这和Property容易产生混淆,所以一般翻译成特性加以区分.Attribute常常的表现形式就是[AttributeName], 随意地添加在class, method的头上,然后就能够产生各种各样奇特的效果和行为.比如关于序列化的标签[Serializable]用来指定一个实体类可以序列化.[NonSerialized]可以用来指定某些属性不包含在序列化中. 一, Attribute本质是什么? Attribute类似于标签, 可以为类,方法,结构体,属性…
---[来自我的CSDN博客](http://blog.csdn.net/weixin_37139197/article/details/78838091)--- JDBC概述   使用JDBC也挺长时间了,最近因为想学习mybatis的源码,因此打算重新复习一下JDBC的使用. 定义:JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成.JDBC…
一个简单的web容器小例子,功能十分简单,只能访问静态资源,对于新手来说还是有一定的意义.主要分三个类 1.server类:主要功能开启socketServer,阻塞server,接收socket访问,解析request,创建request,作出响应 public class TestServer1 { private boolean shutdown = false; // web目录webroot public static final String WEB_ROOT = System.ge…
简介 druid是用于创建和管理连接,利用"池"的方式复用连接减少资源开销,和其他数据源一样,也具有连接数控制.连接可靠性测试.连接泄露控制.缓存语句等功能,另外,druid还扩展了监控统计.防御SQL注入等功能. 本文将包含以下内容(因为篇幅较长,可根据需要选择阅读): druid的使用方法(入门案例.JDNI使用.监控统计.防御SQL注入) druid的配置参数详解 druid主要源码分析 使用例子-入门 需求 使用druid连接池获取连接对象,对用户数据进行简单的增删改查(sql…