Tomcat 是 Apache 软件基金会开发的开源 Web 服务器,也是 Java Web 应用中最广泛使用的 Servlet 容器之一。它支持 Java Servlet 和 JavaServer Pages (JSP) 技术,适用于传统 Java Web 应用的开发和部署。Tomcat 以其稳定性和社区支持而闻名,适合中小规模企业级应用 。
1.1 JavaEE应用的分层模型
表现层:也就是常说的WEB层。主要负责接收客户端请求,向客户端响应结果。表现层也细分为:展示层和控制层。
展示层:负责展示结果。由一系列JQuery、Angular、Vue等各种前端框架组成。
控制层:负责接收请求和拦截非法请求。由一系列JSP页面、FreeMarker页面组成。
业务层:由一系列业务逻辑对象组成,这些业务逻辑对象实现了Domain Object方法及其他组件实现的业务逻辑方法。
Domain Object(领域对象):此层由一系列POJO对象组成,用于实现业务逻辑方法。
事务控制:业务层经常需要确保事务的一致性。
持久层:主要负责数据的持久化,数据层通常包括数据库和数据访问层。
数据库:指具体的数据库软件,例如mysql、Oracle等。通常是利用数据库驱动以及数据库连接池技术实现与数据库的连接最原始的当然就是JDBC,后续衍生出来的JPA、Mybatis以及Mybatis-plus都是对于JDBC的封装,简化开发。
数据访问层:也就是DAO(Data Access Object),用于编写持久层接口,用于将实体对象转换为业务对象。
交互逻辑:
表现层交由用户进行控制,用户操作表现层,将请求发送至控制层
控制层调用业务层,处理用户请求
业务层根据业务的实际需求,调用持久层将用户操作存储在数据库,或从数据库取出数据
持久层返回操作结果给业务层
业务层返回持久层结果给控制层
控制层进行一定的数据封装、渲染,返回给表现层
1.2 表现层
表现层主要需要解决的问题是展示层和控制层的如何通信。
展示层不管是采用JSP还是VUE,都需要将用户的请求发送到控制层。
控制层不管是用Java,还是Python,也都需要将响应结果反馈给展示层。
1.2.1 Web服务器
Web服务器:Web服务器提供了各式各样的功能,侧重点也不也一样,Java中常用的三种Web服务器就是Tomcat、Undertow、Jetty
1)Tomcat
Tomcat 是 Apache 软件基金会开发的开源 Web 服务器,也是 Java Web 应用中最广泛使用的 Servlet 容器之一。它支持 Java Servlet 和 JavaServer Pages (JSP) 技术,适用于传统 Java Web 应用的开发和部署。Tomcat 以其稳定性和社区支持而闻名,适合中小规模企业级应用 。
Tomcat 的主要特点包括:
稳定性高:经过长期发展和广泛使用,Tomcat 在稳定性和可靠性方面表现优异。
支持标准 Java Web 技术栈:支持 Servlet、JSP、JSTL 等标准技术。
社区支持广泛:拥有庞大的用户社区和丰富的文档资源。
2)Jetty
Jetty 是一个轻量级、高性能的 Java Web 容器,由 Eclipse 基金会维护。它支持 Servlet 3.1 和 WebSocket,适用于高性能和分布式系统。Jetty 以其轻量级和快速启动的特点而受到青睐,适合嵌入式应用和微服务架构 。
Jetty 的主要特点包括:
轻量级:启动快、内存占用低,适合嵌入式应用和微服务。
高性能:支持异步非阻塞 I/O,适合高并发场景。
灵活性:支持按需加载组件,便于扩展和定制。
3)Undertow
Undertow 是 Red Hat 开发的高性能 Web 服务器,基于 NIO 实现,支持异步非阻塞 I/O 和 HTTP/2。它被广泛用于 WildFly 应用服务器,并且在 Spring Boot 中作为可选的内嵌服务器。Undertow 以其高性能和灵活性而受到关注 。
Undertow 的主要特点包括:
高性能:在高负载下表现优异,吞吐量高,适合高并发场景。
灵活性:支持异步非阻塞 I/O,适合实时通信和微服务架构。
轻量级:配置简单,易于集成到 Spring Boot 等框架中。
总结
Tomcat:适合传统 Java Web 应用,稳定可靠,社区支持广泛。
Jetty:适合轻量级、高性能和嵌入式应用,启动快、内存占用低。
Undertow:适合高性能、高并发场景,支持异步非阻塞 I/O,适合微服务和实时通信。
其他服务器
Jboss:是一个遵从了javaEE规范的、开源的、纯EJB服务器,它支持所有的javaEE规范
GlassFish:由Oracle公司开发的一款JavaWeb服务器,是一款强健的商业服务器,达到产品级质量
Resin:自身采用Java开发,是目前最快的JSP、Servlet运行平台,支持EJB,商用收费,个人免费
WebLogic:是Oracle公司的产品,目前应用最广泛的Web服务器,支持JavaEE规范,适合大型项目(收费,大公司用得比较多)
Nginx服务器:负载均衡服务器,主要用于反向代理,详细介绍参考:Nginx
IIS(Internet Information Services)服务器:微软公司开发的WEB服务器,允许托管网站和Web应用,并提供了一系列用于Web服务器管理的功能
1.2.2 JSP、Servlet、JavaBean
JSP是动态Web,HTML是静态Web。
JSP和Servlet底层实现原理一致,**JSP必须被Web服务器编译为Servlet**,才能使用,所以真正在Web服务器中运行的是Servlet。
JavaBean是用于数据传输的,请求/响应携带的数据。
Tomcat版本
Servlet/JSP版本
JavaEE版本
运行环境
4.1
2.3/1.2
1.3
JDK1.3
5.0
2.4/2.0
1.4
JDK1.4
5.5/6.0
2.5/2.1
5.0
JDK5.0
7.0
3.0/2.2
6.0
JDK6.0
8.0
3.1/2.3
7.0
JDK7.0
Servlet在2.5版本及之前都是采用的xml配置的方式,在3.0之后就是注解的方式实现了 Servlet在4.x中提供了异步请求、注解、增强的Servlet API、非阻塞IO。
1.2.3 静态web和动态web
1.2.3.1 静态web
html\htm网页,通过直接获取的方式,进行页面展示,所有的用户看到的都是同一个页面 css、js、txt mp4 jpg等都算是静态web资源。
图片
图片
静态web存在的缺点:
Web页面无法动态更新,所有用户看到的都是同一个页面。
无法和数据库交互(数据无法持久化,用户无法交互)。
1.2.3.2 动态web
jsp/sevlet动态资源,可以与数据库进行交互,实现动态页面:
ASP:微软的产品,底层是在HTML中嵌入VB的脚本,ASP+COM,导致在页面中包含太多业务逻辑代码。
PHP:开发速度很快,功能很强大,跨平台,代码很简单,但是无法承载大访问量的情况。
JSP:本质是Servlet,是sun公司开发的B/S架构,可以承载三高(高性能、高可用、高并发)问题,语法像ASP。
图片
图片
动态Web的缺点:假如服务器的动态web资源出现错误,我们需要重新编译后台程序,重新发布。
1.3 业务层
业务层的内容其实特别多,很多技术其实都是在业务层出现问题后产生的一系列扩展。聊这些内容势必就会带来一些场景问题,这里我们浅浅了解一下,方便后续对Spring设计的理解。
假设现在有一个新增用户的业务,需要更新两个表,sys_user表和sys_user_role表,这是一个很常见的业务,那么现在假设sys_user更新成功,sys_user_role更新失败,会出现什么问题?
实际就是创建用户,界面提示新增失败,但是查询时可以查询到这个用户,这个用户无法登录【因为没有角色权限】,这就是很典型的事务问题,放到金融行业,直接爆炸!!!
所以说像Spring自带的日志模块、事务模块以及消息模块等,都是服务于业务的。
1.4 持久层
说到持久层,不管是古早的JPA还是现在的Mybatis、Mybatis-plus都是基于JDBC,全称为Java DataBase Connectivity(Java数据库连接器)。
其实我们所说的JDBC只是规范,并非具体实现,具体实现还是依靠各大数据库厂商提供的驱动。
下图就是最原始的JDBC与上下游交互的交互逻辑。
JDBC架构.svg
JDBC架构.svg
JDBC开发步骤:
引入数据库的驱动jar包
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.27</version>
</dependency>
获取连接
DriverManager获取连接
Class.forName("com.mysql.cj.jdbc.Driver");//注册驱动
String url = "jdbc:mysql://localhost:3306/test";
String username = "root";
String password = "123456";
Connection con = DriverManager.getConnection(url, username, password);
获取 Statement
用过获取的连接,得到Statement
Statement stmt = con.createStatement();
执行sql
// 定义 sql 插入语句
String sql = "insert into person(id,name,gender,birthday)values(REPLACE(uuid(),'-',''),'测试人员','1','1997-09-23')";
// 定义 sql 更新语句
String sql = "update person t set t.gender = '2' where t.id='07382329976811f09ffbfa163e3e8fb6'";
// 定义 sql 删除语句
String sql = "delete person t where t.id='07382329976811f09ffbfa163e3e8fb6'";
// 创建 sql 执行对象
stmt = conn.createStatement();
// 执行查询 sql 并返回更新条数
int count = stmt.executeUpdate(sql);
String sql = "select * from person";
ResultSet rs = stmt.executeQuery(sql);
后面为了简化开发,衍生出来很多数据库框架,详细介绍就参考Spring Data JPA、MyBatis、Mybatis-plus。
AI大模型学习福利
作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
一、全套AGI大模型学习路线
AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获取
二、640套AI大模型报告合集
这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获
三、AI大模型经典PDF籍
随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获
四、AI大模型商业化落地方案

因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获
作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量
406

被折叠的 条评论
为什么被折叠?



