web服务器其实就是一个应答器,他可以按照预先程序的设计响应客户端浏览器的所有问题。在这个响应的过程中,在网络上使用的是http协议,当然为了安全性后来出现了https协议,而传输的内容时符合HTML标准的文档。当前市面上的web服务器架构很多,比如微软的iis,Apache、tomcat,nginx等等,其实现的功能都是相似的,只不过实现的具体方法不同。
一 、tomcat的结构图为:


二、tomcat处理请求的流程

下面以tomcat为例,说说web服务器是如何实现响应用户请求的任务的。
假设来自客户的请求为:
http://localhost:8080/wsota/wsota_index.jsp

  1. 请求被发送到本机端口8080,被在那里侦听的CoyoteHTTP/1.1 Connector获得
  2. Connector把该请求交给它所在的Service的Engine来处理,并等待来自Engine的回应
  3. Engine获得请求localhost/wsota/wsota_index.jsp,匹配它所拥有的所有虚拟主机Host
  4. Engine匹配到名为localhost的Host(即使匹配不到也把请求交给该Host处理,因为该Host被定义为该Engine的默认主机)
  5. localhost Host获得请求/wsota/wsota_index.jsp,匹配它所拥有的所有Context
  6. Host匹配到路径为/wsota的Context(如果匹配不到就把该请求交给路径名为""的Context去处理)
  7. path="/wsota"的Context获得请求/wsota_index.jsp,在它的mapping table中寻找对应的servlet
  8. Context匹配到URLPATTERN为*.jsp的servlet,对应于JspServlet类
  9. 构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用JspServlet的doGet或doPost方法
    10)Context把执行完了之后的HttpServletResponse对象返回给Host
    11)Host把HttpServletResponse对象返回给Engine
    12)Engine把HttpServletResponse对象返回给Connector
    13)Connector把HttpServletResponse对象返回给客户browser

三、tomcat的配置
tomcat的配置在server.xml这个文件中进行,下面讲述这个文件中的基本配置信息,更具体的配置信息请参考tomcat的文档:
server: 1、port 指定一个端口,这个端口负责监听关闭tomcat的请求
2、shutdown 指定向端口发送的命令字符串
service: 1、name 指定service的名字
Connector (表示客户端和service之间的连接):
1、port 指定服务器端要创建的端口号,并在这个断口监听来自客户端的请求
2、minProcessors 服务器启动时创建的处理请求的线程数
3、maxProcessors 最大可以创建的处理请求的线程数
4、enableLookups 如果为true,则可以通过调用request.getRemoteHost()进行DNS查

询来得到远程客户端的实际主机名,若为false则不进行DNS查询,而是返回其ip地址
5、redirectPort 指定服务器正在处理http请求时收到了一个SSL传输请求后重定向的端口号
6、acceptCount 指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理

队列中的请求数,超过这个数的请求将不予处理
7、connectionTimeout 指定超时的时间数(以毫秒为单位)
Engine(表示指定service中的请求处理机,接收和处理来自Connector的请求):
1、defaultHost 指定缺省的处理请求的主机名,它至少与其中的一个host元素的name属性值是一样的
Context (表示一个web应用程序):
1、docBase 应用程序的路径或者是WAR文件存放的路径
2、path 表示此web应用程序的url的前缀,这样请求的url为http://localhost:8080/path/****
3、reloadable 这个属性非常重要,如果为true,则tomcat会自动检测应用程序的/WEB-INF/lib 和/WEB-INF/classes目录的变化,自动装载新的应用程序,我们可以在不重起tomcat的情况下改变应用程序
host (表示一个虚拟主机):
1、name 指定主机名
2、appBase 应用程序基本目录,即存放应用程序的目录
3、unpackWARs 如果为true,则tomcat会自动将WAR文件解压,否则不解压,直接

从WAR文件中运行应用程序
Logger (表示日志,调试和错误信息):
1、className 指定logger使用的类名,此类必须实现org.apache.catalina.Logger 接口
2、prefix 指定log文件的前缀
3、suffix 指定log文件的后缀
4、timestamp 如果为true,则log文件名中要加入时间,如下例:localhost_log.2001-10-04.txt
Realm (表示存放用户名,密码及role的数据库):
1、className 指定Realm使用的类名,此类必须实现org.apache.catalina.Realm接口
Valve (功能与Logger差不多,其prefix和suffix属性解释和Logger 中的一样):
1、className 指定Valve使用的类名,如用org.apache.catalina.valves.AccessLogValve类可以记录应用程序的访问信息
directory(指定log文件存放的位置):
1、pattern 有两个值,common方式记录远程主机名或ip地址,用户名,日期,第一行请求的字符串,HTTP响应代码,发送的字节数。combined方式比common方式记录的值更多

四、Context的部署配置文件web.xml的说明
一个Context对应于一个Web App,每个Web App是由一个或者多个servlet组成的
当一个Web App被初始化的时候,它将用自己的ClassLoader对象载入“部署配置文件web.xml”中定义的每个servlet类
它首先载入在$CATALINA_HOME/conf/web.xml中部署的servlet类
然后载入在自己的Web App根目录下的WEB-INF/web.xml中部署的servlet类
web.xml文件有两部分:servlet类定义和servlet映射定义
每个被载入的servlet类都有一个名字,且被填入该Context的映射表(mapping table)中,和某种URL PATTERN对应
当该Context获得请求时,将查询mapping table,找到被请求的servlet,并执行以获得请求回应。(所以我们自己定义的每一个servlet都应该在web.xml中进行定义和映射)

分析一下所有的Context共享的web.xml文件,在其中定义的servlet被所有的Web App载入

 <!----------------------------------------------------------------------------------------------->  <web-app>  <!-- 概述:  该文件是所有的WEB APP共用的部署配置文件,  每当一个WEB APP被DEPLOY,该文件都将先被处理,然后才是WEB APP自己的/WEB-INF/web.xml  -->  <!--  +-------------------------+  -->  <!--  |    servlet类定义部分    |  -->  <!--  +-------------------------+  -->  <!-- DefaultServlet  当用户的HTTP请求无法匹配任何一个servlet的时候,该servlet被执行  URL PATTERN MAPPING : /  -->  <servlet>  <servlet-name>default</servlet-name>  <servlet-class>  org.apache.catalina.servlets.DefaultServlet  </servlet-class>  <init-param>  <param-name>debug</param-name>  <param-value>0</param-value>  </init-param>  <init-param>  <param-name>listings</param-name>  <param-value>true</param-value>  </init-param>  <load-on-startup>1</load-on-startup>  </servlet>  <!-- InvokerServlet  处理一个WEB APP中的匿名servlet  当一个servlet被编写并编译放入/WEB-INF/classes/中,却没有在/WEB-INF/web.xml中定义的时候  该servlet被调用,把匿名servlet映射成/servlet/ClassName的形式  URL PATTERN MAPPING : /servlet/*  -->  <servlet>  <servlet-name>invoker</servlet-name>  <servlet-class>  org.apache.catalina.servlets.InvokerServlet  </servlet-class>  <init-param>  <param-name>debug</param-name>  <param-value>0</param-value>  </init-param>  <load-on-startup>2</load-on-startup>  </servlet>  <!-- JspServlet  当请求的是一个JSP页面的时候(*.jsp)该servlet被调用  它是一个JSP编译器,将请求的JSP页面编译成为servlet再执行  URL PATTERN MAPPING : *.jsp  -->  <servlet>  <servlet-name>jsp</servlet-name>  <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>  <init-param>  <param-name>logVerbosityLevel</param-name>  <param-value>WARNING</param-value>  </init-param>  <load-on-startup>3</load-on-startup>  </servlet>  <!--  +---------------------------+  -->  <!--  |    servlet映射定义部分    |  -->  <!--  +---------------------------+  -->  <servlet-mapping>  <servlet-name>default</servlet-name>  <url-pattern>/</url-pattern>  </servlet-mapping>  <servlet-mapping>  <servlet-name>invoker</servlet-name>  <url-pattern>/servlet/*</url-pattern>  </servlet-mapping>  <servlet-mapping>  <servlet-name>jsp</servlet-name>  <url-pattern>*.jsp</url-pattern>  </servlet-mapping>  <!--  +------------------------+  -->  <!--  |    其它部分,略去先    |  -->  <!--  +------------------------+  -->  ... ... ... ...  </web-app>

web服务器学习体会相关推荐

  1. kestrel java_Kestrel Web 服务器学习笔记

    前言: ASP.NET Core 已经不是啥新鲜的东西,很多新启的项目都会首选 Core 做开发: 而 Kestrel 可以说是微软推出的唯一真正实现跨平台的 Web 服务器了: Kestrel 利用 ...

  2. 简单web服务器学习总结

    用node.js实现简单的web服务器 http://www.cnblogs.com/loogn/p/3362475.html http模块已提供了基本功能,所以我主要解决两个问题,1是静态资源的处理 ...

  3. PC端品优购注册页面 resgister.css以及web服务器学习

    注册页类名命名 注册页面:register.html 注意:注册页面比较隐私,为了保护用户信息,我们不需要对当前页面做SEO优化 注册专区: registerarea 注册内容 reg-form 错误 ...

  4. Windows2003搭建web服务器(学习笔记)

    Windows2003搭建web服务器 第一步:IIS安装 开始->控制面板->添加或删除程序->添加/删除windows组件. 勾选应用程序服务器并双击打开->然后选择Int ...

  5. web服务器学习小结

    2.1.介绍 Web服务器一般指的是网站服务器,是指驻留因特网上某一台或N台计算机的程序,可以处理浏览器等Web客户端的请求并返回相应响应,目前最主流的三个Web服务器是Apache. Nginx . ...

  6. python web服务器学习笔记(五) 并发尝试之popen原理探究

    使用popen新开进程能实现并发吗?像这样的cgi处理程序 def run_cgi(self,handler):cmd = "python" +handler.full_pathc ...

  7. 应用程序服务器和Web服务器之间有什么区别?

    应用程序服务器和Web服务器之间有什么区别? #1楼 最大的不同是Web服务器处理HTTP请求,而应用程序服务器将在任意数量的协议上执行业务逻辑. #2楼 这取决于特定的体系结构. 某些应用程序服务器 ...

  8. Java Web基础入门第八讲 Java Web开发入门——初始WEB服务器

    WEB开发的相关知识 WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源.Internet上供外界访问的Web资源分为: 静态web资源(如html页面):指we ...

  9. arm Linux 低成本方案,参赛作品《低成本基于ARM+Linux平台搭建web服务器的物联网学习板》...

    [报名阶段需要填写的内容] 1. 参赛者姓名(必填项): 王徕泽 2. 单位或学校名称(选填项): 徕泽电子工作室 3. 当前职务或职称(选填项): 室长 4. 参赛作品的名字(必填项): 低成本基于 ...

最新文章

  1. 无人驾驶中的目标检测--MODNet: Moving Object Detection Network for Autonomous Driving
  2. Leaflet获取可视范围内4个顶点
  3. 内容可编辑_让PDF像WORD一样自由编辑,好用的PDF编辑工具推荐
  4. leetcode520. py解字符串真是太残暴了
  5. 迅雷前CEO陈磊涉嫌职务侵占罪已被立案侦查,股价周四下跌超7%
  6. 关于估时间的一些感想
  7. 地图结合资料 提供全新网络服务
  8. IAR常用快捷键及技巧
  9. 由于计算机是中文名ccs软件安装出现错误_UG软件不会解决的二十个问题解决方法总结...
  10. sqlserver 软件授权
  11. 谁说菜鸟不会数据分析
  12. 十大高人气商城高口碑蓝牙耳机排行榜,颜值在线性能无敌
  13. win7 64位纯净版系统下载
  14. mysql查看被锁住的表
  15. 提高Java反射速度的方法以及对setAccessable的误解
  16. seaborn画分组箱线图
  17. 安装银河麒麟桌面系统V10【超详细图文教程】
  18. bilibili直播地址获取
  19. CTFHUB-技能树-WEB通关
  20. java mybatis 返回map_Mybatis中返回Map

热门文章

  1. WIFI 功放芯片确定功率大小
  2. Flex布局教程:语法篇(转载阮一峰)
  3. php $stri.=$v 是什么意思,php – 我的str_replace代码不起作用
  4. 物流行业供应商协同管理平台供应商全生命周期管理,优化物流成本
  5. 小程序: wx.uploadFile上传文件保持原文件名的方法
  6. WPS本地镜像化在线文档操作以及样例
  7. 【记录】Ubuntu20.04如何使用中文输入法
  8. 用Matlab求解方程
  9. 北海焊接机器人_北海卫浴焊接机器人报价
  10. 格子乘法与卷积-》卷积定理-》小波分析(暂记)