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常用来提交数据。