美文网首页
servlet 3.1 servlet 生命周期

servlet 3.1 servlet 生命周期

作者: 长脖子树 | 来源:发表于2017-06-01 19:36 被阅读0次

    servlet的生命周期一般包含4个阶段

    1、加载和实例化

    servlet容器负责加载和实例化 servlet

    2、初始化

    init() 方法初始化servlet 对象,只能调用一次

    3、处理请求

    servlet 容器调用service()方法处理请求,request 方法获取客户端相关信息和请求信息,response 方法设置响应信息。
    由service方法调用对应的方法如doGet 、doPost

    4、服务终止

    destroy 方法,释放该servlet实例所使用的资源,只能调用一次

    注意事项

    1、不要使用servlet实例变量,否则坑你产生线程安全问题。
    2、不要用init()方法获取数据库连接
    3、@WebServlet(urlPatterns = "/ServletOne",loadOnStartup = -1)
    Java EE中 loadOnStartup默认为-1;即servlet 不随容器启动而加载
    loadOnStartup 为非负数时,servlet 岁容器启动而加载,且数字越小优先级越高。

    关于servlet的service() 方法

    在学习Servlet的过程中,我们大多时候编码都是直接继承HttpServlet这个类,并且重写doGet ,doPost,但是查看Api时我们会发现Servlet接口 ,GenericSevlet抽象类 以及HttpServlet类中都有service方法,那么为什么我们继承HttpSevlet类时不要重写service 而要重写doGet doPost呢?service的作用是什么捏??
    Servlet中,service方法是一直存在的,因为最高层的接口Servlet(像HttpServlet等具体的servlet都是直接或者间接实现了这个接口)里面就有这个方法,所以不管是怎样的servlet类,都有service方法,没有service就不能称为一个Servlet了。
    而对于service方法,一般来说这个方法是不需要重写的,因为在HttpServlet中已经有了很好的实现,它会根据请求的方式,调用doGet,doPos以及其他的doXXXt方法,也就是说service是用来转向的,所以我们一般写一个servlet,只需要重写doGet或者doPost就可以了。如果重写了service方法,那么servlet容器就会把请求交给这个方法来处理,倘若你重写的service方法没有调用doXXX,即使你在Servlet中又重写了其他doGet doPost等也是不回被调用的 因为Servlet的service被自动调用(就像init destory一样),所以如果你由于某种需要,需要重写service方法,并且更具不同的method调用doPost doGet等时,就要在末尾加上一句super.service(),这样就可以解决问题了。
    参考链接

    相关文章

      网友评论

          本文标题:servlet 3.1 servlet 生命周期

          本文链接:https://www.haomeiwen.com/subject/nwgefxtx.html