JAVA-EE解析servlet生命周期的几个方法------JAVA入门基础教程

发布于:2023-09-22 ⋅ 阅读:(59) ⋅ 点赞:(0)

Servlet对象并不是在服务器启动时完成创建的
服务器在启动的时候会解析web.xml文件
并且会把请求路径和类名放在一个map中
被请求的时候再通过反射机制创建对象
怎么让服务器启动就创建对象:在web.xml的servlet标签下加入load-on-startup
<load-on-startup>0</load-on-startup>即可
<load-on-startup>标签内填入的就是创建对象优先级
默认情况下,服务器启动并不会实例化servlet对象
用户发出第一次请求后
servlet对象就被实例化了,马上执行了init方法
刷新或是打开网页都会调用service方法,init方法和构造方法只会调用一次
侧面体现了我们的servlet对象是单例对象
我们的成员变量就得小心多线程并发问题了
用户在发送第二次第三次第四次请求的时候,servlet对象没有新建,而是调用了之前的servlet对象
servlet对象是单例的,但是不符合单例模式,我们称为假单例
因为servlet对象的创建我们程序员无法设置,真单例模式构造方法是私有化的
只要用户发送一次请求,service方法必定会被tomcat服务器调用一次,发送多少次就多少次service方法
关闭服务器的时候会执行servlet的destroy方法
只被调用一次
因为服务器需要清理这个对象占用的内存
方法执行完后销毁对象(因为该方法不是静态方法而是实例方法)
Servlet对象并不是在服务器启动时完成创建的
服务器在启动的时候会解析web.xml文件
并且会把请求路径和类名放在一个map中
被请求的时候再通过反射机制创建对象
怎么让服务器启动就创建对象:在web.xml的servlet标签下加入load-on-startup
<load-on-startup>0</load-on-startup>即可
<load-on-startup>标签内填入的就是创建对象优先级
默认情况下,服务器启动并不会实例化servlet对象
用户发出第一次请求后
servlet对象就被实例化了,马上执行了init方法
刷新或是打开网页都会调用service方法,init方法和构造方法只会调用一次
侧面体现了我们的servlet对象是单例对象
我们的成员变量就得小心多线程并发问题了
用户在发送第二次第三次第四次请求的时候,servlet对象没有新建,而是调用了之前的servlet对象
servlet对象是单例的,但是不符合单例模式,我们称为假单例
因为servlet对象的创建我们程序员无法设置,真单例模式构造方法是私有化的
只要用户发送一次请求,service方法必定会被tomcat服务器调用一次,发送多少次就多少次service方法
关闭服务器的时候会执行servlet的destroy方法
只被调用一次
因为服务器需要清理这个对象占用的内存
方法执行完后销毁对象(因为该方法不是静态方法而是实例方法)
package com.powernode.javaweb.servlet;

import jakarta.servlet.*;

import java.io.IOException;

public class AServlet implements Servlet
{
    public AServlet()
    {
        System.out.println("AServlet");
    }

    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("init");
    }

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

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("service");
    }

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

    @Override
    public void destroy() {
        System.out.println("destroy");
    }
}

 

package com.powernode.javaweb.servlet;

import jakarta.servlet.*;

import java.io.IOException;

public class AServlet implements Servlet
{
    public AServlet()
    {
        System.out.println("AServlet");
    }

    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("init");
    }

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

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("service");
    }

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

    @Override
    public void destroy() {
        System.out.println("destroy");
    }
}
<?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-name>aservlet</servlet-name>
        <servlet-class>com.powernode.javaweb.servlet.AServlet</servlet-class>
        <load-on-startup>0</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>aservlet</servlet-name>
        <url-pattern>/AServlet</url-pattern>
    </servlet-mapping>
    <servlet>
        <servlet-name>bservlet</servlet-name>
        <servlet-class>com.powernode.javaweb.servlet.BServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>bservlet</servlet-name>
        <url-pattern>/BServlet</url-pattern>
    </servlet-mapping>
</web-app>

 <?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-name>aservlet</servlet-name>
        <servlet-class>com.powernode.javaweb.servlet.AServlet</servlet-class>
        <load-on-startup>0</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>aservlet</servlet-name>
        <url-pattern>/AServlet</url-pattern>
    </servlet-mapping>
    <servlet>
        <servlet-name>bservlet</servlet-name>
        <servlet-class>com.powernode.javaweb.servlet.BServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>bservlet</servlet-name>
        <url-pattern>/BServlet</url-pattern>
    </servlet-mapping>
</web-app>

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