Servlet概述&servlet生命周期[JavaEE]

发布于:2022-11-28 ⋅ 阅读:(330) ⋅ 点赞:(0)

1 Servlet概述

Servlet是Server Applet的简称,意思为用Java编写的服务器端的程序.

它运行在web服务器中,web服务器负责Servlet和客户的通信以及调用Servlet方法。

Servlet的作用:

  1. 接收用户发送的请求数据

  2. 调用其他的java程序来处理请求

  3. 根据处理结果,将结果响应给客户端

2 Servlet创建和使用

1.创建一个类继承javax.servlet.http包下的HttpServlet

  • 因为我们现在是在本地操作,所以需要借用tomcat中的jar包(tomcat-api.jar)

  • 最终是不需要的,因为我们的java程序最终是部署到tomcat中运行的,tomcat中有这个jar包

  • jar包必须放在WEB-INF这个目录里面,所以我们在该目录下创建名字为lib的文件夹,用来放我们导入的jar包

46bfc0c540944941a39ba57a7f402683.png

0847927bbdff4354854c9de7f221539a.png

import javax.servlet.http.HttpServlet; 
// 创建类并继承HttpServlet 
public class LoginServlet extends HttpServlet { }

2.在web.xml文件中配置Servlet

   Web.xml文件:

  • xml指可扩展性标记语言,主要是存储数据,以特定的格式存储项目配置信息

  • Web.xml文件用于对web应用下的web资源进行配置,必须放在web应用目录WEB-INF目录下, 服务器在启动时会读取web.xml文件中的内容

    • 像servlet、过滤器、监听器等等都在web.xml文件中配置

由于客户端是通过URL地址访问web服务器中的资源,所以Servlet程序若想被外界访问,必须把servlet程序映射到一个URL地址上,这个工作在web.xml文件中使用<servlet>元素和<servlet-mapping>元素完成:

6081615529dd404eab4b43c5268d3a2e.png

<servlet>元素用于注册Servlet
<servlet-name>为生成的Servlet注册名称
<servlet-class>类的地址 服务器根据类的地址+反射机制动态获取类信息,创建对象
 
<servlet-mapping>映射一个已注册的Servlet的一个对外访问路径
<servlet-name>指定Servlet的注册名称
<url-pattern>指定Servlet的对外访问路径 
​
url-pattern配置模式:"/"代表当前web应用的根目录 
精确匹配:例如/test 访问http://127.0.0.1/项目名/test

3.运行Servlet程序

  • 通过浏览器访问http:localhost:8080/ 项目名/配置的url

b88bcc1c5e204c6da72f0058d243bec8.png

  • ip(找到计算机)+端口(找到计算机上的某一个程序,这里也就是找到服务器)+项目名(一个服务器中有可能部署了多个项目,所以需要通过名称找到项目)+配置注册的servlet的名称(找到对应的servlet访问地址)

3 Servlet程序执行流程

一次http请求发送到后端找到servlet程序,是按照一个特定的顺序调用方法的。

  • 构造方法 ---> init() ---> service() ---> destroy()

那么在哪规定的调用顺序呢?

在最上层定义了一个servlet接口(init,service,desteoy),所有的javaEE(实现了servlet接口的类),都会按照这个规范来执行。

7d6d26e7c6b5471ea90b4bb3b1241109.png

执行流程详解:

package com.ffyc.webback.servlet;
​
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
​
public class LoginServlet_back extends HttpServlet {
    /*
        1.创建阶段
     */
    public LoginServlet_back() {
        System.out.println("LoginServlet无参构造方法");
    }
    /*
        2.初始化阶段 
     */
    @Override
    public void init(ServletConfig config) throws ServletException {
        System.out.println("init:"+config.getInitParameter("n"));//init:jim
    }
    /*
        3.服务阶段
     */
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println(req);//org.apache.catalina.connector.RequestFacade@5219cfdb
        System.out.println(resp);//org.apache.catalina.connector.ResponseFacade@171b5bfc
        System.out.println("service");
    }
    /*
       4.销毁阶段
     */
    @Override
    public void destroy() {
        System.out.println("destroy");
    }
}

1.创建阶段(构造方法)

servlet对象是由服务器创建的,创建时有两种情况:

  • 默认情况下,当我们第一次向servlet发送请求时,由服务器创建此servlet对象,始终只创建一个,也就是只执行一次

    294e896361044c46a9a5e99516a3a04a.png

2496b4ee0dcd4dce9ebfb2d41efec921.png

  • 在web.xml文件中通过<load-on-startup>0</load-on-startup>根据需要来设置什么时候创建servlet对象(大于等于0,在服务器启动时创建,小于0,第一次访问时创建)

b3f16368e74a476d8789889047887188.png

2.初始化阶段(init(ServletConfig config))

  • 在servlet创建成功后(也就是构造方法执行后)立即执行,初始化一些参数配置, 只执行一次

  • ServletConfig参数,用来封装servlet配置信息,我们可以在web.xml中配置,并通过config.getInitParameter(""),来获取对应的值,也就是通过参数读取配置信息

3.服务阶段(service())

  • service是为前端提供服务的,一旦有客户端请求,就会执行service(),提供服务

  • HttpServletRequest 表示请求,封装请求数据;HttpServletResponse 表示响应,它们都是接口,tomcat想要运行java程序,就要去写具体的实现类来实现该接口

4.销毁阶段(destroy())

  • 当服务器关闭时,在servlet真正销毁之前,服务器会调用destroy(,)让我们的servlet程序可以去执行一些最终的操作

  • 例如:打印日志、将内存数据保存到硬盘等

4 Servlet生命周期

  • servlet在容器中开始实例化到实例销毁的整个过程

实例化:

  • 构造方法:第一次访问或者服务器启动时,只被调用一次,只有第一次访问Servelt时或服务器启动时创建Servlet实例。

初始化:

  • Init方法:只被调用一次,在Servlet实例创建好实例后立即执行, 用于执行一些初始化Servlet的操作。

就绪状态:

  • service方法:多次调用,每次请求都调用service方法,根据请求方式调用doGet()或doPost()方法。

  • 注意:此时不会重新创建servlet实例,也不会调用init()方法

销毁状态:

  • destroy:只被调用一次,在服务器关闭时调用,执行一些操作。

 

本文含有隐藏内容,请 开通VIP 后查看