request继承结构-wrapper装饰类

本文探讨了Servlet中的request对象继承结构,包括ServletRequest和HttpServletRequest接口及其匿名实现类。接着详细解析了ServletRequestWrapper装饰类的工作原理,如何保存并调用被装饰者的原有方法。最后,分析了HttpServletRequestWrapper类,它是ServletRequestWrapper的子类,用于包装HttpServletRequest对象,并提供特有的包装方法。通过这些包装,可以方便地对请求对象进行扩展和定制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. request继承结构

ServletRequest(接口)

|-- HttpServletRequest(接口)

|-- 匿名实现类(xxx)  实例: request对象

2. ServletRequestWrapper装饰类

request对象 --> 被装饰者

ServletRequestWrapper--> 装饰类

 

1.ServletRequestWrapper装饰类 和 被装饰者(request对象)所属的类(xxx)实现了同一个接口(ServletRequest)

 

 

2.提供了构造方法允许将被装饰者传入并保存在了类的内部

3.对于不想改造的方法直接调用已有对象上的方法, 对于想要改造的方法直接进行改造(没有对任何方法进行改造), :

 

3. HttpServletRequestWrapper装饰类

request对象 --> 被装饰者

HttpServletRequestWrapper -- 装饰类

 

HttpServletRequestWrapper类继承了ServletRequestWrapper装饰类类, 所以HttpServletRequestWrapper也是一个装饰类!!

 

HttpServletRequestWrapper类没有直接去包装request对象, 而是先将当前构造方法中的request对象传给父类(ServletRequestWrapper), 让父类进行包装, 再继承父类中包装后的方法。

 

而对于自身独有的方法, 自己再进行包装: 通过父类提供的方法(super.getRequest()) 获取 包装后的request对象, 并强制转型为 HttpServletRequest, 并通过提供 _getHttpServletRequest 方法, 方便在当前类的内部使用, 代码如下:  

 

对于HttpServletRequestWrapper类中所有的方法, 直接调 super.getRequest() 对象 -- 即被父类包装后的request对象上的方法

也就是说, 对于HttpServletRequestWrapper装饰类, 是向将自己构造方法中的request对象传给父类(方便父类进行包装), 再通过super.getRequest(); 获取父类中包装的request对象(目的是保证自己和父类包装的是同一个request)

接下来对内部的方法进行包装, HttpServletRequestWrapper类中的方法分为两类: 第一类是通过父类继承过来的(父类对于这行方法已经进行包装), 第二类是自己独有的方法, 在自身类的内部进行包装!!

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值