在说调用之前先看下http请求的一些相关知识
当浏览器向Web服务器发出请求时,它向服务器传递了一个数据块,也就是请求信息,HTTP请求信息由3部分组成:(1)请求方法URI协议/版本(2) 请求头(Request Header)(3) 请求正文
(1)请求方法URI协议/版本
请求的第一行是"方法URI协议/版本"例如:GET/sample.jsp HTTP/1.1
以上代码中"GET"代表请求方法,"/sample.jsp"表示URI,"HTTP/1.1代表协议和协议的版本。
(2)请求头(Request Header)
请求头包含许多有关的客户端环境和请求正文的有用信息。例如,请求头可以声明浏览器所用的语言,请求正文的长度等。例如:
Accept:image/gif.image/jpeg.*/*
Accept-Language:zh-cn
Connection:Keep-Alive
Host:localhost
User-Agent:Mozila/4.0(compatible:MSIE5.01:Windows NT5.0)
Accept-Encoding:gzip,deflate.
(3)请求正文
请求头和请求正文之间是一个空行,这个行非常重要,它表示请求头已经结束,接下来的是请求正文。请求正文中可以包含客户提交的查询字符串信息:
username=jinqiao&password=1234
在一个web请求中冲浏览器中发出时必须带有一定的说明,一定的头文件信心,主要有hosts,dns解析,请求方法,在get或post请求时会加入一定的相应的头文件信息,请求的协议:http协议,主机名,端口,项目名,项目请求的方法,以及携带的数据,通过浏览器会他相应的请求的路径给解析出来,把携带的参数解析出来,把允许的类型解析出来,其实就是实体内容
- 查看hosts头分析请求的是哪个虚拟主机,如果没有hosts请求头访问默认的虚拟主机,
- 分当前请求时访问的当前主机中的哪一个web资源
- 分析出当前请求访问的当前web资源中的哪一个资源,
- 查找web.xml看是否有虚拟路径如果有则用虚拟路径去访问这个资源
- 服务器从response对象中获得写入浏览器的数据并响应给浏览器
servlert的生命周期:
servlet在第一次访问到的时候,服务器会创建一个servlet对象,创建对象时立即调用init方法进行初始化操作,创建出的对象一直停留在内存中,为后续访问这个servlet提供服务,每次调用servle时都会执行其中的service方法,当web应用移除出容器或者服务器被关闭时随着服务器的关闭会调用servlet中的destory方法进行后续销毁工作
init():在Servlet的生命周期中,仅执行一次init()方法。它是在服务器装入Servlet时执行的,负责初始化Servlet对象。可以配置服务器,以在启动服务器或客户机首次访问Servlet时装入Servlet。无论有多少客户机访问Servlet,都不会重复执行init()。
service():它是Servlet的核心,负责响应客户的请求。每当一个客户请求一个HttpServlet对象,该对象的Service()方法就要调用,而且传递给这个方法一个“请求”(ServletRequest)对象和一个“响应”(ServletResponse)对象作为参数。在HttpServlet中已存在Service()方法。默认的服务功能是调用与HTTP请求的方法相应的do功能。
destroy():仅执行一次,在服务器端停止且卸载Servlet时执行该方法。当Servlet对象退出生命周期时,负责释放占用的资源。一个Servlet在运行service()方法时可能会产生其他的线程,因此需要确认在调用destroy()方法时,这些线程已经终止或完成。
-
第一个到达服务器的 HTTP 请求被委派到 Servlet 容器。
-
Servlet 容器在调用 service() 方法之前加载 Servlet。
-
然后 Servlet 容器处理由多个线程产生的多个请求,每个线程执行一个单一的 Servlet 实例的 service() 方法。