瞬间
-
-
Tomcat中这三个StandardContext、ApplicationContext、ServletContext都是干什么的?对这三个Context的描述可能还是有点不理解,用一个餐厅的比喻来理解这三个概念的区别和协作方式。
🍽️ 场景:Tomcat 是一家餐厅
1.
StandardContext
:后厨管理系统角色:餐厅的 后厨总监(负责所有核心运营)。
功能:
管理厨师(Servlet)、服务员(Filter)、食材(资源路径)。
记录菜单(
web.xml
配置)。控制餐厅的营业状态(启动/停止)。
特点:
顾客看不到他,但他才是真正的“幕后大佬”。
🔧 例子:
后厨总监决定:哪些厨师做哪些菜(URL 映射到 Servlet)。
食材存放在哪里(
WEB-INF/classes
和WEB-INF/lib
)。
2.
ApplicationContext
:餐厅经理角色:后厨总监的 公开代言人,直接对接顾客需求。
功能:
对外提供菜单(
getResource()
)。接受顾客的特殊要求(动态注册 Filter/Servlet)。
管理餐厅的公共信息(如今日特价=
getInitParameter()
)。
特点:
顾客以为经理就是“最高负责人”,实际他需要和后厨总监沟通。
🎯 例子:
顾客问经理:“有没有番茄酱?” → 经理去后厨系统查 (
ctx.getResource("/ketchup.txt")
)。“我想定制一道菜” → 经理协调后厨动态添加 (
ctx.addServlet()
)。
3.
ServletContext
:餐厅的菜单和客服电话角色:顾客能直接接触的 标准化接口。
功能:
提供统一的菜单(所有顾客看到的都一样)。
接受投诉或反馈(
setAttribute("feedback", "汤太咸")
)。提供外卖服务(静态资源访问)。
特点:
无论后厨换厨师(Tomcat 升级)还是经理换人(ApplicationContext
实现变化),菜单格式(接口)不变。
📞 例子:
顾客通过菜单(ServletContext
):点一份披萨(访问
/pizza
路径)。查今日特价(
ctx.getInitParameter("discount")
)。
🎭 协作流程(顾客点餐)
顾客(浏览器)打开菜单(
ServletContext
)点餐:/order?dish=pasta
。菜单 将请求转给 餐厅经理(
ApplicationContext
)。经理 查询 后厨系统(
StandardContext
):找到负责
pasta
的厨师(Servlet)。检查是否需要先过滤(如验证顾客权限 = Filter)。
后厨总监 调度厨师做菜,最终结果通过经理返回给顾客。
分享
-
感觉记忆力变差了,刚记完的笔记过了一会儿就忘了。
分享
-
研究Java漏洞的利用链的时候,需要用到低版本Java,用的scoop里面没有低版本的1.8,于是自己Fork了Scoop Bucket Template,用这个写了JDK 8u41的下载模板,Bucket地址:https://github.com/1dreamGN/MyBucket
分享