Servlet执行原理和Servlet生命周期方法&生命周期详解

执行原理:

1.当服务器接收到客户端浏览器的请求后,会解析请求URL路径,获取访问的Servlet的资源路径
2.查找web.xml文件,是否有对应的"url-pattern"标签体内容。
3.如果有,则在找到对应的"servlet-class"全类名
4.tomcat会将字节码文件加载进内存,并且创建其对象
5.调用其方法

  • Servlet中的生命周期
package com.ailyt.servlet;

import javax.servlet.*;
import java.io.IOException;

public class ServletStudy1 implements Servlet {

    /**
     * 初始化方法
     * 在Servlet被创建,执行。只会执行一次
     * @param servletConfig
     * @throws ServletException
     */
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("init...");
    }

    /**
     * 获取ServletConfig对象
     * ServletConfig:Servlet的配置对象
     * @return
     */
    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    /**
     * 提供服务方法
     * 每一次Servlet被访问时,执行,执行多次
     * @param servletRequest
     * @param servletResponse
     * @throws ServletException
     * @throws IOException
     */
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("service....");
    }

    /**
     * 获取Servlet的一些信息,版本,作者等等...
     * @return
     */
    @Override
    public String getServletInfo() {
        return null;
    }

    /**
     * 销毁方法
     * 在服务器正常关闭,执行,执行一次
     */
    @Override
    public void destroy() {
        System.out.println("destroy....");
    }
}

image
image

  • Servlet中的生命周期
    • 被创建:执行init方法,只执行一次

      • Servlet什么时候被创建?
        • 默认情况下,第一次被访问的时候,Servlet被创建。
        • 可以配置执行Servlet的创建时机。
          • 在servlet的创建时机
          • 1.第一次被访问的时候创建
            • load-on-startup的值为负数
          • 2.在服务器启动的时候创建
            • load-on-startup的值为0或正整数
      • Servlet的init方法,只执行一次,说明一个Servlet在内存中只存在一个对象,Servlet是单例的
        • 多个用户同时访问的时候,可能存在线程安全问题。
        • 解决:尽量不要在Servlet中定义成员变量。即使定义了成员变量也不要对修改值
    • 提供服务:执行service方法,执行多次

      • 每次访问Servlet的时候,Servlet都会被调用一次
    • 被销毁:执行destroy方法,只执行一次

      • Servlet被销毁的时候执行。服务器关闭的时候,Servlet被销毁
      • 只有服务器正常关闭的时候才会正常执行
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <!-- 配置Servlet -->
    <servlet>
        <servlet-name>hello</servlet-name>
        <servlet-class>com.ailyt.servlet.ServletStudy1</servlet-class>

        <!--
         指定Servlet的创建时机
         1.第一次被访问的时候创建
         <load-on-startup>的值为负数
         2.在服务器启动的时候创建
         <load-on-startup>的值为0或正整数
         -->
        <load-on-startup>5</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
</web-app>
posted @   我滴妈老弟  阅读(38)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示