Java安全—Web 服务架构与技术组件概述
原创
\_Poseidon
\_Poseidon
绿洲安全
2026年10月14日 08:30
北京
在小说阅读器读本章
去阅读
在公众号小说中沉浸阅读
免责声明
由于传播、利用本公众号绿洲安全所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号绿洲安全及作者不为此承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢
无用,为了保持本系列完整性
01
web服务基本流程
web服务流程图
Web 服务流程图描述了客户端与服务器之间的交互。首先,用户通过浏览器发送请求到 Web 服务器。如果请求的是静态资源(如 HTML、CSS、图片),Web 服务器直接返回响应;如果是动态资源,Web 服务器将请求转发给应用程序服务器处理。应用程序服务器生成响应后,返回给 Web 服务器,最后 Web 服务器将响应发送回客户端,用户浏览器显示内容。这个过程帮助 Web 服务处理静态和动态内容的请求。
静态资源
静态资源是指在服务器上存储的、内容固定且不需要服务器端处理的文件。当客户端(如浏览器)请求这些资源时,服务器直接返回文件内容,而不进行任何计算或生成。常见的静态资源包括 HTML 文件、CSS 文件、JavaScript 文件、图片(如 JPEG、PNG、GIF)、字体文件、视频文件、音频文件、PDF 文件以及数据文件(如 JSON、XML)。这些资源通常由 Web 服务器(如 Apache 、Nginx)负责处理并返回给客户端,并且可以通过浏览器缓存或 CDN 加速加载速度,从而提升用户体验和访问效率。
动态资源
动态资源是指需要服务器端处理、生成或计算的内容,每次请求时可能会发生变化。与静态资源不同,动态资源的内容通常依赖于用户请求、输入数据、数据库查询或其他条件进行生成。常见的动态资源包括通过脚本语言(如 PHP、JSP)生成的 Web 页面、API 响应(如 JSON、XML)、数据库查询结果、用户输入处理结果以及动态生成的文件(如报表、PDF 文件)。动态资源的内容在每次请求时可能不同,需要服务器进行处理,因此相比静态资源,动态资源通常会消耗更多的计算资源和时间。
02
web服务器、中间件 、容器
web服务器:用来接收、解析、响应 HTTP 请求的软件或系统。
Web 中间件:是位于 Web 服务器和后端系统之间的一层软件。
Web 容器:是运行 Java Web 应用中 Servlet、JSP 的环境,负责管理它们的生命周期、处理请求和响应、调度过滤器和监听器等组件。
对比
Web 服务器、Web 容器和 Web 中间件有着不同的功能和作用,虽然它们之间有一定的重叠。Web 服务器主要负责处理静态资源的请求,如 HTML 文件、图片和 CSS 等,并将它们返回给客户端。它不具备处理动态内容的能力,通常将动态请求转发给 Web 容器进行处理。相比之下,Web 容器专注于动态内容的处理,负责管理 Java Web 应用程序(如 Servlet 和 JSP)的生命周期,并处理这些应用程序生成的动态内容。虽然 Web 容器也能处理一些静态资源,但它的主要功能是解析和执行动态请求。
Web 中间件则是连接 Web 服务器和 Web 应用程序的桥梁,它提供了更多的高级功能,比如负载均衡、缓存管理、会话管理等。Web 中间件不仅包含 Web 容器,还通常包括其他辅助服务,支持更复杂的企业级应用。与 Web 服务器和 Web 容器的简单功能不同,Web 中间件通常集成了更多的功能,能够支持多个应用程序和服务。
简而言之,Web 服务器侧重于静态内容的处理,Web 容器专注于动态内容的生成,而 Web 中间件则负责为 Web 应用提供更加全面的支持,涵盖从请求到响应的各个方面。
工具推荐
Wappalyzer 是一个开源的工具,专门用于检测和识别网站所使用的各种 Web 技术堆栈。它能够通过分析网站的 HTML 代码、HTTP 响应头以及 JavaScript 等信息,快速识别出网站所使用的技术,包括 Web 服务器、Web 框架、内容管理系统(CMS)、JavaScript 库、分析工具等。
web服务器
Web 服务器用于提供 HTTP 服务,负责接收客户端请求并返回信息。它能够处理 HTTP 协议,特别是响应针对静态页面或图片的请求。简而言之,Web 服务器可以用来托管静态网站。常见的 Web 服务器有 Apache、IIS 和 Nginx,它们通过解析客户端的请求,读取服务器上的静态资源(如 HTML、CSS、图片等),并将这些资源返回给客户端浏览器显示。
Servlet
Java Servlet 是一种运行在 Web 服务器或应用服务器上的 Java 程序,充当 Web 浏览器或其他 HTTP 客户端与服务器端数据库或应用程序之间的中间层。它依赖于 Web 服务器(如 Tomcat)提供的 Servlet 容器来运行和管理,负责接收客户端请求、处理业务逻辑,并生成动态网页内容作为响应返回给客户端。通过 Servlet,开发者可以收集网页表单中的用户输入、查询数据库中的数据、以及动态生成 HTML 页面。虽然其功能与传统的 CGI(公共网关接口)程序相似,但 Servlet 在性能和可扩展性方面表现更优,是构建动态 Web 应用的重要技术之一。
03
常见web服务器
Apache HTTP Server
开源、广泛使用的 Web 服务器,支持多种操作系统。以其稳定性和丰富的功能(如模块化结构)而著称,常用于托管静态网站和处理动态请求。
nginx
高性能、轻量级的 Web 服务器,广泛应用于高流量网站。Nginx 擅长处理大量并发连接,常用于反向代理、负载均衡和静态内容提供。
IIS
由微软开发的 Web 服务器,仅在 Windows 操作系统上运行。IIS 提供高集成性,适用于运行 .NET 应用程序和 Windows 环境中的 Web 服务。
LiteSpeed
高性能的商业 Web 服务器,提供出色的性能和安全性,适用于动态内容和 PHP 应用程序的处理,常用于高流量网站。
Caddy
现代化的 Web 服务器,特点是自动 HTTPS 配置。Caddy 采用简洁的配置和易用性,适用于开发者和小型网站。
Tomcat
主要作为 Java Servlet 和 JavaServer Pages(JSP)应用的 Web 服务器和容器,由 Apache 基金会开发。虽然它也是一个 Web 服务器,但更多用于 Java 应用的运行。
04
web中间件
Web 中间件是介于 Web 服务器与 Web 应用程序之间的软件组件或库,主要用于提供额外功能、处理请求,并为应用程序提供支持服务。它们通过实现身份验证、日志记录、路由控制、缓存管理、负载均衡等功能,增强了 Web 应用的性能、灵活性与可维护性。简单来说,中间件可以理解为安装在 Web 服务器上的应用程序,用于扩展和丰富 Web 服务器的功能,提升 Web 服务的整体效率和可操作性。
身份验证中间件
用于用户身份验证与权限控制,常见于需要登录的系统
示例:JWT(JSON Web Token )中间件、OAuth 中间件
日志记录中间件
记录请求与响应的信息,便于调试和追踪系统问题
示例:morgan(Node.js)、logging.middleware(Django)、Log4j(Java Web)
⚠️:Log4j远程代码执行漏洞
错误处理中间件
捕获和统一处理应用运行过程中出现的错误,提升系统稳定性
示例:Express 的 error-handling middleware、Flask 的 errorhandler
请求解析中间件
请求解析中间件
将原始 HTTP 请求解析为可用的数据格式,如 JSON 或表单数据
示例:body-parser(Express)、request.form(Flask)、Fastjson(Java)
⚠️:Fastjson反序列化漏洞
静态资源中间件
用于处理静态文件(如图片、CSS、JS),提升响应效率
示例:express.static、Django 的 WhiteNoise
跨域中间件(CORS)
处理浏览器的跨域资源共享问题,允许前端访问不同源的资源
示例:cors(Express)、Django CORS Headers
缓存中间件
减少数据库访问频率,提高系统响应速度
示例:Redis 缓存中间件、Flask-Caching
路由中间件
根据请求路径分发至不同的处理函数或控制器
示例:Express 的 Router、Flask 的 Blueprint
05
web容器
Web 容器是为 Web 应用程序组件(如 JSP 和 Servlet)提供运行环境的软件,它是中间件的一部分,负责解析和执行动态内容。Web 容器管理着应用程序的生命周期,并处理客户端的请求和响应。以 Tomcat 为例,它能够解析 JSP 和 Servlet,因为内部包含了专门的 JSP 容器,处理 JSP 页面的编译和执行。Web 容器的主要功能包括请求和响应管理、Servlet 生命周期管理、会话管理以及多线程支持。通过这些功能,Web 容器为动态 Web 应用程序提供了一个稳定且可扩展的运行环境。
Apache Tomcat
Apache Tomcat 是一个开源的 Java Web 容器,广泛用于运行 Java Servlet 和 JavaServer Pages (JSP)。它提供了支持 Servlet 和 JSP 的运行环境,是最流行的 Java Web 容器之一。
Jetty
Jetty 是一个轻量级、快速的 Java Web 容器,特别适用于嵌入式系统。它支持 Servlet 和 JSP,并且可以轻松集成到其他 Java 应用程序中。
JBoss/WildFly
JBoss(现更名为 WildFly)是一个全功能的 Java EE 应用服务器,除了支持 Servlet 和 JSP,还支持 EJB、JPA 等 Java EE 技术。WildFly 提供了完整的企业级解决方案,适用于大规模企业应用。
GlassFish
GlassFish 是一个开源的 Java EE 容器,支持 Java EE 标准,包括 Servlet、JSP、EJB 和其他技术。它是 Oracle 官方提供的 Java EE 参考实现,广泛用于企业级应用。
WebLogic
WebLogic 是 Oracle 提供的商业级 Java EE 应用服务器,除了支持 Servlet 和 JSP,还包括对 EJB、JMS 等 Java EE 组件的全面支持。WebLogic 常用于大型企业级应用,具有高可用性和强大的管理功能。
WebSphere
IBM 的 WebSphere 是一个商业级 Java EE 应用服务器,提供企业级应用的支持,包括 Servlet、JSP、EJB 等。WebSphere 具有强大的管理控制台和事务管理功能,适用于大规模企业应用。
06
Java Web 的核心组件:Servlet, JSP,Filter,Listener
java EE 规范定义的核心组件(底层基础)
这些组件是 Java Web 开发的“官方标准”,由 Java EE 规范定义,所有 Web 容器(如 Tomcat )都必须支持,是构建 Web 应用的基石。
- Servlet(服务器小程序 )
核心作用:处理客户端的 HTTP 请求(如 GET/POST),执行逻辑(如查询数据库、处理参数),并生成动态响应(如 JSON、HTML)。
地位:Java Web 的“心脏”,所有请求最终都会通过 Servlet 处理(即使是框架封装的场景,如 Spring MVC 的 DispatcherServlet 本质也是 Servlet)。
示例:自定义 UserServlet 处理用户登录请求,解析用户名密码,验证后返回登录结果。
- JSP(Java Server Pages)
核心作用:动态生成 HTML 页面,允许在 HTML 中嵌入 Java 代码(<% … %>),简化视图层开发。
本质:JSP 最终会被 Web 容器编译为 Servlet(.java → .class),本质是 Servlet 的“视图友好型”变种。
场景:早期用于生成动态网页(如用户中心页面、商品详情页),现在逐渐被前后端分离的前端框架(Vue/React)替代,但仍是传统 Java Web 的核心视图组件。
- Filter(过滤器)
核心作用:在请求到达 Servlet 之前或响应返回客户端之前,对请求/响应进行“拦截处理”(如权限校验、字符编码转换、日志记录)。
工作流程:请求 → Filter(拦截处理)→ Servlet(业务处理)→ Filter(拦截响应)→ 客户端。
示例:
LoginFilter:拦截未登录用户的请求,跳转到登录页;
EncodingFilter:统一设置请求/响应的字符编码为 UTF-8,解决中文乱码。
- Listener(监听器)
核心作用:监听 Web 应用中的“事件”(如 Servlet 上下文初始化、Session 创建/销毁、属性变化),并触发相应处理逻辑。
常见事件类型:
应用级事件(如 Web 应用启动/关闭);
会话级事件(如用户登录生成 Session、用户退出销毁 Session);
请求级事件(如请求对象创建/销毁)。
示例:
AppListener:在 Web 应用启动时初始化数据库连接池;
SessionListener:统计当前在线用户数量(Session 创建时+1,销毁时-1)。
业务分层核心组件(开发实践层)
在实际开发中,为了实现“高内聚、低耦合”,通常会将代码按功能分层,这些分层组件是业务实现的核心。
- JavaBean(数据载体)
核心作用:封装数据的简单 Java 类,通常用于存储请求参数、数据库查询结果等数据。
特点:
类是公共的(public);
有默认无参构造方法;
属性私有化(private),通过 getter/setter 访问。
示例:User 类封装用户信息(id、username、password),Order 类封装订单信息(orderId、productName、price)。
- DAO(Data Access Object,数据访问对象)
核心作用:专门负责与数据库交互,封装数据库操作(如增删改查),隔离业务逻辑与数据访问细节。
实现:通常基于 JDBC、MyBatis、JPA 等技术,提供 getById()、save()、update() 等方法。
示例:UserDao 类提供 login(String username, String password) 方法,内部通过 JDBC 执行 SQL 查询用户是否存在。
- Service(业务逻辑层)
核心作用:处理核心业务逻辑(如登录验证、订单生成、库存扣减),调用 DAO 层获取数据,协调多个 DAO 完成复杂业务。
特点:不直接操作数据库,而是通过 DAO 层间接操作;是事务管理的主要载体(如订单创建+库存扣减需要在同一个事务中)。
示例:OrderService 的 createOrder(Order order) 方法,调用 OrderDao.save(order) 保存订单,同时调用 StockDao.reduce(stockId, quantity) 扣减库存。
- Controller(控制器 ,MVC 模式核心)
核心作用:接收客户端请求,解析参数,调用 Service 层处理业务,最后决定返回什么响应(如跳转到哪个页面、返回什么 JSON 数据)。
地位:MVC(Model-View-Controller)模式的“调度中心”,连接视图层(View)和模型层(Model,即 Service/DAO)。
示例:Spring MVC 的 OrderController 类,通过 @PostMapping(\"/order\") 接收下单请求,调用 orderService.createOrder(...),返回订单创建结果的 JSON。
运行环境核心组件
这些组件是 Web 应用的“运行容器”和“基础设施”,确保上述所有组件能正常工作。
- Web 容器(Servlet 容器)
核心作用:提供 Servlet、JSP、Filter、Listener 的运行环境,管理它们的生命周期(初始化、调用、销毁),并处理底层网络通信(如 HTTP 协议解析、Socket 连接)。
常见实现:Tomcat(最主流)、Jetty、JBoss、WebLogic 等。
- 配置文件
核心作用:配置 Web 应用的基础信息(如 Servlet 映射、Filter 拦截规则、数据库连接参数),无需硬编码。
常见文件:
web.xml:传统配置文件,定义 Servlet 映射、Filter、Listener 等;
注解配置:现代开发中常用(如 @WebServlet、@WebFilter)替代 web.xml;
数据库配置文件(如 jdbc.properties):存储数据库 URL、用户名、密码。
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论