Web服务器的运行原理及application内置对象

一,什么是Web服务器?
我们常把基于Web应用称为B/S(Browser/Server ,browser浏览器)架构的应用,但其实Web应用一样是C/S(Client/Server)结构的应用,只是这种应用的服务器是Web服务器,而客户端是浏览器。
Web服务器则负责接收客户端请求,每当接收到客户端连接请求之后,Web服务器应该使用单独的现成为该客户端提供服务:接收请求数据,送回响应数据。

二,浏览器的主要作用?
1.向远程服务器发生请求
2.读取远程服务器返回的字符串数据
3.负责根据字符串数据渲染出一个丰富多彩的页面

三,Web服务器的运行原理?
1.启动单独的线程
2.使用I/O流读取用户请求的二进制流数据
3.从请求数据中解析参数
4.处理用户请求
5.生成响应数据
6.使用IO流向客户端发送请求数据

注:最新的tomcat已经不需要对每个用户请求都启用单独的线程,使用单独的I/O流读取用户请求的数据,最新的tomcat使用的是异步IO,具有更高的性能。

在上面的6个步骤中,第1,2,6步是通用的,可以由Web服务器来完成,但3,4,5步存在差异:因为不同请求里包含的请求参数不同,处理用户请求的方式也不同,所生成的响应自然也不同。
Web服务器会调用Servlet的_jspService()方法来完成3,4,5步,编写JSP页面时,页面里的静态内容,JSP脚本都会转换成_jspService()方法的执行代码,这些执行代码负责完成解析参数,处理请求,生成响应等业务功能,而Web服务器则负责完成多线程,网络通信,等底层功能。
Web服务器在执行了第3步解析到用户的请求参数后,将需要通过这些请求参数来创建HttpServletRequest,HttpServletResponse等对象,作为调用_jspService()方法的参数,实际上一个Web服务器必须为Servlet API中绝大部分接口提供实现类。
小结:Web应用里的JSP页面,Servlet等程序都将由Web服务器来调用。但JSP,Servlet之间通常不会相互调用,那怎样解决JSP,Servlet之间交换数据的问题?
为了解决这个问题,几乎所有的Web服务器(包括Java,ASP,PHP,Ruby等)都会提供4个类似Map的结构,分别是application,session,request,page,并允许JSP,Servlet将数据放入这4个Map结构中,并允许从这4个Map结构中取出数据。
这四个Map结构的区别是范围不同。
application:对于整个Web应用有效,一旦JSP,Servlet将数据放入application中,该数据将可以被该应用下其他所有的JSP,Servlet访问。
session:仅对一次会话有效,一旦JSP,Servlet将数据放入session中,该数据将可以被本次会话的其他所有的JSP,Servlet访问。
request:仅对本次请求有效,一旦JSP,Servlet将数据放入request中,该数据将可以被本次请求的其他JSP,Servlet访问。
page:仅对当前页面有效。一旦JSP,Servlet将数据放入page中,该数据将可以被当前页面JSP脚本,声明部分访问。

通俗的来说:比如 现实生活中有两个人,他们的钱需要相互交换,但他们两个人不能相互的接触,那么只有让A把钱存入银行,而B从银行去取钱。因此我们可以把application,request,session,page理解为类似银行的角色。

简单来说:JSP中的application,session,request,page这四个内置对象用于操作application,session,request,page范围中的数据。

application对象代表Web应用本身,作用如下:
1.在整个Web应用的多个JSP,Servlet之间共享数据。
2.访问Web应用的配置参数。

让多个JSP,Servlet共享数据代码如下:
这里写图片描述
这里写图片描述

注意:虽然使用application(即ServletContext实例)可以方便多个JSP,Servlet共享数据,但不要仅为了JSP,Servlet共享数据就将数据放入application中!由于application代表了整个Web应用,所以通常只应该把Web应用的状态数据放入application里。

获取Web应用配置参数的代码如下:
这里写图片描述
这里写图片描述
应用web程序后,显示查询出来的数据后,就说明application可以访问Web应用的配置参数。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值