servlet和cgi区别

Servlet和CGI都是用于实现动态网页的技术,但它们在多个方面存在差异。

执行效率:
CGI针对每个请求都会创建一个进程来处理,而Servlet针对每个请求创建一个线程来执行。创建线程比创建进程的开销要小,所以,与CGI相比,Servlet在交互过程中有更短的响应时间,响应效率更高。
开发难度:
CGI应用开发比较困难,一般会要求程序员有处理参数传递知识的能力,而且CGI不可移植,为某一特定平台编写的CGI应用只能运行于这一环境中。
Servlet提供了Java应用程序的所有优势——可移植、稳健、易开发。使用Servlet Tag技术,Servlet能够生成嵌于静态HTML页面中的动态内容。
资源消耗:
CGI应用对每个请求都会产生新的进程,服务完成后就销毁,所以效率上低于Servlet。
功能与扩展性:
Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等。当服务器决定将实例销毁的时候调用其destroy方法。
Servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于Servlet。
应用范围:
随着WAS的日益推广和Java技术的普及,Servlet技术将取代CGI,成为对Web Server功能扩充的标准技术。最早支持Servlet技术的是JavaSoft的Java Web Server。此后,一些其它的基于Java的Web Server开始支持标准的Servlet API。
总的来说,Servlet在执行效率、开发难度、资源消耗、功能与扩展性等方面优于CGI。

以下是一个使用Servlet和CGI的例子:

假设我们想要实现一个简单的留言本,用户可以在客户端输入评论,然后点击“发布”按钮,评论信息将被发送到服务器进行处理。

对于Servlet,当用户点击“发布”按钮时,浏览器将通过HTTP请求发送数据到服务器。服务器上的Servlet将接收这些数据,并执行相应的操作。在本例中,Servlet将接收到的评论信息存储在数据库中,并将结果返回给客户端。客户端将显示“留言结束”的字样,表示整个过程结束。

对于CGI,浏览器同样会将数据发送到服务器。但是服务器上的CGI程序将处理这些数据,并将结果返回给服务器。服务器再将结果发送回客户端。在本例中,CGI程序将接收到的评论信息存储在指定的文件中,并将执行结果返回给服务器。服务器将结果返回给客户端,客户端同样会显示“留言结束”的字样。

总的来说,Servlet和CGI都可以实现动态网页的功能,但Servlet更加高效和灵活,因此在实际应用中更为常见。

你可能感兴趣的:(servlet)