Servlet本身并没有main()方法,所以必须要有其他Java程序去调用它的方法(如doGet(),doPost()),这个Java程序就是Web容器(Container)(Servlet受控于web容器)。同时,服务器得到的请求也是要交给web容器,由容器向Servlet提供http请求。Tomcat就是一个容器。
但很显然,使用容器管理控制Servlet势必会产生额外的开销,那我们到底为什么使用容器呢?因为我们需要容器做一些必须的、和我们的业务无关的、复杂的工作,这样我们就可以安心写我们个人的代码了。
容器做了哪些工作?
1.通信支持。不用再自己写ServerSocket监听端口blabla了
2.生命周期管理。容器控制着Servlet的生与死
3.多线程支持。容器会自动地为它接收的每一个Servlet请求创建一个新的Java线程
4.声明方式实现安全。
5.JSP支持。容器负责把JSP代码翻译成Java
容器如何处理请求?
1.用户点击一个指向servlet的链接,而不是指向静态页面的链接,容器创建两个对象:HttpSerlvetResponse和HttpServletRequest
2.容器根据url找到是哪个servlet,并为这个请求创建/分配一个线程,把上面创建的请求和响应两个对象分配给线程
3.容器调用servlet的service()方法,service()方法根据请求的类型是get还是post调用相应的doGet()/doPost()方法。此处假设是doGet()方法
4.doGet()方法创建一个动态页面,并把这个页面放到响应对象里
5.线程结束后,容器把响应对象转换为Http响应,发回客户。删除请求和响应对象。
Servlet 生命周期
第一,加载并实例化
第二,初始化
第三,服务,
第四,销毁。