Java web三件套listener、filter、servelt原理解析
一、listener、filter、servelt的执行顺序和生命周期
1、启动顺序
想知道web三大件的启动顺序其实只需要查看启动日志就好了,启动顺序为:listener、filter、servelt
2、生命周期
查看结束和运行时候的日志不难发现:
1>listener的生命周期:一直从程序启动到结束,其中:
- ServletRequestListener(用来监控session的创建,销毁等):每次访问一个Request资源前,都会执行requestInitialized()方法,方法访问完毕,都会执行requestDestroyed()方法。
- ServletRequestListener(用于监控servlet上下文request):每次调用request.getSession(),都会执行sessionCreated()方法,执行session.invalidate()方法,都会执行sessionDestroyed()方法。
- ServletRequestAttributeListener(用于监控request中的attribute的操作):每次调用request.setAttribute()都会执行attributeAdded()方法,如果set的key在request里面存在,就会执行attributeReplacerd()方法,调用request.removeAttribute()方法,都会执行attributeRemoved()方法。
2>Filter生命周期:程序启动调用Filter的init()法(永远只调用一次,具体看启动日志),程序停止调用Filter的destroy()方法(永远只调用一次,具体看关闭日志),doFilter()方法每次的访问请求如果符合拦截条件都会调用(程序第一次运行,会在servlet调用init()方法以后调用,不管第几次,都在调用doGet(),doPost()方法之前)。
3>Servlet生命周期:程序第一次访问,会调用servlet的init()方法初始化(只执行一次,具体看日志),每次程序执行都会根据请求调用doGet()或者doPost()方法,程序停止调用destory()方法(具体看结束日志)。
二、http协议中get请求和post请求区别
1、post更加安全不会作为url的一部分,不会被缓存、保存在服务器日志、以及浏览器浏览记录中)
2、GET把参数包含在URL中,POST通过requestbody传递参数;
3、post发送的数据更大(1>http协议并未规定get和post的长度限制;2>get的最大长度限制是因为浏览器和web服务器限制了URL的长度;3>不同的浏览器和web服务器,限制的最大长度不一样;4>要支持IE,则最大长度为2083byte,若支持Chrome,则最大长度8182byte);
4、post能发送更多的数据类型(get只能发送ASCII字符);
5、get比post快;(其一post请求包含了很多请求头,也就是说post需要在请求的body部分包含数据;其二post在真正接收数据之前会先将请求头发送给服务器进行确认,然后才真正发送数据(三次握手);其三get会将数据缓存起来,而post不会;其四post不能进行管道化传输);
5、post用于修改和写入数据,get一般用于搜索排序和筛选之类的操作(淘宝,支付宝的搜索查询都是get提交),目的是资源的获取,读取数据;
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。