Servlet知识点
Servlet生命周期
Servlet运行在容器中,其生命周期是由容器进行管理的。Servlet生命周期通过javax.servlet.Servlet接口中的init()、service()、destroy()方法来表示。
加载和实例化
Servlet容器负责加载和实例化Servlet。当Servlet容器启动时,会部署和加载所有的WEB应用。之后,容器会解析web.xml,找到其中所有的servlet、filter和Listener或者@WebServlet、@WebFilter和@WebListener注解的内容。对于所有的过滤器,以及配置有load-on-startup,或者@WebServlet中的loadOnStartup大于0的Servlet,则立即调用init()方法进行初始化。初始化的目的是为了在处理用户的请求前完成一些初始化的操作,譬如数据库的连接、获取初始化参数等等。对于每一个Servlet,init()方法只能调用一次。
请求处理
当用户的请求到来时,Servlet容器会调用Servlet的service()方法进行请求的处理。在service()方法中,Servlet实例通过ServletRequest对象从请求处获取请求信息,经过处理后,由ServletResponse对象返回结果信息给用户。
终止服务
当Servlet容器停止运行时,会调用Servlet的destroy()方法,释放占用的资源,并且存储信息到设备中,停止运行。
Servlet线程安全
Servlet和Filter是被所有请求所共享的,多个不同的线程(HTTP请求)可以使用同一个实例,这样避免了过于昂贵的开销。
public class ExampleServlet extends HttpServlet {
private Object thisIsNOTThreadSafe;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Object thisIsThreadSafe;
thisIsNOTThreadSafe = request.getParameter("foo"); // BAD!! Shared among all requests!
thisIsThreadSafe = request.getParameter("foo"); // OK, this is thread safe.
}
}
参考
- ImportNew: http://www.importnew.com/17025.html
- 《JavaWeb开发详解》