zoukankan      html  css  js  c++  java
  • 006_Servlet_JSP——为什么使用inint()而不是直接采用构造方法创建Servlet?

    Servlet的创建是使用的new关键字,还是使用了反射,还是序列号?

    init()与destroy()内部是什么样子呢? 

    ghttpServelt只是对init()方法做了空实现,但是inint()有两个,一个是有参构造,一个是无参构造。

    init(***)调用了init().

    这两个方法有什么区别呢?

    init()是sun公司用来给开发者使用的。

    destroy() 方法只会被调用一次,在 Servlet 生命周期结束时被调用。destroy() 方法可以让您的 Servlet 关闭数据库连接、停止后台线程、把 Cookie 列表或点击计数器写入到磁盘,并执行其他类似的清理活动。在调用 destroy() 方法之后,servlet 对象被标记为垃圾回收。

    但是我这个destroy()方法我从来没有掉用过啊?这个是由Tomcat服务器调用的,当服务器关闭的时候,就会调用这个方法,销毁Servlet。

    另外httpSerlvet的父类GServlert对init(),与destroy()方法全是空实现,init()是空,服务器又是怎么创建了Servlet对象呢?

    后来我们就只写doGet()与doPost()方法,我们写的Servlet,是怎么从Service()跳转到了doGet()与doPost()呢?

    当浏览器发送请求到Servlet时,会直接调用走service(),但是我们可以在service(),方法中判断请求方法类型是get还是post,

    然后我们就可以从service(),跳转到doGet(),与doPost().而这些重复的代码,我们写了一个父类 GenericServlet进行了囊括。这样就不用再写init(),service(),destroy(),

    只专心写doGe(),与doPost()请求就行了。

    但是为什么当初Servlet接口要定义一个service()方法,直接定义两个doGet(),与doPost()方法不就行了吗?

    因为get常用于查询数据,post常用语提交数据。之所以定义一个Service()方法,可能是为了向上进行了抽取,为了方便服务器厂商定义方法。

    没想到事到如今,只剩下了get与post两种请求方法,事与愿违了。

    浏览器接受post相应与get相应的数据,处理的方式一样吗?

    应该是不一样,get请求的静态资源会缓存,但是post不会缓存。

    所以get常用来查询数据,post常用来提交数据。

  • 相关阅读:
    BZOJ 3744 Gty的妹子序列 分块+树状数组+主席树
    BZOJ 3744 Gty的妹子序列 分块+树状数组
    51nod 1850 抽卡大赛 (十二省联考模测) DP
    BZOJ 4127: Abs (树链剖分 线段树求区间绝对值之和 带区间加法)
    BZOJ 2157: 旅游 (树链剖分+线段树)
    BZOJ 2836: 魔法树 (树链剖分+线段树)
    BZOJ 3531: [Sdoi2014]旅行 (树剖+动态开点线段树)
    树状数组彻底入门,算法小白都看得懂的超详细解析
    点双联通分量(BCC)的正确姿势
    uoj30【CF Round #278】Tourists(圆方树+树链剖分+可删除堆)
  • 原文地址:https://www.cnblogs.com/pogusanqian/p/12380442.html
Copyright © 2011-2022 走看看