我们知道,要由容器来管理和运行servlet,但是为什么要这样呢?容器到底做了哪些工作?
1.通信支持
利用容器提供的方法,你能轻松地让servlet与web服务器对话,无需自己建立ServerSocket、监听接口、创建流等。容器知道自己与web服务器之间的协议,所以你的servlet不必担心web服务器(如Apache)和你自己的web代码之间的APT。你要考虑的只是如何在servlet中实现业务逻辑。
2.生命周期管理
容器控制着servlet的生与死。它会负责加载类、实例化和初始化servlet、调用servlet方法,并使servlet实例能够被垃圾回收器回收。有了容器的控制,你就不用太多地考虑资源管理了。
3.多线程支持
容器会自动地为它接收的每个servlet请求创建一个新的java线程。针对客户的请求,如果servlet已经运行完相应的HTTP服务方法,这个线程就会结束。虽然还是要考虑线程安全和同步的问题,但由服务器创建和管理多个线程来处理多个请求,这确实能让你少做很多工作。
4.声明方式实现安全
利用容器,可以使用XML部署描述文件来配置(和修改)安全性,而不必将其硬编码写到servlet(或其他)类代码中。这样你不用修改源文件、重新编译就能管理和修改安全性配置。
5.JSP支持
容器负责将JSP翻译成servlet。
总之,多亏有了容器,你可以更专注于自己的业务逻辑,而不用考虑为线程管理、安全性和网络通信编写代码。