学习servlet,最重要的就是理解servlet下面四个点:

       1.了解Servlet API的常用接口和类

2.掌握Servlet的生命周期

3.掌握Servlet的部署和配置

4.会使用Servlet处理用户请求( get, post)

用过jsp的应该知道,servlet技术是诞生在jsp之前的,servlet是一个 Java程序,是在j2ee服务器上运行以处理客户端求并做出响应的程序.

通过查阅api可以知道,servlet和其子接口genericservlet都是很少用到的,通过文档可知它有个抽象类HttpServlet,我们每次用它的时候必须实现它,既自己写个类继承自这个HttpServlet类

在文档中对其生命周期的描述是:Servlet生命周期:

1. The servlet is constructed, then initialized with the init method.

2. Any calls from clients to the service method are handled.

3. The servlet is taken out of service, then destroyed with the destroy method, then garbage collected and finalized.

即先执行构造函数,然后执行init()函数,再执行servic函数,再执行doGet函数:

package com.yc.web.servlets;  

import java.io.IOException;  

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;  

public class LifeServlets   extends HttpServlet{
    public LifeServlets(){
            System.out.println("构造方法");  

    }
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        System.out.println("get方法");
    }  

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        System.out.println("service方法");
        super.service(req, resp);
    }  

    @Override
    public void destroy() {
        System.out.println("destroy方法");
        super.destroy();
    }  

    @Override
    public void init() throws ServletException {
        System.out.println("init()方法");
        super.init();
    }  

}  

配置代码:

<servlet>
            <servlet-name>life</servlet-name>
            <servlet-class>com.yc.web.servlets.LifeServlets</servlet-class>
  </servlet>
  <servlet-mapping>
            <servlet-name>life</servlet-name>
            <url-pattern>*.do</url-pattern>
  </servlet-mapping>

通过在不同浏览器执行这段代码可知,servlet是通过单例模式实现的,即它只创建一个实例

  该模式同一时刻只有一个实例,不会出现信息同步与否的概念。
     若多个用户同时访问一个这种模式的页面,
     那么先访问者完全执行完该页面后,后访问者才开始执行。

所以,一旦servlet的容器关闭(这里是tomcat),就会执行destroy()方法。

 
 第一次访问:  构造 -> init()  -> service  -> doGet()/doPost()
 第二次访问:                     service ->  doGet()/doPost()
 销毁:关闭容器.   -> destroy()
      

 servlet是单实例的. 线程不安全的.

Servlet探秘的更多相关文章

  1. 探秘Tomcat——一个简易的Servlet容器

    即便再简陋的服务器也是服务器,今天就来循着书本的第二章来看看如何实现一个servlet容器. 背景知识 既然说到servlet容器这个名词,我们首先要了解它到底是什么. servlet 相比你或多或少 ...

  2. 探秘Tomcat——连接器和容器的优雅启动

    前言: 上篇<探秘Tomcat——启动篇>粗线条的介绍了在tomcat在启动过程中如何初始化Bootstrap类,加载并执行server,从而启动整个tomcat服务,一直到我们看到控制台 ...

  3. 探秘Tomcat——启动篇

    tomcat作为一款web服务器本身很复杂,代码量也很大,但是模块化很强,最核心的模块还是连接器Connector和容器Container.具体请看下图: 从图中可以看出 a. 高亮的两块是Conne ...

  4. 探秘Tomcat——从一个简陋的Web服务器开始

    前言: 无论是之前所在实习单位小到一个三五个人做的项目,还是如今一个在做的百人以上的产品,一直都能看到tomcat的身影.工作中经常遇到的操作就是启动和关闭tomcat服务,或者修改了摸个java文件 ...

  5. Spring MVC 原理探秘 - 容器的创建过程

    1.简介 在上一篇文章中,我向大家介绍了 Spring MVC 是如何处理 HTTP 请求的.Spring MVC 可对外提供服务时,说明其已经处于了就绪状态.再次之前,Spring MVC 需要进行 ...

  6. SpringMvc请求处理流程与源码探秘

    流程梳理 dispatcherServlet作为前端控制器的主要作用就是接受请求与处理响应. 不过它不是传统意义上的servlet,它在接受到请求后采用转发的方式,将具体工作交给专业人士去做. 参与角 ...

  7. Spring MVC 原理探秘 - 一个请求的旅行过程

    1.简介 在前面的文章中,我较为详细的分析了 Spring IOC 和 AOP 部分的源码,并写成了文章.为了让我的 Spring 源码分析系列文章更为丰富一些,所以从本篇文章开始,我将来向大家介绍一 ...

  8. DWR原理探秘

    DWR原理探秘 DWR(Direct Web Remoting)远程Web命令;是一个用于改善web页面与Java类交互的远程服务器端Ajax开源框架,可以帮助开发人员开发包含AJAX技术的网站.它可 ...

  9. SpringBoot 应用程序启动过程探秘

    概述 说到接触 SpringBoot 伊始,给我第一映像最深的是有两个关键元素: 对照上面的典型代码,这个两个元素分别是: @SpringBootApplication SpringApplicati ...

随机推荐

  1. 要重定向 IO 流,Process 对象必须将 UseShellExecute 属性设置为 False。

    Process  p1= new Process(); p1.StartInfo.UseShellExecute = false;

  2. iOS 开源库 之 AFNetWorking 2.x

    1. 网络请求的基本知识 2. Get/Post 请求的使用 3. 文件(图片)上传 4. 断点下载 5. 其它使用细节 6. 设计优良的地方

  3. 在vue-cli项目中安装node-sass

    1,使用save会在package.json中自动添加. ----npm install node-sass  --save ----npm install sass-loader  --save 2 ...

  4. android的引用库类

    在eclipse中的项目里,有时需要外来的jar文件.添加后就可以消去程序中的红条条啦~~~~~~~~~可以照下面的说明添加. 方法/步骤   打开eclipse,导入项目   右击 项目 , “Bu ...

  5. Spring AOP切面的时候参数的传递

    Spring AOP切面的时候参数的传递 Xml: <?xml version="1.0" encoding="UTF-8"?> <beans ...

  6. 集群环境下JSP中获取客户端IP地址的方法

    String ip = request.getHeader("X-Forwarded-For");if (ip == null || ip.length() == 0 || &qu ...

  7. redis内存占用说明

    执行info命令后,找到Memory这一栏,就可以看到内存的使用信息了,如下图: # Memory used_memory:13490096 //数据占用了多少内存(字节) used_memory_h ...

  8. JUC学习笔记--JUC中并发工具类

    JUC中并发工具类 CountDownLatch CountDownLatch是我目前使用比较多的类,CountDownLatch初始化时会给定一个计数,然后每次调用countDown() 计数减1, ...

  9. Exiting the Matrix: Introducing Metasploit's Hardware Bridge

    Metasploit is an amazing tool. You can use it to maneuver through vast networks, pivoting through se ...

  10. C++编程练习(10)----“图的最小生成树“(Prim算法、Kruskal算法)

    1.Prim 算法 以某顶点为起点,逐步找各顶点上最小权值的边来构建最小生成树. 2.Kruskal 算法 直接寻找最小权值的边来构建最小生成树. 比较: Kruskal 算法主要是针对边来展开,边数 ...