Servlet运行原理与JSP的运行原理基本相同,不同之处在于JSP需要先转换成Java代码,而Servlet本身就是Java代码。 Servlet的运行原理如图所示。
u 服务器接收到客户端的请求时,先判断用户所请求的Servlet对象是否存在:
n 如果存在,则直接调用Servlet对象的Service方法(间接调用doGet方法或者doPost方法);
n 如果不存在,则加载Servlet类,创建Servlet对象并实例化,然后调用init方法进行初始化,之后调用Servlet对象的Service方法。
u 最后使用service方法执行的结果对用户进行响应。
注意:在Servlet的生命周期中,同一个Servlet对象可以为多个客户端服务,多个客户端之间的区别在于服务器会为每个客户端创建不同的请求对象和响应对象,而执行的方法是相同的。加载Servlet类,创建对象和调用初始化方法init都只有一次。
在Web应用被卸载或者服务器被关闭的时候,系统卸载Servlet,调用destroy方法释放资源。
Servlet的加载有两种方式:
u 第一次请求的时候加载;
u 服务器启动的时候加载;
两种方式各有利弊,如果第一次请求的时候加载,加载的速度比较慢,但是不浪费空间。如果是启动服务器的时候加载,第一次访问的时候就快了,但是如果一直没有人访问,则这段时间就浪费了空间。
加载Servlet的方式可以在web.xml中声明Servlet的时候配置,如果希望在启动的时候加载HelloServlet,使用下面的代码声明:
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>servlets.HelloServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
上一讲:第六讲 JSP运行原理