02_Servlet——Servlet的生命周期、GET和POST请求的分发处理、通过继承HttpServlet实现Servlet程序、IDEA中创建Servlet程序、Servlet类的继承体系

一、Servlet的生命周期(初始化阶段、运行阶段、销毁阶段)

初始化阶段
1、执行 Servlet 构造器方法
2、执行 init 初始化方法
第一、二步,Servlet构造器 和 init()方法会在第一次访问Servlet程序时被调用
且init()方法在Servlet程序的整个生命周期中只会被调用一次

运行阶段
3、执行 service 方法
第三步, service()方法 每次访问的时候都会被调用。

销毁阶段
4、执行 destroy 销毁方法
第四步, 在 web 工程停止的时候调用

public class Servlet1 implements Servlet {
    
    
    public Servlet1() {
    
    
        //第一次访问的时候,创建Servlet程序时 会调用构造器方法
        System.out.println("1 构造器方法");
    }


    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
    
    
        //第一次访问的时候,创建Servlet程序时 会调用init()方法
        System.out.println("2 init初始化方法");
    }

    @Override
    public ServletConfig getServletConfig() {
    
    
        return null;
    }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
    
    
        //service方法每次访问的时候都会调用
        System.out.println("3 service方法");
    }

    @Override
    public String getServletInfo() {
    
    
        return null;
    }

    @Override
    public void destroy() {
    
    
        //在web工程停止的时候调用
        System.out.println("4 destory销毁方法");
    }
}

实例:

首次访问servlet程序,控制台打印结果:
第一次访问成功 (初始化阶段和运行阶段)
在这里插入图片描述

反复重新访问servlet程序(运行阶段)
初始化阶段在第一次访问过后就结束了,现在等于反复调用service()方法
在这里插入图片描述

停止servlet程序(销毁阶段)
调用destory()方法
在这里插入图片描述

二、GET 和 POST 请求的分发处理

为了区分 get请求 和 post请求 的分发处理 可以利用 servletRequest对象 中的 getMethod()方法

这里强制转换的原因:因为 httpServletRequest 的类型是 ServletRequest,getMethod()方法在它的子类中
ServletRequest类的子类型HttpServletRequest可以使用,里面就包含getMethod()方法

HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
    
    

        //为了区分get请求和post请求的分发处理 可以利用 servletRequest对象 中的 getMethod()方法
        HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;

        //获取请求的方式   返回值为POST或GET
        String method = httpServletRequest.getMethod();

        if ("GET".equals(method)) {
    
    
            doGet();
        } else if ("POST".equals(method)) {
    
    
            doPost();
        }
    }


    public void doGet() {
    
    
        System.out.println("GET请求");
    }

    public void doPost() {
    
    
        System.out.println("POST请求");
    }

为了方便看出效果,这里准备一张form表单来进行提交行为(请求方式为GET)

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
<!--        <form action="http://localhost:8080/06_servlet/hello" method="get">-->
<!--            <input type="submit"/>-->
<!--        </form>-->
    
        <form action="http://localhost:8080/06_servlet/hello" method="post">
            <input type="hidden" name="action" value="login"/>
            <input type="hidden" name="username" value="root"/>
            <input type="submit"/>
        </form>
    </body>
</html>

在这里插入图片描述


三、通过继承 HttpServlet 实现Servlet程序

一般在实际项目开发中,都是使用继承 HttpServlet 类的方式去实现 Servlet 程序。

Servlet类的代码:

public class HelloServlet3 extends HttpServlet {
    
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        System.out.println("HelloServlet3的Post方法");
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        System.out.println("HelloServlet3的Get方法");
    }
}

web.xml中的代码:

    <servlet>
        <servlet-name>HelloServlet3</servlet-name>
        <servlet-class>com.atguigu.servlet.HelloServlet3</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>HelloServlet3</servlet-name>
        <url-pattern>/hello3</url-pattern>
    </servlet-mapping>

四、使用 IDEA 创建 Servlet 程序

在这里插入图片描述

在这里插入图片描述

创建完成后记得配置web.xml文件

    <servlet>
        <servlet-name>Servlet2</servlet-name>
        <servlet-class>com.atguigu.servlet.Servlet2</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>Servlet2</servlet-name>
        <url-pattern>/servlet2</url-pattern>
    </servlet-mapping>

五、Servlet 类的继承体系

在这里插入图片描述
此图源于尚硅谷

猜你喜欢

转载自blog.csdn.net/qq_45657848/article/details/128860033
今日推荐