• J2EE应用服务器包括一个web容器(如Tomcat)和一个EJB容器
  • Servlet受控于web容器,由容器来管理和运行

容器如何处理请求

  1. HTTP客户机发出HTTP请求,通过URL请求一个动态页面时,
  2. 部署描述文件(deployment descriptor)实现将公共URL名映射到完全限定servlet类名,从而将URL指向servlet
  3. 容器为请求创建请求对象HttpServletRequest和响应对象HttpServletResponse、创建或分配线程,同时将创建的请求对象和响应对象传递给servlet,
  4. 容器调用servlet的service()方法,进而调用doGet()doPost()方法,
  5. doGet()或doPost()方法将动态页面封装入响应对象,
  6. 容器结束线程,将响应对象转化为HTTP响应,删除请求对象和响应对象,
  7. HTTP服务器发出HTTP响应。

servlet的生命周期

  • constructor()
  • init(),servlet实例创建后,调用init();
  • service(),容器为请求创建一个线程时,调用service()。不应该覆盖service()方法,而是doGet()doPost()方法,至少要覆盖其中的一个;
  • destory()

servlet的生命周期

容器运行多个线程来处理对一个servlet的多个请求

同一客户做出的不同请求、不同客户做出的不同请求,对容器来说,都意味着一个新线程

init()总是在第一个service()调用之前完成

参考资料:
1
2
3
4
5
6
7
8
9
10
package javax.servlet;
interface Servlet {
service(ServletRequest, ServletResponse)//
init(ServletConfig)//
destory()//
getServletConfig()
getServletInfo()
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package javax.servlet;
abstract class GenericServlet {
//实现Servlet接口中的方法
service(ServletRequest, ServletResponse)
init(ServletConfig)
init()
destory()
getServletConfig()
getServletInfo()
getInitParameter(String)
getInitParameterNames()
getServletContext()
log(String)
log(String, Throwable)
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package javax.servlet.http;
abstract class HttpServlet {
//实现service()方法
service(HttpServletRequest, HttpServletResponse)
service(ServletRequest, ServletResponse)
doGet(HttpServletRequest, HttpServletResponse)
doPost(HttpServletRequest, HttpServletResponse)
doHead(HttpServletRequest, HttpServletResponse)
doOptions(HttpServletRequest, HttpServletResponse)
doPut(HttpServletRequest, HttpServletResponse)
doTrace(HttpServletRequest, HttpServletResponse)
doDelete(HttpServletRequest, HttpServletResponse)
getLastModified(HttpServletRequest)
}