Java web三件套listener、filter、servelt原理解析

 更新时间:2020年03月11日 11:33:26   作者:spider_jx  
这篇文章主要介绍了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 通过 request body 传递参数;

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 提交),目的是资源的获取,读取数据;

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 使用String类型小数值转换为Long类型

    使用String类型小数值转换为Long类型

    这篇文章主要介绍了使用String类型小数值转换为Long类型操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • 详解Spring mvc的web.xml配置说明

    详解Spring mvc的web.xml配置说明

    本篇文章主要介绍了Spring mvc的web.xml配置说明,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02
  • 关于String转Json的几种方式

    关于String转Json的几种方式

    这篇文章主要介绍了关于String转Json的几种方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • Java装饰者模式实例详解

    Java装饰者模式实例详解

    这篇文章主要介绍了Java装饰者模式,结合实例形式详细分析了装饰着模式的原理与java具体实现技巧,需要的朋友可以参考下
    2017-09-09
  • spring boot 使用Aop通知打印控制器请求报文和返回报文问题

    spring boot 使用Aop通知打印控制器请求报文和返回报文问题

    这篇文章主要介绍了spring-boot 使用Aop通知打印控制器请求报文和返回报文,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2018-04-04
  • java GUI编程之监听操作实例分析

    java GUI编程之监听操作实例分析

    这篇文章主要介绍了java GUI编程之监听操作,结合实例形式分析了java GUI编程监听操作的Button监听、TextField文本输入监听等相关操作技巧与注意事项,需要的朋友可以参考下
    2020-01-01
  • SpringBoot2.0解决Long型数据转换成json格式时丢失精度问题

    SpringBoot2.0解决Long型数据转换成json格式时丢失精度问题

    这篇文章主要介绍了SpringBoot2.0解决Long型数据转换成json格式时丢失精度问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • Java的字符串常量池StringTable详解

    Java的字符串常量池StringTable详解

    这篇文章主要介绍了Java的字符串常量池StringTable详解,JVM为了提高性能和减少内存开销,在实例化字符串常量的时候进行了一些优化,为 了减少在JVM中创建的字符串的数量,字符串类维护了一个字符串池,需要的朋友可以参考下
    2023-11-11
  • Java Swing CardLayout卡片布局的实现示例

    Java Swing CardLayout卡片布局的实现示例

    这篇文章主要介绍了Java Swing CardLayout卡片布局的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • Spring Boot配置application.yml及根据application.yml选择启动配置的操作方法

    Spring Boot配置application.yml及根据application.yml选择启动配置的操作

    Spring Boot中可以选择applicant.properties 作为配置文件,也可以通过在application.yml中进行配置,让Spring Boot根据你的选择进行加载启动配置文件,本文给大家介绍Spring Boot配置application.yml及根据application.yml选择启动配置的操作方法,感兴趣的朋友一起看看吧
    2023-10-10

最新评论