在JavaWeb的学习和研究中,Servlet扮演着重要的角色。学好它,为后续的JavaWeb学习打下良好的基础。无论是SSH、SSM、微服务JavaWeb技术,都应该先学习Servlet,这样才能达到事半功倍的效果。本文将主要分析Servlet的运行原理。1.UML下图是Servlet的UML关系图。从图中可以看出,抽象类HttpServlet继承了抽象类GenericServlet,它有两个关键方法doGet()和doPost()。编写抽象类HttpServlet的doGet()和doPost()方法注意:对于任何用户自定义的Servlet,只需重写抽象类HttpServlet的doPost()和doGet()方法即可,如上MyServlet所示。2、容器中的ServletServlet的执行过程只有放在容器中才能执行,Servlet容器有很多种,比如Tomcat、WebLogic等,下图是一个简单的请求-响应模型。分析:浏览器向服务器发送GET请求(请求服务器ServletA)。服务器上的容器逻辑接收url。根据url判断为Servlet请求。这时容器逻辑会生成两个对象:请求对象(HttpServletRequest)和响应对象(HttpServletResponce)容器逻辑根据url找到目标Servlet(本例中目标Servlet为ServletA),并创建一个线程A。容器逻辑将刚刚创建的请求对象和响应对象传递给线程A。容器逻辑调用Servlet的service()方法service()方法调用doGet()(本例调用doGet())或doPost()根据请求类型(此示例是GET请求)的方法。线程池中注意:容器中原则上每个Servlet只有一个实例。每个请求对应一个线程。多个线程可以作用于同一个Servlet(这是Servlet线程不安全的根本原因)。每个线程一旦执行完任务就被销毁或者放入线程池中等待回收。3、Servlet在JavaWeb中扮演的角色Servlet在JavaWeb中扮演两个角色:页面角色和控制器角色。有了jsp等动态页面技术,Servlet更侧重于controller的角色,jsp+servlert+model构成了基本的三层架构(1)页面Page角色(2)controller角色jsp充当页面角色,Servlet扮演控制器的角色,两者结合构建了基本的MVC三层架构模式4.容器中Servlet的生命周期下图简要概括了Servlet的生命周期分析:第一步:容器首先加载Servlet类第二步:容器实例化Servlet(Servlet无参数构造函数执行)第三步:执行init()方法(在Servlet生命周期中,只执行一次,在service()方法执行之前执行)第四步:执行service()方法处理客户请求,doPost()或doGet()第五步:执行destroy()销毁线程
