什么是容器
servlet没main()方法。它们受控于另一个java应用,这个java应用称为容器(Container)Tomcat是这样的容器,Web服务器应用(Apache)得到一个指向servlet请求时,服务器不是把这个请求交给servlet本身,而是交给部署该servlet的容器。要由容器向servlet提供HTTP请求和响应,而且要由容器调用servlet的方法。
客户-->请求--->Web服务器应用--->web容器应用--->servlet-------->web服务器主机
客户<--响应<---Web服务器应用<---web容器应用<---servlet<--------web服务器主机
容器提供:
通信支持:建立serverSocket、监听某个端口、创建流等;
生命周期管理:控制servlet生死,负责加载类、实例化和初始化servlet、调用servlet方法及使servlet实例能够被垃圾回收;
所线程支持:容器会自动为接收的每个servlet请求创建一个新的java线程,运行完响应HTTP服务方法线程就结束。
生命方式实现安全:可以使用xml部署描述文件来配置(或修改)安全性,而不用硬编码写到servlet类代码中。
JSP支持。
容器处理servlet
客户---->http请求---->容器----->servlet
容器---> 创建请求(HttpServletRequest)/响应(HttpServletResponse) 对象
容器--->请求--->响应--->线程(容器根据URL找到正确的servlet,为这个请求创建或分配线程,并把请求和响应对象传递给这个servlet线程)
容器----->servlet service()方法 service根据类型调用doGet()或doPost()方法。
doGet()生成动态页面,并把这个页面“塞到”响应对象的一个引用里。
线程结束,容器把响应对象转为HTTP响应,把它发回给客户,然后删除请求和响应对象。