【答案解析】HTML只能用来保存静态内容,而通常情况下,静态页面很难满足实际应用的需要,鉴于此,动态页面的概念被引入。所谓动态页面,指的是能够根据不同时间、不同用户而显示不同内容的页面,例如常见的论坛、留言板、电子商务网站等都是通过动态页面来实现的。那么如何才能生成动态页面呢?其中一种方法是采用公共网关接口(Common Gateway Interface,CGI)。CGI是一种用Perl脚本编写的程序,可以用来生成动态页面,而另一种方式则是采用Servlet技术。
什么是Servlet呢?Servlet是采用Java语言编写的服务器端程序,它运行于Web服务器中的Servlet容器中,其主要功能是提供请求/响应的Web服务模式,可以生成动态的Web内容,而这正是HTML所不具备的功能。
与其他生成动态页面的技术相比,Servlet有诸多优点,具体而言,主要表现在如下几个方面:
1)较好的可移植性。由于Java语言具有跨平台和可移植性强的特点,使得Setvlet也有较好的可移植性,即无需修改代码就可以部署到多种不同类型的Web服务器上。
2)执行效率高。由于CGI针对每个请求都会创建一个进程来处理,而Servlet针对每个请求创建一个线程来执行,而创建线程比创建进程的开销要小,因此与CGI相比,Servlet在交互过程中有更短的响应时间,响应效率更高。
3)功能强大。Setvlet可以与Web服务器进行交互,而CGI却无法与Web服务器直接交互。
4)使用方便。Servlet提供了许多非常有用的接口以用来读取或设置HTTP头消息,处理Cookie和跟踪会话状态等。
5)可扩展性强。由于Setvlet是用Java语言编写的,因此它具备了Java语言的所有优点。Java语言是健壮的、面向对象的编程语言,它很容易扩展,Servlet自然也具备这样的优点。
为了更好地说明Setvlet,在介绍Servlet处理请求的过程前,首先引入Servlet程序的基本结构,如下所示:
public class MyServlet extends HttpServlet{
public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException{
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
PrinterWriter out=response.getWriter();
Out.println("some html formate string");
}
}
从以上Servlet的程序结构中可以看出,在Servlet中,并没有main()方法,连所谓的入口方法都没有,那么它到底是如何执行的呢?其实,它是在容器的控制下执行的,最常被使用的容器为Tomeat。当Web服务器获取到一个对Servlet的请求时,该服务器将会把这个请求交给对应的容器来处理,容器通过调用Servlet的方法(doGet()或doPost())来响应客户端的请求。
具体而言,Servlet处理客户端请求有如下几个步骤:
1)用户通过单击一个链接来向Servlet发起请求。
2)Web服务器接收到该请求后,会把该请求交给相应的容器来处理,当容器发现这是对Servlet发起的请求后,容器此时会创建两个对象:HttpServletResponse和HttpServletRequest。
3)容器可以根据请求消息中的URL消息找到对应的Servlet,然后针对该请求创建一个单独的线程,同时把第2)步中创建的两个对象以参数的形式传递到新创建的线程中。
4)容器调用Servlet的service()方法来完成对用户请求的响应,service()方法会调用doPost()或doGet()方法来完成具体的响应任务,同时把生成的动态页面返回给容器。
5)容器把响应消息组装成HTTP格式返回给客户端。此时,这个线程运行结束,同时删除第2)步创建的两个对象。
以上处理流程如图所示。