三大组件包含:Servlet、Filter、Listener Servlet已经多次使用,本章会对其做一个重点总结,并推荐一些Filter、Listener较好的博文,并总结相关重点。 基本的使用方法请自行百度。
1. Servlet
前面已经多次使用,可以看到,Servlet就是前端与后端交互的门户,接收请求,响应数据。
servlet被称为控制器,它接受Web请求,分发调用不同的逻辑或服务(service)完成一项事情,然后响应数据。
2. Filter
过滤器,顾名思义,就是对请求进行过滤操作的。 通过过滤,能够对请求进行拦截、处理等操作。
常用于实现url级别的权限访问,敏感词汇过滤,解决编码问题等等.
2.1 原理
Filter接口中有一个doFilter方法,当我们编写好Filter,并配置对哪个web资源进行拦截后,WEB服务器每次在调用web资源的service方法之前,都会先调用一下filter的doFilter方法,因此,在该方法内编写代码可达到如下目的:
- 调用目标资源之前,让一段代码执行。
- 是否调用目标资源(即是否拦截用户访问web资源)。
- 调用目标资源之后,让一段代码执行。
web服务器在调用doFilter方法时,会传递一个filterChain对象进来,filterChain对象是filter接口中最重要的一个对象,它也提供了一个doFilter方法,我们可以根据需求决定是否调用此方法,调用该方法,则web服务器就会调用web资源的service方法,即web资源就会被访问,否则web资源不会被访问。
2.2 推荐学习
推荐学习 Filter
2.3 重点总结
2.3.1 HttpServletRequest、ServletRequest与RequestFacade的关系
ServletRequest:这个是doFilter中request形参的类型。是接口
HttpServletRequest:这个是doPost中request形参的类型。是接口,继承ServletRequest
RequestFacade:这个是打印request形参出现的。是Facade模式对外提供的类,实现HttpServletRequest
结论: doPost中request形参跟doFilter中request形参是同一个RequestFacade
结论理所应当: 从浏览器传递过来的request经过一系列过滤之后,传递到servlet中,无论怎样过滤,自然也还是原来那个request对象。
想要进一步了解,请学习Facade模式
2.3.2 解决编码问题
Tomcat 8.0以上版本
- get请求不会有中文乱码问题
- post请求会有中文乱码问题
- 对于post请求页面,设置request.setCharacterEncoding(“UTF-8”)
对post请求页面编写过滤器,增加 request.setCharacterEncoding(“UTF-8”)
3. Listener
3.1 简介
Listener翻译为“监听器”,也就是:对某些对象进行监听。
监听对象的什么呢? 监听对象的生命周期
有什么用? 生命周期:就是对象从创建到销毁的一系列过程。 通过监听生命周期,能够在某些特定的时期(比如创建时、销毁时)进行操作
可监听对象包括?
3.2 推荐学习
这是我见过最好的Listener学习笔记。