Servlet的生命周期
2012-05-02 04:07
309 查看
生命周期也就是怎么工作的,其实当你开启服务器的时候前3项都会依次被执行了。
1. 首先,触发点是用户发送了一个请求,然后就把classLoader加载进去。
2. 然后实例化一个对象(注意,对象只会在第一次接到客户端请求的时候创建,没有请求就不用new,而且只new一次,至始至终都用这样一个),由Tomcat来进行。务必记住,只有一个对象,以多线程的方式执行响应。
3. 然后init(ServletConfig),这个方法也只调用一次,由Tomcat来自动调用,我们在使用的时候不用管。程序员的工作是在web.xml文件中配置好响应的和servlet相关的参数就行,一个servlet对应一套配置信息,Tomcat会自动将一套配置信息封装成为一个ServetConfig类型的对象。
这个东西是怎么用的呢?在Servlet这个接口里面有一个init(ServletConfig)的方法,它会初始化配置信息(这些配置信息都装在web.xml文件中,每个servlet对应一套配置信息,而一个web.xml文件里面可以装很多套servlet的配置信息,分别对应一个class类和mapping信息),并将其封装成为一个类,这个所谓的配置信息类里面装了比如说对应的class文件名,一些参数的类似于键值的东西。
这样,你在程序里面的比如说doGet方法里面通过this.getServletConfig.getServletName()和this.getServletConfig.getInitParameter(String)等类似的方法,就可以获取相应的参数值。
在这里做一个建议,就是为了保证配置信息的正确,最好是从Tomcat提供的samples里面的web.xml文件里面去拷贝,而不是自己去敲代码。
总共有2个init方法,其中init(ServletConfig)不能被重写,它负责调用另一个什么都不干的init()方法,如果程序员想要做一些自己设定的初始化,那么就重写init()方法,这样直接就能被执行,也避免了重写init(ServletConfig)而没有写super.init(ServletConfig)而报空指针异常。暂时还理解得不够透彻,不过记住要重写的话就重写init()方法就行。
4. 然后就是处理请求,以多线程的方式,service(比如HttpServlet,那么先调用父类实现的service
至于这两个方法到底是怎么调用的,我现阶段的理解是:因为http协议本身就要发送get信息,所以默认调用的是doGet方法,但是如果有表单要提交,你在action后面的method用的是get就调用doGet,用的是post就调用doPost,但是总的来说doPost是一个更好的选择。更安全,可以支持更大的数据。
5. 最后是destroy(),如果你的web应用程序退出了,或者servlet子类发生了变更,然后重新导入,那么Tomcat就会调用destroy方法(注意,假如说destroy方法里面内容发生了变更,先是调用原来的内容,因为之前已经new了对象,并且初始化了,变更了的内容要下一个重新载入的时候再起作用),结束应用。下一次再次发送请求的时候就会重新开始上述的过程。
1. 首先,触发点是用户发送了一个请求,然后就把classLoader加载进去。
2. 然后实例化一个对象(注意,对象只会在第一次接到客户端请求的时候创建,没有请求就不用new,而且只new一次,至始至终都用这样一个),由Tomcat来进行。务必记住,只有一个对象,以多线程的方式执行响应。
3. 然后init(ServletConfig),这个方法也只调用一次,由Tomcat来自动调用,我们在使用的时候不用管。程序员的工作是在web.xml文件中配置好响应的和servlet相关的参数就行,一个servlet对应一套配置信息,Tomcat会自动将一套配置信息封装成为一个ServetConfig类型的对象。
这个东西是怎么用的呢?在Servlet这个接口里面有一个init(ServletConfig)的方法,它会初始化配置信息(这些配置信息都装在web.xml文件中,每个servlet对应一套配置信息,而一个web.xml文件里面可以装很多套servlet的配置信息,分别对应一个class类和mapping信息),并将其封装成为一个类,这个所谓的配置信息类里面装了比如说对应的class文件名,一些参数的类似于键值的东西。
这样,你在程序里面的比如说doGet方法里面通过this.getServletConfig.getServletName()和this.getServletConfig.getInitParameter(String)等类似的方法,就可以获取相应的参数值。
在这里做一个建议,就是为了保证配置信息的正确,最好是从Tomcat提供的samples里面的web.xml文件里面去拷贝,而不是自己去敲代码。
总共有2个init方法,其中init(ServletConfig)不能被重写,它负责调用另一个什么都不干的init()方法,如果程序员想要做一些自己设定的初始化,那么就重写init()方法,这样直接就能被执行,也避免了重写init(ServletConfig)而没有写super.init(ServletConfig)而报空指针异常。暂时还理解得不够透彻,不过记住要重写的话就重写init()方法就行。
4. 然后就是处理请求,以多线程的方式,service(比如HttpServlet,那么先调用父类实现的service
(ServletRequest req, ServletResponse res),这个service调用HttpServlet特有的service
(HttpServletRequest req, HttpServletResponse resp),然后这个service调用doGet或者doPost方法),doGet,doPost
至于这两个方法到底是怎么调用的,我现阶段的理解是:因为http协议本身就要发送get信息,所以默认调用的是doGet方法,但是如果有表单要提交,你在action后面的method用的是get就调用doGet,用的是post就调用doPost,但是总的来说doPost是一个更好的选择。更安全,可以支持更大的数据。
5. 最后是destroy(),如果你的web应用程序退出了,或者servlet子类发生了变更,然后重新导入,那么Tomcat就会调用destroy方法(注意,假如说destroy方法里面内容发生了变更,先是调用原来的内容,因为之前已经new了对象,并且初始化了,变更了的内容要下一个重新载入的时候再起作用),结束应用。下一次再次发送请求的时候就会重新开始上述的过程。
相关文章推荐
- servlet生命周期与工作原理
- Servlet 的生命周期
- Servlet的生命周期
- Servlet 生命周期、工作原理
- Servlet的概述 Servlet的生命周期 Servlet的相关的配置
- Servlet的生命周期
- Servlet框架基础和生命周期(结合源码)、destroy()的思考
- servlet的生命周期
- 说出Servlet的生命周期,并说出Servlet和CGI的区别。
- Servlet 生命周期、工作原理
- servlet的执行原理与生命周期
- Servlet第一篇【介绍Servlet、HTTP协议、WEB目录结构、编写入门Servlet程序、Servlet生命周期】
- Servlet生命周期与工作原理
- Servlet的生命周期
- Servlet生命周期详解
- Servlet工作流程和生命周期
- 第四天:servlet的生命周期和一些细节问题
- Servlet生命周期
- 说出Servlet的生命周期,并说出Servlet和CGI的区别
- servlet生命周期