一个Browser的HTTP请求(一)
本文主要是分析一个简单的web服务器是如何工作的。
若有不恰当或不对之处,请指正!
- Tomcat和web服务器的关系
我们常说Tomcat是一个web容器,也常说用户通过浏览器向web服务器进行请求,同时我们也知道,对于web项目来说,我们在启动Tomcat之后,就可以进行一系列的请求服务得到想要的结果了。那么Tomcat和web服务器有啥关联呢?还是说二者就是同一个呢?!

通过上图的Tomcat内部结构我们可以发现,其实Tomcat内置了一个轻量级的web服务器,即Server,用于转发html请求。
- web服务器相关了解
从上段我们了解了,Tomcat中的web服务器Server接收到了browser的请求,将其转发给Service等进行处理,那么它是如何截获到该请求的呢?!
由于web服务器是使用HTTP协议来和客户端进行通信的,采用Socket套接字来建立长连接。
Socket连接至少需要一对套接字,分别是clientSocket(Socket)和serverSocket,其连接分三步:
1)serverSocket无法确定具体clientSocket,因此时刻处于监听状态;
2)客户端请求:clientSocket指定要连接的serverSocket,提供地址和端口号,然后向其发出连接请求;
3)连接:serverSocket收到请求后,响应其请求并创建一个新线程将指定的Socket发给clientSocket。一旦确认无误,就正式建立连接,并通过HTTP进行通信;serverSocket继续处于监听状态并接收其他clientSocket的连接请求。
Socket代表一个clientSocket,根据接收的主机名和端口号来创建一个套接字:public Socket (java.lang.String host, int port);如new Socket("127.0.0.1",8080);
创建完之后,就可以根据该实例来发送和接收字节流。如调用Socket的getOutputStream方法来获得java.io.OutputStream对象;而要接收字节流,则调用其getInputStream方法来返回一个java.io.InputStream对象。
ServerSocket类的创建如下:new ServerSocket(int port, int backLog, InetAddress bindingAddress);其中InetAdres一般为127.0.0.1,用来监听本机机器,也被成为是绑定地址;port则是要进行监听的端口号,backLog是指拒绝request请求之前所传入的request请求的最大队列长度,在Tomcat源码中设置为1.
有了serverSocket实例,就可以监听指定端口的连接请求。一旦得到请求,就可以调用其accept方法来获取并返回一个socket实例。
socket = serverSocket.accept();//只有在得到请求以后才会返回socket实例
- Web服务器工作过程
《还得继续补充》
一个Browser的HTTP请求(一)的更多相关文章
- 一个完整的Http请求
一个完整的http请求,通常有以下7点: 1.建立tcp连接 2.web浏览器web服务器发送请求命令 3.web浏览器发送请求头信息 4.web服务器应答 5.web服务器发送应答信息 6.web服 ...
- 无法加载一个或多个请求的类型。有关更多信息,请检索 LoaderExceptions 属性。
新建一个MVC4的项目,引用DAL后,将DAL的连接字符串考入: <connectionStrings> <add name="brnmallEntities&qu ...
- “无法加载一个或多个请求的类型。有关更多信息,请检索 LoaderExceptions 属性 “之解决
今天在学习插件系统设计的时候遇到一个问题:“System.Reflection.ReflectionTypeLoadException: 无法加载一个或多个请求的类型. 于是百度一下,很多内容都差不多 ...
- 使用一个HttpModule拦截Http请求,来检测页面刷新(F5或正常的请求)
在Web Application中,有个问题就是:“我怎么来判断一个http请求到底是通过按F5刷新的请求还是正常的提交请求?” 相信了解ASP.NET的人知道我在说什么,会有同感,而且这其实不是一个 ...
- 实现一个简单的http请求工具类
OC自带的http请求用起来不直观,asihttprequest库又太大了,依赖也多,下面实现一个简单的http请求工具类 四个文件源码大致如下,还有优化空间 MYHttpRequest.h(类定义, ...
- JavaWeb:一个Servelt多个请求
一个Servelt多个请求 基础模拟 方法一:使用switch方法 一.方法介绍 方法:switch 优点:方法简单,明了 缺点:维护麻烦,保密性不好 二.代码实现 1.servlet类 packa ...
- 一个标准的AJAX请求
这是一个标准的ajax请求: $.ajax({ type:"post", url:basePath+"/resourcePush/operationLog", ...
- 一个简易的Http请求转发器
这两天一直再看微信开发,临时在我的电脑搭了个IIS服务器做微信开发,外网也能访问了,关键是,调试太麻烦了!! 我写完代码,要将代码发布到IIS才能接收微信消息,可是在这个过程中,我不知道微信发过来的是 ...
- wpf prism4 出现问题:无法加载一个或多个请求的类型。有关更多信息,请检索 LoaderExceptions 属性。
WPF Prism 框架 程序 出现 问题: 无法加载一个或多个请求的类型.有关更多信息,请检索 LoaderExceptions 属性. 1.开始以为是配置的问题,找了半天,最后原来是有个依赖类库没 ...
随机推荐
- OPPO.1107刷机笔记
手动 转移任意APP为系统APP的方法流程简述 宗旨: 保持和系统原本同目录下的文件各种设置(权限,所有者,SE上下文),目录结构保持一致即可! 从 /data/app/里将对应的APP文件移动到 / ...
- Unity插件之NGUI学习(4)—— 创建UI2DSprite动画
创建一个新的Scene.并按 Unity插件之NGUI学习(2)创建UI Root,并在UI Root的Camera下创建一个Panel. 然后在选中Panel,在菜单中选择NGUI->Crea ...
- 关于angularjs在IE里的坑——F12工具打开,功能正常,关闭之后,angularjs not working
前端时间在做项目的时候,用到了angularjs,期间,发现了一个奇葩的问题,就是在IE11浏览器下,点击下方图1上箭头所示的位置,将此处的开关变为图2中箭头所示的样子,但是发觉没有反应,开关还是灰色 ...
- C# 运行时中的泛型
将泛型类型或方法编译为 Microsoft 中间语言 (MSIL) 时,它包含将其标识为具有类型参数的元数据. 泛型类型的 MSIL 的使用因所提供的类型参数是值类型还是引用类型而不同. 第一次用值类 ...
- WCF信道工厂Channel Factory
ChannelFactory<TChannel> 类 一个创建不同类型通道的工厂,客户端使用这些通道将消息发送到不同配置的服务终结点. 命名空间: System.ServiceModel ...
- java中Calendar.getInstance()和new Date()的差别是什么?
java中Calendar.getInstance()和new Date()的差别如下: Calendar.getInstance()是获取一个Calendar对象并可以进行时间的计算,时区的指定ne ...
- js和jquery触发按钮点击事件
js触发按钮点击事件 function load(){ //下面两种方法效果是一样的 document.getElementById("target").onclick(); do ...
- 文件上传下载:commons-fileupload + Servlet 2.5
数据库:MySQL 开发技术:JSP + Servlet 2.5 第三方的上传组件: commons-fileupload connons-io 上传页面1.form表单需要增加:enctype=&q ...
- linux系统下crontab 配置启动定时任务
1 crontab -e 配置启动定时任务 */1 * * * * sh /home/admin/application/wd/core-python/getMemPositionFromAnaual ...
- 【原创】菜鸟版Android 笔记2- Activity
1. Activity介绍 Acitivity在安卓开发中非常重要,他很像Java桌面开发中的JFrame,在MVC模式中属于Controller,一般一个应用程序通常由多个松耦合关系的activit ...