Servlet, Filter 和 Listener 的区别

本贴最后更新于 2949 天前,其中的信息可能已经沧海桑田

#Servlet
最原始的 Servlet 是在服务器上运行的小程序,他通过输出内容到客户端,由浏览器来呈现输出的内容。
一般我们能看到的是基于 html 格式的内容,也就是网页。当然也可以指定他的内容类型,http 报头等,实现文件的下载等等。

它的实现过程,一般为:

  1. 客户端组织本地需要的请求,比如页面输入,请求的内容等,提交到服务器。
  2. 服务器将请求 Servlet。
  3. Servlet 根据请求内容转发给具体的实现类。
  4. 实现类将反馈结果给 Servlet。
  5. Servlet 将结果发回客户端。

它所利用的设计模式为单例模式,需要保证实现类的 servlet 是无状态的。也就是说,不能拥有全局变量。否则可能造成预想不到的问题。

它的生命周期为:
1: 客户端请求该 Servlet;
2: 实例化并调用 init()方法初始化该 Servlet;
3: service() 或者根据请求方法不同调用 doGet(),doPost();
4: 结果返回。

#Filter
filter 功能使用户可以改变一个 request 和修改一个 response. Filter 不是一个 servlet,它不能产生一个 response,它能够在一个 request 到达 servlet 之前预处理 request,也可以在 response 离开 servlet 时处理 response.换种说法,filter 其实是一个“servlet chaining“(servlet 链).

包括
1: 在 servlet 被调用之前截获;
2: 在 servlet 被调用之前检查 servlet request;
3: 根据需要修改 request 头和 request 数据;
4: 根据需要修改 response 头和 response 数据;
5: 在 servlet 被调用之后截获;

你能够配置一个 filter 到一个或多个 servlet;单个 servlet 或 servlet 组能够被多个 filter 使用。
几个实用的 filter 包括:用户辨认 filter,日志 filter,审核 filter,加密 filter,符号 filter,能改变 xml 内容的 XSLT filter 等。

Listener

顾名思义就知道主要作用就是监听,通过在配置文件中注册监听实例,可以实现一些容器级别,session 级别的功能。
比如,当前在线人数的统计就可以通过 session 的创建,释放事件来统计。
也比如,一些 session 开始,结束需要释放或者 lock 的表等等。

目前根据系统的框架,可以在 web.xml,或者在这个里边配置的外部配置文件中,或者通过标记等配置。

可用的 listener 基础类型包括

可以具体应用场景,选择合适的 listener 来创建功能。

  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3194 引用 • 8214 回帖
  • 其他
    5 引用 • 31 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • 职场

    找到自己的位置,萌新烦恼少。

    127 引用 • 1708 回帖
  • Ruby

    Ruby 是一种开源的面向对象程序设计的服务器端脚本语言,在 20 世纪 90 年代中期由日本的松本行弘(まつもとゆきひろ/Yukihiro Matsumoto)设计并开发。在 Ruby 社区,松本也被称为马茨(Matz)。

    7 引用 • 31 回帖 • 253 关注
  • 设计模式

    设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。

    200 引用 • 120 回帖
  • 运维

    互联网运维工作,以服务为中心,以稳定、安全、高效为三个基本点,确保公司的互联网业务能够 7×24 小时为用户提供高质量的服务。

    151 引用 • 257 回帖 • 1 关注
  • Outlook
    1 引用 • 5 回帖 • 3 关注
  • ActiveMQ

    ActiveMQ 是 Apache 旗下的一款开源消息总线系统,它完整实现了 JMS 规范,是一个企业级的消息中间件。

    19 引用 • 13 回帖 • 681 关注
  • Angular

    AngularAngularJS 的新版本。

    26 引用 • 66 回帖 • 542 关注
  • QQ

    1999 年 2 月腾讯正式推出“腾讯 QQ”,在线用户由 1999 年的 2 人(马化腾和张志东)到现在已经发展到上亿用户了,在线人数超过一亿,是目前使用最广泛的聊天软件之一。

    45 引用 • 557 回帖 • 1 关注
  • Oracle

    Oracle(甲骨文)公司,全称甲骨文股份有限公司(甲骨文软件系统有限公司),是全球最大的企业级软件公司,总部位于美国加利福尼亚州的红木滩。1989 年正式进入中国市场。2013 年,甲骨文已超越 IBM,成为继 Microsoft 后全球第二大软件公司。

    107 引用 • 127 回帖 • 363 关注
  • WebClipper

    Web Clipper 是一款浏览器剪藏扩展,它可以帮助你把网页内容剪藏到本地。

    3 引用 • 9 回帖 • 5 关注
  • BAE

    百度应用引擎(Baidu App Engine)提供了 PHP、Java、Python 的执行环境,以及云存储、消息服务、云数据库等全面的云服务。它可以让开发者实现自动地部署和管理应用,并且提供动态扩容和负载均衡的运行环境,让开发者不用考虑高成本的运维工作,只需专注于业务逻辑,大大降低了开发者学习和迁移的成本。

    19 引用 • 75 回帖 • 662 关注
  • Maven

    Maven 是基于项目对象模型(POM)、通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理工具。

    186 引用 • 318 回帖 • 260 关注
  • GitLab

    GitLab 是利用 Ruby 一个开源的版本管理系统,实现一个自托管的 Git 项目仓库,可通过 Web 界面操作公开或私有项目。

    46 引用 • 72 回帖
  • Git

    Git 是 Linux Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

    211 引用 • 358 回帖
  • Thymeleaf

    Thymeleaf 是一款用于渲染 XML/XHTML/HTML5 内容的模板引擎。类似 Velocity、 FreeMarker 等,它也可以轻易的与 Spring 等 Web 框架进行集成作为 Web 应用的模板引擎。与其它模板引擎相比,Thymeleaf 最大的特点是能够直接在浏览器中打开并正确显示模板页面,而不需要启动整个 Web 应用。

    11 引用 • 19 回帖 • 381 关注
  • wolai

    我来 wolai:不仅仅是未来的云端笔记!

    2 引用 • 14 回帖
  • SEO

    发布对别人有帮助的原创内容是最好的 SEO 方式。

    35 引用 • 200 回帖 • 16 关注
  • Quicker

    Quicker 您的指尖工具箱!操作更少,收获更多!

    36 引用 • 155 回帖 • 1 关注
  • 招聘

    哪里都缺人,哪里都不缺人。

    189 引用 • 1057 回帖 • 1 关注
  • 小说

    小说是以刻画人物形象为中心,通过完整的故事情节和环境描写来反映社会生活的文学体裁。

    31 引用 • 108 回帖
  • 数据库

    据说 99% 的性能瓶颈都在数据库。

    345 引用 • 739 回帖
  • PostgreSQL

    PostgreSQL 是一款功能强大的企业级数据库系统,在 BSD 开源许可证下发布。

    22 引用 • 22 回帖 • 3 关注
  • Ant-Design

    Ant Design 是服务于企业级产品的设计体系,基于确定和自然的设计价值观上的模块化解决方案,让设计者和开发者专注于更好的用户体验。

    17 引用 • 23 回帖 • 1 关注
  • B3log

    B3log 是一个开源组织,名字来源于“Bulletin Board Blog”缩写,目标是将独立博客与论坛结合,形成一种新的网络社区体验,详细请看 B3log 构思。目前 B3log 已经开源了多款产品:SymSoloVditor思源笔记

    1063 引用 • 3455 回帖 • 166 关注
  • Anytype
    3 引用 • 31 回帖 • 13 关注
  • BND

    BND(Baidu Netdisk Downloader)是一款图形界面的百度网盘不限速下载器,支持 Windows、Linux 和 Mac,详细介绍请看这里

    107 引用 • 1281 回帖 • 28 关注
  • WebSocket

    WebSocket 是 HTML5 中定义的一种新协议,它实现了浏览器与服务器之间的全双工通信(full-duplex)。

    48 引用 • 206 回帖 • 296 关注