在介绍JSP中提到Servlet是JSP的基础,那么这一节我们就来看看什么是Servlet以及Servlet在java web开发中是如何配置的。
Servlet的特点
与传统的CGI和许多其他类似的CGI技术相比,java servlet具有更高的效率,易使用,功能性强大,具有更好的可移植性,更节省投资。在未来的技术发展过程中,servlet有可能彻底取代CGI。
在传统的CHI中,每一个请求都要启动一个新的进程,如果CGI程序本身的执行时间较短,启动进程所需要的开销很可能反而超过实际执行时间。而在Servlet中,每一个请求由一个轻量级的Java线程处理。(而不是重量级的操作系统进程)
在传统CGI中,如果有N个并发的对同一CGI程序的请求,则该CGI程序的代码在内存中重复撞在了N次;而对于Servlet,处理请求的是N个线程,只需要一份Servlet代码。在性能优化方面,Servlet也比CGI有着更多的选择
1)方便
2)功能强大
3)可移植性好
4)节省投资,有许多廉价甚至免费的Web服务器可供个人或小规模往网站使用。
Servlet的生命周期
servlet生命周期分为三个阶段
1)Servlet初始化阶段
在下列时刻Servlet容器装载Serv
(1)Servlet容器启动时自动装载某些servlet,实现它只需要在web.XML文件中<Servlet></Servlet>之间添加如下diamante
<loadon-startup></loadon-startup>
(2)在Servlet容器启动后, 客户首次向servlet发送请求
(3)Servlet类文件被更新后,重新装载Servelt
Servlet被装载后,Servlet容器创建一个Servlet实例并且调用Servlet的init()方法进行初始化。在Servlet的整个生命周期内,init()方法只被调用一次
2)Servlet相应请求阶段
对于用户到达Servlet的请求,Servlet容器会创建特定于这个请求ServletRequset对象和ServletResponse对象,然后调用Servlet的service方法。service方法从ServletRequset对象获得客户请求信息,处理该请求,并通过ServletResponse对象向客户返回相应信息。
对于Tomcat来说,它会将传递过来的参数放在一个Hashtable中,该Hashtable的定义如下。
private Hashtable<String String []>paramHashStringArray = new Hashtable<String String []>();
3)Servlet终止阶段
当Web应用被终止,或Servlet容器终止运行,或Serv容器重新装载Servlet新实例时,Servlet容器会先调用Servlet的destroy()方法,在destory()方法中可以释放掉Servlet占用的资源。
总的来说就是Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对象doXXX方法(doGet,doPost等),当服务器决定将实例销毁时调用destroy方法
与CGI的区别在于Servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般都不会销毁,而CGI对每个请求都产生新的进程,服务完成后就会销毁,所以效率上低于Servlet。