Java-Tomcat

一、web补充技术

①:B/S架构

主流的方式,只要有浏览器即可。编程方式直接基于socket即可

②:javascript

简称js,早期只是实现在客户端的浏览器的动态效果,但服务端不会解释运行,所以本质上是静态资源。

2008年后v8引擎诞生,js成为了既可以在前端运行,又可以在后端执行的前后端通吃的编程语言。

③:网页技术之 同步 和 异步

同步:整个页面统一整体加载

异步:在基于交互式网页中,可以实现网页中单个模块的异步单独加载网页内容

主流的网页技术为ajax(Asynchronous Javascript And XML),早期页面交互基于XML,

但XML文件过于臃肿,现如今前后端分离主流交互页面的技术主要是基于json来实现页面交互。

当今主流前后端web分离,基于restful风格

以前前后端分离走的是fastcgi(php适合做单体架构,不适合做微服务)、uswcgi等技术,现在主流走的是http协议(基于6大基本方法:put、get、post、delete等来交互json)

流程: 客户端下载APP,在APP里面访问动态页面,可以直接访问html,此时html内部涉及一些业务逻辑,就会基于http协议发数据;如果后台是java,http协议就会通过put、post、get等一些请求方法从后台数据库交换数据,将数据的结果再基于http协议通过6大请求方法,把结果异步交互到某个html页面中的某个模块中。这样就可以在不同时间点异步看到不同模块的动态内容

④:单体架构和微服务

单体架构:一个项目一般为一个大的部署的应用程序,里面可能将订单、商品、库存、支付、登录、注册等多个功能模块打包在一起,在java中,一般以war包或ear包来部署。

**优点:**简单方便,若需要扩展,只需将war包进行复制部署负载均衡即可。开发方便,没有调用消耗,测试也方便

**缺点:**耦合度高,各个模块依赖太强,若某个模块出现问题,需要整体构建、重新部署,重新打包;而且管理难度大。这样不利于项目的大规模扩展和和业务的迭代。

API gateway(各个微服务之间通信):nacos、zk既可以实现rpc(逻辑层,效率高),又可以实现restful(资源层、更加灵活);协调跨主机通信

API:应用编程接口

分库分表:mycat(读写分离)

微服务:将单体架构拆开,每个大的项目拆分成为单个的小的服务,每个服务足够内聚,能聚焦一个业务功能需求。

**优点:**开发简单,效率很高,耦合性低,专人干专事(小团队开发小服务,而且开发和部署都各自独立)

可以使用不同的开发语言,而且可以完全实现前后端分离。

非常方便和灵活的第三方持续集成,例如jenkins。

微服务可以有自己的存储能力,拆分和细化数据库。

**缺点:**由于拆分的独立工程太多,开发、测试、运维、监控复杂度较大。

为了保证不同微服务之间的数据一致性,设计架构难度角度;开发和运维需要极强的技术能力(例如docker和k8S)。

只适用于超大型或大型的系统架构。若盲目使用微服务只会增添开发、维护和其他成本。

二、java技术体系

1.JAVA编程语言特性

属于应用级的面向对象的编程语言,基于虚拟环境(虚拟机,虚拟自己需要的类库,提供程序自己所需的运行环境)进行运行。

虚拟环境:jvm

在某些特定程序需要在非服务器端(客户端)进行运行时候,如果服务器端只是提供的应用程序的源代码,源代码加载到客户端本地进行预运行。

但是由于ABI不一样,无法跨操作系统,形成移植化(无法一次编译,到处运行)

2.动态网页的相关技术

动态网站开发语言:asp .net jsp (php) .py .pl

动态网站:客户端动态:

服务器动态:CGI fpm

webapp server:

jsp:tomcat jboss jetty webspre weblogic (不仅可以跑动态,也可以裸奔跑静态)

php:php-fpm

3.JAVA语言的发展

早期由SUN,作者为詹姆斯*高思林,是为了实现机顶盒项目公司而开发。后改名为JAVA,后广泛利用在web动态网站的开发。属于客户端动态,现如今属于世界上中最为广泛、流行的应用级编程语言。

1995年:JAVA 1.0发布

1996年:JDK 1.0发布 (主流技术 JVM Applet AWT)

1997年:JDK1.1发布 (主流技术 JAR文档格式 JDBC开放数据库系统互联 JavaBeans)

1998年:JDK1.2开始,SUN把JAVA技术拆分为三个方向,分别为J2SE--->JAVA 2 SE= =jdk(标准版,桌面级应用) J2EE--->JAVA 2 EE(企业级应用) J2ME(移动设备)

代表性技术:EJB(分布式) Plug-in(可插拔) Swing(窗口化图形界面) JIT(运行时动态编译)

2000年:JDK 1.3

使用HotSpot虚拟机(闭源)

2002年:JDK 1.4发布(发展成熟)

2006年:SUN宣布JAVA技术,遵循GPL协定,开发绝大部分代码,建立OpenJDK组织管理这些代码。

2009年:ORACLE收购SUN公司,JAVA版权被ORACLE所有。

4.JAVA的体系结构(四大核心技术)

Java编程语言 (属于纯面向对象的编程语言) .class

Java Class文件格式 编译之后运行在各个平台的基础环境

Java API (JAVA类库非常庞大)

Java VM

5.JDK包含的技术

JRE:单纯的运行环境

JavaEE 比 javaSE 有更多的类

JAVA EE的子技术

Servlet(实现服务端动态) JSP EJB(分布式) JMS(邮件) JMX JavaMail (邮件插件)......

JAVA 动态网页技术(javaEE)

①:servlet

Servlet:应用在服务端的,可以基于CGI协议与前端进行交互,需要基于Servlet容器(Servlet Contaier);基于编写java源码,然后在java源码程序中嵌入前端的html代码;缺陷非常大。

②:JSP

JSP:使JAVA代码内嵌在html文档中,相当于Servlet的前端

Web container:JDK Servlet JSP

商业实现方案:websphere webLogic OC4j Glassfish

开源实现方案:tomcat jetty resin Jboss

三、tomcat 理论详解

1.jsp网页文件请求流程

JSP网页请求流程:

首先 客户端之前请求.java结尾的文件,而现在请求的是.jsp结尾的动态页面;然后发起一个get请求,由于jsp在前面,变成Servlet前端,可以叫它jsp容器,它负责接收处理jsp文件的请求,但是它本身不负责转换编译请求的工作;于是jsp将客户端请求的jsp的请求和标准要求,转交给后台的Servlet;而Servlet会将其转换一种通用格式(.jsp--->.java的源码,因为底层只能识别.java的字节码),转完之后,需要进行编译,Servlet将其转交给后台的JVM,将其编译成helloServlet对应的字节码,编译完成后,将编译的结果对应的二进制数据流执行之后,再交给JSP容器;然后JSP容器将从后台java编译得到的数据封装成为html响应报文,返回给客户端;此时客户端就看到一个他以为请求的静态资源,但是在后台是动态资源。

JSP--> Java--->.class--->将变成.class的结果数据流在交给JSP容器--->JSP容器封装成HTML响应报文给客户端

Java特点:第一次访问很慢,预热之后,每次访问速度就变快了 ;而php做不到,因为其是解释型文件

但如今企业环境中JSP使用率大幅降低

当今主流的开发风格实现前后端分离(REST/RESTful风格,实现彻底分离)

缺点:JSP耦合性比较强,不能彻底实现动静分离,

所有的servlet容器必须要构建在JDK基础上

开源JDK:Openjdk Sunjdk Apache Harmony

2.tomcat的发展

早期SUN公司创建第一个servlet容器(即Java Web Server),但只是为了演示servlet相应功能,很不稳定。同一时期,ASF(apache软件基金会)创建了JServ项目,一个可以与apache整合起来的servlet容器,1999年,SUN把JWS捐给ASF,项目合二为一,成为几天tomcat的前身,第一版本为tomcat3.x系列。

2001年tomcat4.0发布,在此前基础上进行重新设计和实现,代码项目被命名为Catalina。

本质:java web的应用,必须工作在JDK平台,Tomcat:JSP+Servlet+http连接器通用的web应用服务器

3.tomcat的核心组件

Catalina:servlet container

Coyote:http connection

Jasper:JSP Engine

4.jsp解析流程

jsp ---> jasper --->servlet --->complie --->bytecodes --->jvm

5.tomcat的组件

Tomcat instance:运行中的tomcat进程(java进程)

Server:一个tomcat实例(一般一个server服务一个service)

Service:用于将connector关联至engine组件,一个service只能包含一个engine组件和一个或多个connector组件

Engine:tomcat的核心组件,用于运行jsp或servlet代码

Connector:接受并解析用户请求,将请求映射为engine中运行的代码,把运行结果构建成响应报文。

Host:相当于httpd的虚拟主机

Context:类似httpd中的alias,上下文 (定义路径别名)

组件的分类:顶级类组件:server

服务类组件:service

容器类组件:可以部署webwebapp的组件,engine host context

连接器组件:connector(通常在tomcat定义的连接器类型有http连接器,SSL连接器、AJP1.3连接器、proxy连接器)

被嵌套类组件:valve logger realm

XML标签:

<server>

<service>

<connector />

<connector />

......

<engine>

<host>

<context />

......

</host>

...

</engine>

</service>

</server>

6.Tomcat运行模式

Standalone(裸奔模式):通过内置的web server(http connector)来接受客户端请求

proxy:由专门的web server服务客户端的httpd请求

in-process:部署于同一主机

network:部署于不同主机

【注】:安装tomcat,安装前提:①部署JDK (ORACE JDK 或openjdk)

7.Tomcat的目录结构

bin:脚本及启动时用到的类

lib:类库

conf:配置文件

logs:日志文件

webapps:应用程序默认部署目录

work:工作目录

temp:临时目录

8.tomcat配置文件

server.xml:主配置文件

context.xml:每个webapp专用的配置文件,通常位于webapp应用程序目录下的WEB-INF目录中,用于定义会话管理器、JDBC等。

conf/context.xml为各个webapp提供默认配置

web.xml:每个webapp部署完才能被访问,用于提供为所有webapp提供默认部署相关配置

tomcat-users.xml:用户认证账号和密码配置文件

catalina.policy:使用-security选项启动tomcat实例时,会读取此配置文件实现安全运行策略。

logging.properties:日志相关信息配置文件

9.Java WebAPP 组织结构

属于特定的组织形式,层次型的目录结构。主要包含了servlet代码文件、JSP页面文件、类文件、部署描述符文件等

/usr/local/tomcat/webapps/app1 :

/:webapp的根目录

WEB-INF(应用):当前webapp私有资源目录,通常存放当前webapp自用的web.xml

META-INF(配置):也是当前webapp的私有资源目录,通常存放webapp自用的context.xml

classes:此webapp的私有类

lib:此webapp的私有类,被打包为jar格式类

index.jsp:webapp的主页

10.Webapp归档格式

.war webapp

.jar EJB的类

.rar 资源适配器

.ear 企业级应用程序

四、Tomcat的操作

1.部署测试应用程序

①:创建webapp特有的目录结构

②:提供webapp的各文件(*)

③:提供测试主页 vim index.jsp

通常情况下,程序会被catalina引擎自动部署,(如重新部署,新版应用程序会进行自动更新部署生效)

如需手动部署,简单的方式重启即可

④:进入work目录,使用tree命令即可显示其java程序部署的过程

⑤:也可查看work/Catalina/localhost/myapp/org/apache/jsp/ 下的java代码源代码和字节码

注意:默认的网页根路径映射在ROOT目录,和额外部署应用程序根目录分离。

2.部署应用程序(deployment)相关的操作

①:将webapp源文件放置于目标目录,配置tomcat服务器能够基于context.xml文件中定义的路径来访问webapp

②:将其特有类通过class loader装载至tomcat

③部署分为自动部署和手动部署,上述方式属于自动部署(auto deploy)。

手动部署:①:冷部署--->把webapp复制到指定路径,启动tomcat

stop 停止服务,不再提供服务

start 停止状态的webapp进行启动

redeploy 重新部署

②:热部署--->基于部署工具(manager、ant脚本、tcd等部署工具)

反部署(undeploy):停止webapp,并从tomcat实例并从tomcat实例拆除其部分文件和部署名。

tomcat图形化部署工具--->manager app(属于应用程序管理工具)

需要配置部署管理员的账号、密码 vim conf/tomcat-user.xml

【注】:默认除了本机不被支持,如需支持需要修改webapps/manager/META-INF/context.xml 文件进行更改(或注释也可)

Tomcat虚拟主机图形管理工具 Host Manager

同样如需要远程登录,需要更改对应的管理配置文件

Port:8005 本机连接自己实现实例管理,最好进行更改,不然有安全风险

面对此问题要进行安全加固,有两种解决方案:

①把port改成随机数

②把这个端口,进行关闭port:-1

3.Tomcat主配置文件server.xml结构和详解

定义Engine 组件

<Engine name="Catalina" defaultHost="localhost">

默认定义在server.xml中的catalina

定义Host 组件

appBase:Host的webapps目录,可以使用基于定义好catalina环境变量后的相对路径。

autoDeploy:在Tomcat处于运行时放置于appBase目录中的应用程序文件是否能够自动部署,默认为true

unpackWars:在启用此webapps时,是否对WAR格式的归档文件先进行展开;默认为true

Host 组件中定义虚拟主机

<Host name="web.xxhf123.com" appBase="/data/webapps" unpackWARs="true" autoDeploy="false">

<Value className="org.apache.catalina.valves.AccessLogValve" directory="/data/logs"

prefix="web_access_log" suffix=".txt"

pattern="% %l %u %t &quot; %r&quot; %s %b" />

</Host>

【注】:定义虚拟主机,可以将默认定义在相对的ROOT中,其他单独存放

大写的ROOT,代表应用默认的程序,不需要接uri

开服状态下,不要检查配置文件,否则语法错误

相关推荐
期末考复习中,蓝桥杯都没时间学了11 小时前
python调用百度智能云API完成文本情感分析
开发语言·python
七夜zippoe11 小时前
Elasticsearch核心概念与Java客户端实战 构建高性能搜索服务
java·大数据·elasticsearch·集群·索引·分片
深念Y11 小时前
easylive仿B站项目 后端 单体版 项目构建
java·开发语言
阿杰 AJie11 小时前
Java Stream API详细用法
java·windows·python
蒜香拿铁11 小时前
【第五章】python判断语句if
java·服务器·python
毕设源码-朱学姐11 小时前
【开题答辩全过程】以 公寓楼设备报修管理系统为例,包含答辩的问题和答案
java·eclipse
qq_124987075312 小时前
基于微信小程序的宠物寄领养系统(源码+论文+部署+安装)
java·spring boot·后端·微信小程序·小程序·宠物·计算机毕业设计
项目題供诗12 小时前
C语言基础(六)
c语言·开发语言
Coding茶水间12 小时前
基于深度学习的吸烟检测系统演示与介绍(YOLOv12/v11/v8/v5模型+Pyqt5界面+训练代码+数据集)
开发语言·人工智能·深度学习·yolo·目标检测·机器学习