Servlet

一、概念

​ 在服务器上的Java类必须遵守一定的规范,这样才能被服务器(例如Tomcat)识别并执行。只有这样的类浏览器才可以访问到。Servlet就定义了这样的一套规范,Servlet本质上其实就是一个接口。在服务器上定义的Java类就需要实现Servlet接口并实现其中的所有抽象方法。我们常常也可以把一个实现了Servlet接口的实现类称作一个Servlet。

二、使用方式

  1. 创建Java EE项目,选择Servlet3.0及以上的版本(因为Servlet3.0及以上版本支持注解配置,这样就不再需要web.xml了)。
  2. 定义一个类实现Servlet接口并实现其中的所有抽象方法。
  3. 在类上使用@WebServlet注解,进行配置。举例:@WebServlet("/demo1")

三、执行原理

  1. 当服务器接收到客户端浏览器的请求后,会解析请求的URL地址,获取要访问的类的资源路径。
  2. 在服务器中查找是否有类的注解能够对应上该资源路径。
  3. 若有,服务器会将该类的字节码文件加载进内存。自动创建该类的对象并调用方法。

四、Servlet中的生命周期方法

  1. init()方法:

    ​ 默认情况下,当第一次被访问时,Servlet被创建。Servlet中的init()方法只会执行一次,因此一个Servlet在内存中只存在一个对象,即Servlet是单例的。

    【注】当多个用户同时访问该对象时,可能存在线程安全问题。因此,尽量不要在Servlet中定义成员变量。即使定义了成员变量,也不要有对其修改值的操作。

  2. service()方法:

    ​ 提供服务,可以被多次执行。当每次访问Servlet时,Service方法都会被自动调用一次。

  3. destory()方法:

    ​ 当服务器关闭时,Servlet被销毁。destory()方法在Servlet被销毁之前执行,一般用于释放资源,只会执行一次。

    【注】只有当服务器正常关闭时,才会执行destroy方法。

五、Servlet的继承体系结构

Servlet —— 接口

​ |

GenericServlet —— 抽象类

​ |

HttpServlet —— 抽象类

  • GenericServlet抽象类将Servlet接口中的其他方法都做了默认空实现,只将service()方法作了抽象。因此当需要定义Servlet实现类时,可以继承GenericServlet抽象类,然后只需要实现service()方法即可。

  • HttpServlet抽象类是对HTTP协议的一种封装,更为常用。

    // HttpServlet抽象类的service方法
    // 判断请求方式
    String method = req.getMethod();
    if("GET".equals(method)){
    	doGet();
    }else if("POST".equals(method)){
    	doPost();
    }
    

    我们在继承HttpServlet时,只需要重写doGet()方法和doPost()方法即可。

原文地址:https://www.cnblogs.com/jiajun107/p/12960553.html