您的位置:首页 > 其它

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
(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了对象,并且初始化了,变更了的内容要下一个重新载入的时候再起作用),结束应用。下一次再次发送请求的时候就会重新开始上述的过程。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: