HTML是静态页面,只能保存静态内容。动态页面指根据不同时间、不同用户而显示不同内容的页面。
生成动态页面的两种方法:
1. 使用CGI。CGI全称是公共网关接口,使用Perl脚本编写。
2. 使用Servlet。Servlet是使用Java语言编写的服务端程序,运行在Web服务器中的Servlet容器中,实现请求/响应的Web服务模式。
两者区别如下:
1. 可移植性强
因为Java语言具有跨平台和可移植性强的特点,使得Servlet也有较好的可移植性,即无需修改代码就可以部署到多种不同类型的Web服务器上,所以Servlet比CGI可移植性更好。
2. 执行效率高
CGI处理一个请求时会创建一个进程,而Servlet处于服务器进程之中,处理一个请求时会创建一个线程,因为线程的创建与上下文切换开销比进程更小,所以Servlet执行效率更高。
3. 功能强大
Servlet可以与Web服务器直接交互,而CGI无法与Web服务器直接交互。
4. 使用方便
Servlet提供了许多接口来读取或设置HTTP头消息,可以处理Cookie和跟踪会话状态,而CGI没有。
5. 可扩展性强
因为Java语言是健壮的、面向对象的编程语言,很容易扩展,所以Servlet可扩展性强于CGI。
Servlet处理HTTP请求流程如下:
1. 客户端向服务端发送HTTP请求。
2. Web服务器接收到该请求后,会把该请求交给容器处理,容器会创建两个对象:HttpServletResponse和HttpServletRequest。
3. 容器根据URL找到对应的Servlet,创建一个新的线程,把第2步创建的两个对象传递给该线程。
4. 容器调用Servlet的service()方法来响应用户请求,而service()方法会调用doPost()方法或doGet()方法完成具体的响应任务,把生成的动态页面返回给容器。
5. 容器把响应消息封装成HTTP格式,返回给客户端。此时,这个线程运行结束,删除第2步创建的两个对象。
参考资料
《Java程序员面试笔试宝典》 P166-168