web容器传统架构模型

ops/2024/11/14 4:06:49/

web容器是部署web网站的容器。一般有tomcat、Jetty等。

作用是对系统端口监听,接收http、https等网络请求,然后交由web程序处理得到响应信息进行返回。

一般默认监听一个80端口,特殊情况可以配置多个端口(一台服务器上面跑多个web容器等,不过这一般使用docker容器做内部端口映射。这种情况是微服务系统架构),然后通过nginx进行反向代理(目的是不暴露应用服务的真实ip,防止ddos攻击到应用服务器)

传统web项目都是一个web容器内部有多个项目,运行再一个JVM内,好处是可以统一资源,比如系统配置、对象共享(统一数据源,或者统一自定义资源对象)

传统框架是三层架构+bean容器,第一层是view层,用于动态生成静态页面,第二层是service层,用于逻辑处理,第三层是dao层,用于与数据库交互(查询数据或者持久化数据),bean容器是对于不同scope下,依赖注入不同的对象。

比如一次请求,他要查询数据并展示出来,那么他会先经过view层,封装请求参数,然后调用service层方法进行参数校验等逻辑处理,然后调用dao层方法查询数据,dao返回数据后,service在对返回数据封装,返回到view层,view层对数据、页面模板动态生成html返回给浏览器显示

(注意:jsp\jsf框架的xhtml等只是页面模板,通过el表达式来判断对于字段显示位置以及页面组件是否加载啥的)

为什么还有个bean容器,因为servlet是只有一个实例对象,view层处理是servlet这里处理的,调用service层方法时候,存在多线程问题(tomcat是一个请求分配一个线程处理),如果在servlet层只定义一个service对象,请求参数是service的属性,那么两个请求(线程)进来,这时候如果第一个先给service设置入参值(123),完了之后还没等处理完,第二个又进来设置(456),然后两个线程去查,结果查出都是参数为456的结果然后返回,这时候就发生了数据越权、错乱等问题。

所以就有了bean容器、CDI的概念,他定义了域,application/session/request 三个域,然后同一域下面,对象是一样的;

 service定义成requestScope,view层依赖注入service,这样就可以保证多次request拿到的service都是不一样的,拿取不同请求线程的service对象。这样线程一的查询和线程二的查询就在不同对象里面处理了。

session有状态 session无状态 是指 dao层对象的状态;一般资源session的管理(比如数据库session等),通过httpsessionLister,监听会话的创建与销毁,然后对应的创建、销毁数据库session(hebirnate或者其他jpa框架)   他是sessionscope域的

资源链接的创建、关闭 是applicationscope的  应用启动创建链接或者链接池,然后应用销毁就关闭链接(监听 servletListener)

然后view层的servlet注入service,  sevice要注入dao层各种资源session, dao层的实现依赖application环境的各种链接;这些对象注入使用beanManager管理 bean的创建使用beanfacotry实现。


http://www.ppmy.cn/ops/20680.html

相关文章

【深度学习】Yolov8使用心得

兜兜转转,原本以为和yolov没啥关系了,但是新公司又回到了yolov侧。 yolov8 可以用pip的方式安装,以package的三方软件包形式,隐藏了很多细节。当然你也可以从git上把全套代码down下来。 1.分类模型 1.1 改错误 位置&#xff1a…

SOLIDWORKS Electrical 3D--精准的三维布线

相信很多工程师在实际生产的时候都会遇到线材长度不准确的问题,从而导致线材浪费甚至整根线材报废的问题,这基本都是由于人工测量长度所导致的,因此本次和大家简单介绍一下SOLIDWORKS Electrical 3D布线的功能,Electrical 3D布线能…

【热门话题】Chrome 插件研发详解:从入门到实践

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 Chrome 插件研发详解:从入门到实践一、引言二、Chrome 插件基础概念…

论基于架构的软件设计方法及应用

框架 一、 摘要 2020年12月,我参加了某省政协委员履职系统的开发。该系统为政协机关人员管理委员信息以及委员完成各项履职提供了全方位的软件支撑。我在该项目重担任系统架构师一职,负责履职系统的架构设计。本文结合作者的实践,以委员履职系统为例,论述基于架构的软件开…

Leetcode 17. 电话号码的字母组合

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 示例 1: 输入:digits “23” 输出:[“a…

vue项目npm run build 打包之后如何在本地访问

vue项目npm run build 打包之后如何在本地访问 如果直接访问时,则会报错如下的信息: 报错码: Access to script at file:///D:/assets/index-DDVBfHVo.js from origin null has been blocked by CORS policy: Cross origin requests are on…

WebMvcConfigurer(一)介绍

一、简介 WebMvcConfigurer配置类其实是Spring内部的一种配置方式,采用JavaBean的形式来代替传统的xml配置文件形式进行针对框架个性化定制,可以自定义一些Handler,Interceptor,ViewResolver,MessageConverter。基于j…

基于深度学习神经网络的AI图片上色DDcolor系统源码

第一步:DDcolor介绍 DDColor 是最新的 SOTA 图像上色算法,能够对输入的黑白图像生成自然生动的彩色结果,使用 UNet 结构的骨干网络和图像解码器分别实现图像特征提取和特征图上采样,并利用 Transformer 结构的颜色解码器完成基于视…