开发者社区> 问答> 正文

Servlet、ServletConfig、ServletContext 这几个

Servlet、ServletConfig、ServletContext 这几个重要对象的创建顺序一直没明白?

展开
收起
健东 2018-11-16 10:14:19 1785 0
1 条回答
写回答
取消 提交回答
  • java 数据分析 数据可视化 大数据

        1) Servlet接口:提供最基本的管理Servlet生命周期的功能,主要有init(构造)、service(执行服务)、destroy(析构)三大功能,因此Servlet接口是任何Servlet类的生命和希望;

        2) ServletConfig接口:提供最基本的查询Servlet配置信息的功能,主要有getServletName(获取当前Servlet注册名)、getInitParameter(获取Servlet初始参数)、getServletContext(获取Servlet环境句柄)等,但是它只是一个接口,因此里面没有ServletConfig对象,只是规定了该接口必须实现的功能;

        3) GnericServlet类:它是个真正的类,它实现了Servlet和ServletConfig接口,并且它是所有具体Servlet的框架类,所有Servlet类都是该类的子类(都继承自它),包括HttpServlet类,并且它包含真正的数据对象ServletConfig,可以通过ServletConfig接口中的各种方法获取该对象中的信息(即Servlet配置信息);

    1. 启动一个Servlet程序的步骤:整个过程都是由Web容器控制的,实际中不实现Servlet类的构造器(构造器是空的),生命周期完全用init、service和destroy控制

        1) 首先Web容器会读取web.xml配置信息并创建一个ServletConfig对象,将配置信息存在该对象中;

        2) 接着Web容器调用Servlet类的空的构造函数构造一个空的Servlet类对象(里面什么都没有初始化)将其实例化;

        3) 然后才是初始化,调用Servlet接口的init(config: ServletConfig)方法,将前面保存Servlet配置的ServletConfig对象作为参数传入init进行初始化,init中只有两句话:

    public void init(ServletConfig config) throws ServletException {

        this.config = config;
        this.init();

    }
             i. 第一句当然是初始化config对象;
             ii. 第二句不是调用基类的init函数,因为当前方法本身就是从Servlet接口继承来的方法,第二个无参的init方法是GenericServlet自己定义的方法,专门用来初始化自定义的数据成员(比如自己继承HttpServlet类实现了一个MyServlet类,里面自定义了一个数据成员String myName,而这样的数据成员的初始化就可以放在GenericServlet定义的无参init方法中;

        4) 接受请求创建request和response对象并传入service进行服务;

        5) 最后在一定条件下(关闭服务器、或主动关闭Servlet)调用destroy方法关闭并回收Servlet的空间;

    2019-07-17 23:14:55
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载