Servlet学习
JSP+JavaBeans
JSP+JavaBeans+Servlet
Servlet工作原理:
Servlet由支持Servlet的服务器:Servlet引擎,负责管理运行。当多个客户请求一个servlet时,引擎为每个客户启动一个线程而不是启动一个进程,这些线程由servlet引擎服务器来管理,与传动的CGI为每个客户启动启动一个进程相比较,效率要高的多。
Servlet生命周期:
一个servlet是javax.servlet包中HttpServlet类的子类,由支持servlet的服务器完成该子类的对象,即servlet的初始化。
servlet的生命周期主要有下列三个过程组成:
1. 初始化servlet。servlet第一次被请求加载时,服务器初始化这个servlet,即创建一个servlet对象,这对象调用init方法完成必要的初始化工作。
2. 诞生的servlet对象在调用service方法响应客户的请求。
3. 当服务器关闭时,调用destory方法,消灭servlet对象。
init方法只被调用一次,即在servlet第一次被请求加载时调用该方法。当后续的客户请求servlet服务时,web服务将启动一个新的线程,在该线程中,servlet调用service方法相应客户的请求,也就是说,每个客户的每次都请求都导致service方法被调用执行。
init方法:
该方法是HttpServlet类中的方法,我们可以在servlet中重写这个方法
public void init(ServletConfig config) throws ServletException
servlet第一次被请求加载时,服务器初始化一个servlet,即创建一个servlet对象,这个对象调用init方法完成必要的初始化工作。该方法在执行时,servlet引擎会把一个ServletConfig类型的对象传递给init()方法,这个对象就 被保存在servlet对象中,直到servlet对象被消灭,这个ServletConfig对象负责向servlet传递服务设置消息,如果传递失败就会发生ServletException,servlet就不能正常工作。
同时我们已经知道,当多个客户请求一个servlet时,引擎为每个客户启动一个线程,那么servlet类的成员变量被所有的线程共享。
service方法:
该方法是HttpServlet类中的方法,我们可以在servlet中重写这个方法
public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
当servlet创建成功和初始化之后,servlet就调用service方法来处理用户的请求并返回响应。Servlet引擎将两个参数传递给该方法,一个HttpServletRequest类型的对象,该对象封装了用户的请求信息,此对象调用相应的方法可以获取封装的信息,即使用这个对象可以获取用户的请求。和init方法不同的是,init方法只被调用一次,而service方法可能被多次调用,我们已经知道,当后续的客户请求servlet服务时,Servlet引擎将启动一个新的线程,在该线程中,servlet调用servlet方法相应客户的请求,也就是说,每个客户的每次请求都跟导致service方法将被调用执行,调用过程运行在不同的线程中,互不干扰。
destory方法:
该方法是HttpServlet类中的方法,servlet可直接继承这个方法,一般不需要重写
public destory();
当servlet引擎终止服务时,比如关闭服务器等,destory()方法会被执行,消灭servlet对象。