zoukankan      html  css  js  c++  java
  • Servlet生命周期

    package com.zs.servlet;
    
    import javax.servlet.*;
    import javax.servlet.annotation.WebServlet;
    import java.io.IOException;
    /*新建一个类实现Servlet接口并实现接口中的方法,可以看到有五个方法,我们学习Servlet生命周期
    * 只需要看init(),service(),destroy()方法*/
    @WebServlet("/aaa")
    /*这里的@WebServlet("/虚拟路径"),通过这样的写法,就可以直接设置虚拟路径,不需要配置文件了,比较方便*/
    public class ServletDemo implements Servlet {
        @Override
        public void init(ServletConfig servletConfig) throws ServletException {
    //        被创建时执行该方法,只执行一次,用来创建servelt
            System.out.println("我被创建了");
        }
    
        @Override
        public ServletConfig getServletConfig() {
    //        这个方法我们不关心
            return null;
        }
    
        @Override
        public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
    //        执行servlet的内容
            System.out.println("执行一次servelt服务");
        }
    
        @Override
        public String getServletInfo() {
            return null;
        }
    
        @Override
        public void destroy() {
    //      执行关闭销毁方法,
            System.out.println("我被销毁了");
        }
    //    从上面我们可以看出,从init()被创建到destroy()被销毁,这就是servlet的生命周期
    }
    /*代码编写完毕,我们运行tomcat,然后再浏览器中输入虚拟路径localhost:8080/aaa,就会得到运行结果如下:
    * 我被创建了
    * 执行一次servelt服务
    * 然后每刷新一次浏览器,就会多执行一次service方法,但是init方法只会执行一次,也就是只创建了一次servlet,多次刷新后结果如下:
    * 我被创建了
    * 执行一次servelt服务
    * 执行一次servelt服务
    * 执行一次servelt服务
    * 当我们关闭serlet服务器时,就会执行destory方法销毁这个servlet,,关闭服务器时,结果如下:
    * ...这里的日志文件就用...来替代了
    * 10-Apr-2019 19:15:19.181 信息 [main] org.apache.coyote.AbstractProtocol.pause Pausing ProtocolHandler ["http-nio-80"]
    * 10-Apr-2019 19:15:19.591 信息 [main] org.apache.coyote.AbstractProtocol.pause Pausing ProtocolHandler ["ajp-nio-8009"]
    * 我被销毁了
    * 10-Apr-2019 19:15:19.971 信息 [main] org.apache.catalina.core.StandardService.stopInternal Stopping service [Catalina]
    * 10-Apr-2019 19:15:20.011 信息 [main] org.apache.coyote.AbstractProtocol.stop Stopping ProtocolHandler ["http-nio-80"]
    * ...
    * 从上面可以知道,一个servelt的生命周期就是从init创建一直到destory销毁,中间的另外两个方法
    * getServeltConfig,getServletInfo根据名字我们可以看出是获取Servlet的配置信息和Servlet信息的,我们现在不需要了解
    * /

     接着我们学习一下Servelt的结构体系:

    之前我们已经 说过了,Servelt是一个接口,既然是接口就会有实现类,它有两个子类GenericServelt类和HttpServelt类,这两个类都是抽象类

    GenericServelt  抽象类,需要重写service方法,

    package com.zs.servlet;
    
    import javax.servlet.GenericServlet;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import java.io.IOException;
    
    public class GenericServletDemo extends GenericServlet {
        @Override
        public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
            /*从方法名我们可以看出,GenericServlet抽象类方法实现了Servlet接口的方法,并对Servelt接口的四个方法进行了重写,留下抽象方法service给我们实现,简化了代码*/
        }
    }

    HttpServlet     抽象类,对Http进行了封装,进行简化操作,doGet(),dopost()

    package com.zs.servlet;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    /*再idea中提供了一个快捷方式,直接在新建中找到servelt,然后输入类名就会自动生成下面代码*/
    @WebServlet("/aaa")
    public class ServletHttpDemo extends HttpServlet { 
        /*我们可以看出该类继承的HttpServelt抽象类中有两个抽象方法,分别是dopost,doget,
        再之前学习Html时,我们学习过form表单有两种提交方式,分别是post和get,这两种提交方式就对应着两种方法,
        当提交方式为post时,就执行dopost方法,当提交方式为get时,就调用doget方法*/
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
        }
    }
  • 相关阅读:
    oracle数据库的增长改查
    Delete、truncate、drop删除数据的区别
    oracle数据库分页查询
    Sql语句中的null值
    RestEasy 3.x 系列之三:jsonp
    跨域请求解决方法(JSONP, CORS)
    JdbcUtils 系列1
    RestEasy 3.x 系列之一:Hello world
    JAVA中int、String的类型转换
    struts2 的验证框架validation如何返回json数据 以方便ajax交互
  • 原文地址:https://www.cnblogs.com/Zs-book1/p/10685504.html
Copyright © 2011-2022 走看看