• Servlet生命周期


    Servlet 生命周期总述

    1. 调用init()方法     初始化Servlet对象
    2. 调用service()方法  处理用户请求
    3. 调用destory()方法  销毁Servlet对象,释放资源
    

    生命周期测试(IDEA内)

    创建新的project和module


    2

    在src下建package用于存放java代码,web下建一个lib文件夹用于存放第三方包

    目录结构如下

    3

    写servlet程序并配置web.xml文件

       + 在src的包下新建一个类ServletTest
       + 该类继承HttpServlet
       + 编写代码如下(默认ctrl+o重写方法)
    
            package com.szx.servlet;
            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 ServletTest extends HttpServlet {
                public ServletTest(){
                    System.out.println("这是构造方法");
                }
                protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
                    System.out.println("这是doGet方法");
                }
                protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
                    super.service("这是service方法");
                }
                public void destroy() {
                    System.out.println("这是destroy方法");
                }
                public void init() throws ServletException {
                    System.out.println("这是init方法");
                }
            }
    

    配置web.xml文件并运行

    4

    然后运行服务器, 默认会得到如下画面

    5

    这是默认的 index.jsp 页面, 我们在地址栏后面添上servletTest

    6

    返回控制台查看结果

    7

    关闭服务器 查看结果

    8

    我们可以看出方法执行的顺序:
    构造方法--->init()方法--->service()方法--->destroy()方法
    但是我们重写的doGet()方法并没有被执行 ,这是为什么呢
    其实我们在重写service()方法的时候,HttpServlet中的service()方法已经失效,而service方法有着调度请求的作用,因此重写service方法后,doGet()或者doPost()方法将不再被执行
    如果想要继续执行doGet()或者doPost()方法,则需要在重写完service方法后调用父类的service方法

    9

    然后重新运行即可查看到生命周期

    10

  • 相关阅读:
    leetcode:655. 输出二叉树
    leetcode:763. 划分字母区间
    leetcode:3. 无重复字符的最长子串
    leetcode:2. 两数相加
    leetcode每日一题:409. 最长回文串
    leetcode:1381. 设计一个支持增量操作的栈
    leetcode:1380. 矩阵中的幸运数
    [数据结构] 迷宫问题(栈和队列,深搜和广搜)
    [数据结构] N皇后问题
    [2011山东ACM省赛] Sequence (动态规划)
  • 原文地址:https://www.cnblogs.com/xun-/p/12732522.html
Copyright © 2020-2023  润新知