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>