Servlet简介:
Servlet的主要工作:处理客户端请求,生成动态响应,通常用于扩展基于HTTP协议的Web服务器。
Servlet技术是Java EE规范的组成部分,代表了服务器端的Java程序,主要负责处理来自客户端的Web请求,并生成相应的响应。这些程序以Java源代码文件(.java)编写,随后编译成可执行的类文件(.class),并部署到如Tomcat这样的Web服务器上。得益于Java的跨平台优势,Servlet能够在多种操作系统环境中稳定运行。它们能够响应多种类型的HTTP请求,包括但不限于GET、POST、PUT和DELETE,广泛用于动态网页内容的生成、用户表单数据的处理以及数据库交互等关键Web应用场景。
Servelt生命周期:
Servlet生命周期的流程可以概括为:
创建实例 → 初始化(通过init()方法) → 服务请求(通过service()方法以及doGet()、doPost()等) → 销毁(通过destroy()方法) → 垃圾回收
-
创建实例:
当客户端第一次发送请求到一个Servlet时,如果该Servlet的实例尚不存在,Web容器会使用Java的反射API来查找并加载Servlet类。 容器会为这个类创建一个实例。根据Servlet 3.0规范,可以通过注解@WebServlet
来指定实例的创建,或者由容器自动检测类路径下的Servlet类。 - 初始化:Web容器启动时,会查找并加载所有部署的Servlet类,这些类通常位于
WEB-INF/classes
目录下。Servlet类加载后,容器通过调用无参数构造函数创建Servlet的一个实例 Servlet实例被创建,容器会调用其init()
方法。这个方法用于初始化Servlet配置,是一个进行资源准备和一次性设置的地方。init()
方法只会被调用一次,在Servlet的整个生命周期内是第一个被调用的方法。可以在init()
方法中接收初始化参数,这些参数在web.xml
配置文件或通过注解@WebInitParam
提供。 -
服务请求:Servlet初始化完成,容器就会调用它的
service()
方法来处理客户端的请求。service()
方法是Servlet的中心调度方法,它根据请求的类型(如GET、POST等)决定调用doGet()
、doPost()
等具体的处理方法。Servlet可以处理多个请求,每次请求都会创建一个新的线程或使用线程池中的线程来执行。 -
销毁(通过
当Servlet即将被容器卸载或Web应用即将被停止时,容器会调用Servlet的destroy()
方法):destroy()
方法。destroy()
方法用于释放Servlet占用的资源,如关闭数据库连接、停止运行的线程等。这个方法只会被调用一次,在Servlet实例被垃圾收集器回收之前执行。 在destroy()
方法执行之后,Servlet实例会很快被JVM的垃圾回收器回收,释放内存资源。
Servelt运行原理:
Servlet运行原理是由Web服务器调用的。首次访问浏览器发送HTTP请求时,web容器读取请求信息,包括请求头和请求体。请求头包含请求的元数据,如请求方法(GET、POST等)、URL、协议版本等;请求体则包含请求发送的数据,如表单提交的数据。服务器响应时,会生成响应体和响应头,其中响应体是服务器返回给客户端的数据,通常是HTML页面、图片、视频等;响应头包含响应的元数据,如状态码、内容类型等。
在Servlet编程中,开发者会编写实现类并重写service方法(Serlvet API 提供的service方法),该方法定义为service(ServletRequest req, ServletResponse res)。
这个方法的作用是接收并处理请求,从ServletRequest对象中获取请求信息,并将处理后的响应信息通过ServletResponse对象输出。开发者需要在service方法中编写代码来处理请求,比如获取请求参数、执行业务逻辑等,并在处理完请求后,通过ServletResponse对象来设置响应状态码、响应头以及发送响应体。