简介


Servlet是一种用于构建Web应用程序的Java程序。它们在Web服务器上运行,并处理从客户端发来的请求。Servlet常用于生成动态网页内容、处理表单数据、与数据库交互等。Servlet通过Java编写,可以与其他Java类和库进行交互,从而实现各种功能。它们可以被部署到各种支持Java的Web服务器上,如Tomcat、Jetty等。Servlet通常用于构建复杂的Web应用程序,如电子商务网站、社交媒体平台等。通过使用Servlet,开发人员可以轻松地创建强大的、交互式的Web应用程序。

Servlet快速入门


image-20240114211037975

Servlet生命周期


生命周期

对象的生命周期指一个对象从被创建到被销毁的整个过程

image-20240114211048753

Servlet运行中Servlet容器中(web服务器),其生命周期由容器来管理,分为4个阶段

  1. 加载和实例化:默认情况下,当Servlet第一次被访问时,由容器创建Servlet对象

  2. 初始化:在Servlet实例化之后,容器将调用Servlet的init()方法初始化这个对象,完成一些如加载配置文件、创建连接等初始化的工作。该方法只调用一次

  3. 请求处理每次请求Servlet时,Servlet容器都会调用Servlet的**service()**方法对请求进行处理。

  4. 服务终止:当需要释放内存或者容器关闭时,容器就会调用Servlet实例的**destroy()**方法完成 资源的释放。在destroy()方法调用之后,容器会释放这个Servlet?实例,该实例随后会被ava的 垃圾收集器所回收

代码实操

package com.itheima.web;

import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;
/**
* Servlet生命周期方法
*/
@WebServlet(urlPatterns = "/demo2",loadOnStartup = 1)
public class ServletDemo2 implements Servlet {

    /**
     *  初始化方法
     *  1.调用时机:默认情况下,Servlet被第一次访问时,调用
     *      * loadOnStartup: 默认为-1,修改为0或者正整数,则会在服务器启动的时候,调用
     *  2.调用次数: 1次
     * @param config
     * @throws ServletException
     */
    public void init(ServletConfig config) throws ServletException {
        System.out.println("init...");
    }

    /**
     * 提供服务
     * 1.调用时机:每一次Servlet被访问时,调用
     * 2.调用次数: 多次
     * @param req
     * @param res
     * @throws ServletException
     * @throws IOException
     */
    public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
        System.out.println("servlet hello world~");
    }

    /**
     * 销毁方法
     * 1.调用时机:内存释放或者服务器关闭的时候,Servlet对象会被销毁,调用
     * 2.调用次数: 1次
     */
    public void destroy() {
        System.out.println("destroy...");
    }
    public ServletConfig getServletConfig() {
        return null;
    }

    public String getServletInfo() {
        return null;
    }


}

Servlet体系结构


体系结构图:

image-20240114211157756

HttpServlet主要封装方法

  • doGet(HttpServletRequest request, HttpServletResponse response):

    • 用于处理HTTP GET请求。

    • 参数request包含了客户端请求的信息,如请求的URL、参数、头部信息等。

    • 参数response用于向客户端发送响应。

  • doPost(HttpServletRequest request, HttpServletResponse response):

    • 用于处理HTTP POST请求。

    • 参数request包含了客户端请求的信息,如请求的URL、参数、头部信息等。

    • 参数response用于向客户端发送响应。

  • doPut(HttpServletRequest request, HttpServletResponse response):

    • 用于处理HTTP PUT请求。

    • 参数request包含了客户端请求的信息,如请求的URL、参数、头部信息等。

    • 参数response用于向客户端发送响应。

  • doDelete(HttpServletRequest request, HttpServletResponse response):

    • 用于处理HTTP DELETE请求。

    • 参数request包含了客户端请求的信息,如请求的URL、参数、头部信息等。

    • 参数response用于向客户端发送响应。

urlPattern配置


  • Servlet 要想被访问,必须配置其访问路径 (urlPattern)

    1. 一个Servlet,可以配置多个urlPattern

      @WebServlet(urlPatterns = {"/demo1", "/demo2"})
      
    2. urlPattern 配置规则

      1. 精确匹配

        • 配置路径:@WebServlet("/user/select")

        • 访问路径:localhost:8080/web-demo**/user/select**

      2. 目录匹配

        • 配置路径:@WebServlet("/user/*")

        • 访问路径:

          • localhost:8080/web-demo**/user/aaa**

          • localhost:8080/web-demo**/user/bbb**

      3. 扩展名匹配

        • 配置路径:@WebServlet("*.do")

        • 访问路径:

          • localhost:8080/web-demo/aaa.do

          • localhost:8080/web-demo/bbb.do

      4. 任意匹配

        • 配置路径:

          • @WebServlet("/")

          • @WebServlet("/*")

        • 访问路径:

          • localhost:8080/web-demo/hehe

          • localhost:8080/web-demo/haha

        • / 和 /* 区别:

          当我们的项目中的Servleti配置了"/",会覆盖掉tomcat中的 DefaultServlet,.当其他的url-pattern都匹配不上时都会走这 个Servlet 当我们的项目中配置了“/*”,意味着匹配任意访问路径