tomcat,介绍,安装

启动别混着用,systenctl start comcat 启动就一套,  startup.sh 

目录

java 基础

WEB架构

微服务的优缺点 

微服务优点:

 微服务缺点:

常见的微服务框架 

 JDK和JRE

JDK是什么?

JDK和JRE的区别?

Tomcat 支持java运行

JVM概念

二进制安装 Tomcat

配置文件

 组件分层和分类

核心组件

 总结


java 基础

WEB架构

微服务

  • 属于SOA(Service Oriented Architecture)的子集
  • 微服务化的核心就是将传统的一站式应用,根据业务拆分成一个一个的服务,彻底去掉耦合,每一个微服务提供单个业务功能,一个服务只做一件事。每个服务都围绕着具体业务进行构建,并且能够被独立地部署到生产环境、类生产环境等
  • 从技术角度讲就是一种小而独立的处理过程,类似与进程的概念,能够自行单独启动或销毁微服务架构(分布式系统),各个模块/服务,各自独立出来,"让专业的人干专业的事",独部署。分布式系统中,不同的服务可以使用各自独立的数据库。
  • 服务之间采用轻量级的通信机制(通常是基于HTTP的RESTful API)。
  • 微服务设计的思想改变了原有的企业研发团队组织架构。传统的研发组织架构是水平架构,前端、后端、DBA、测试分别有自己对应的团队,属于水平团队组织架构。而微服务的设计思想对团队的划分有着一定的影响,使得团队组织架构的划分更倾向于垂直架构,比如用户业务是一个团队来负责,支付业务是一个团队来负责。但实际上在企业中并不会把团队组织架构拆分得这么绝对,垂直架构只是一种理想的架构
  • 微服务的实现框架有多种,不同的应用架构,部署方式也有不同

微服务的优缺点 

微服务优点:

  • 每个服务足够内聚,足够小,代码容易理解。这样能聚焦一个只当的业务功能或业务需求。
  • 开发简单、开发效率提高,一个服务可能就是专业的只干一件事,微服务能够被小团队单独开发,这个小团队可以是2到5人的开发人员组成
  • 微服务是松耦合的,是有功能意义的服务,无论是在开发阶段或部署阶段都是独立的。
  • 微服务能使用不同的语言开发
  • 易于和第三方集成,微服务运行容易且灵活的方式集成自动部署,通过持续集成工具,如:Jenkins、Hudson、Bamboo
  • 微服务易于被一个开发人员理解、修改和维护,这样小团队能够更关注自己的工作成果,无需通过
  • 合作才能体现价值微服务允许你利用融合最新技术。微服务只是业务逻辑的代码,不会和HTML/CSS或其他界面组件混合,即前后端分离
  • 每个微服务都有自己的存储能力,可以有自己的数据库,也可以有统一数据库

 微服务缺点:

  • 微服务把原有的一个项目拆分成多个独立工程,增加了开发、测试、运维、监控等的复杂度
  • 微服务架构需要保证不同服务之间的数据一致性,引入了分布式事务和异步补偿机制,为设计和开发带来一定挑战
  • 开发人员和运维需要处理分布式系统的复杂性,需要更强的技术能力
  • 微服务适用于复杂的大系统,对于小型应用使用微服务,进行盲目的拆分只会增加其维护和开发成本

常见的微服务框架 

Dubbo

阿里开源贡献给了ASF,目前已经是Apache的顶级项目
一款高性能的Java RPC服务框架,微服务生态体系中的一个重要组件
将单体程序分解成多个功能服务模块,模块间使用Dubbo框架提供的高性能RPC通信
内部协调使用Zookeeper,实现服务注册、服务发现和服务治理

 Spring cloud

一个完整的微服务解决方案,相当于Dubbo的超集
微服务框架,将单体应用拆分为粒度更小的单一功能服务
基于HTTP协议的REST(Representational State Transfer 表述性状态转移)风格实现模块间
通信

 JDK和JRE

 Java SE API: Java 基础类库开发接口
JRE:Java Runtime Environment缩写,指Java运行时环境, 包含 JVM + Java核心类库
JDK:Java Development Kit,即 Java 语言的软件开发工具包,JDK协议基于 JRL(JavaResearch License)协议

JDK是什么?

1.JDK全称Java Development Kit 中文意思是Java 开发工具包
2.JDK是sun公司开发的
3.JDK包括 jre (Java Runtime Environment) Java 运行环境,一堆Java工具和Java基础的类库

JDK和JRE的区别?

jdk是程序员做开发的时候必须要的开发环境,jre是运行环境。

在这里插入图片描述

JDK_FILE="jdk-8u341-linux-x64.tar.gz"
#JDK_FILE="jdk-11.0.15.1_linux-x64_bin.tar.gz"
#JDK_FILE="jdk-11.0.12_linux-x64_bin.tar.gz"
#JDK_FILE="jdk-8u301-linux-x64.tar.gz"


JDK_DIR="/usr/local"

DIR=`pwd`

color () {
    RES_COL=60
    MOVE_TO_COL="echo -en \\033[${RES_COL}G"
    SETCOLOR_SUCCESS="echo -en \\033[1;32m"
    SETCOLOR_FAILURE="echo -en \\033[1;31m"
    SETCOLOR_WARNING="echo -en \\033[1;33m"
    SETCOLOR_NORMAL="echo -en \E[0m"
    echo -n "$2" && $MOVE_TO_COL
    echo -n "["
    if [ $1 = "success" -o $1 = "0" ] ;then
        ${SETCOLOR_SUCCESS}
        echo -n $"  OK  "    
    elif [ $1 = "failure" -o $1 = "1"  ] ;then
        ${SETCOLOR_FAILURE}
        echo -n $"FAILED"
    else
        ${SETCOLOR_WARNING}
        echo -n $"WARNING"
    fi
    ${SETCOLOR_NORMAL}
    echo -n "]"
    echo                                                                                                                              
}

install_jdk(){
if !  [  -f "$DIR/$JDK_FILE" ];then
	color 1  "$JDK_FILE 文件不存在" 
	exit; 
elif [ -d $JDK_DIR/jdk ];then
        color 1  "JDK 已经安装" 
	exit
else 
        [ -d "$JDK_DIR" ] || mkdir -pv $JDK_DIR
fi
tar xvf $DIR/$JDK_FILE  -C $JDK_DIR
cd  $JDK_DIR && ln -s jdk* jdk 

cat >  /etc/profile.d/jdk.sh <<EOF
export JAVA_HOME=$JDK_DIR/jdk
export PATH=\$PATH:\$JAVA_HOME/bin
#export JRE_HOME=\$JAVA_HOME/jre
#export CLASSPATH=.:\$JAVA_HOME/lib/:\$JRE_HOME/lib/
EOF
.  /etc/profile.d/jdk.sh
java -version && color 0  "JDK 安装完成" || { color 1  "JDK 安装失败" ; exit; }

}

install_jdk

ln -s /usr/local/jdk1.8.0_341/bin/* /usr/local/bin/  #exit退出重新加载下,如果不行就创建软连接

C:\Program Files\Java\jdk1.8.0_341  #(默认安装)win安装到这里面,最好在当前路径下执行java,

Tomcat 支持java运行

商用:IBM WebSphere、Oracle WebLogic(原属于BEA公司)、Oracle Oc4j、RedHat JBoss等
开源:Tomcat、Jetty、Resin、Glassfish 

从上往下嵌套

 [root@ubuntu2004 ~]#apt -y install tomcat9 tomcat9-admin tomcat9-docs tomcat9-examples 

JVM概念

JVM是Java Virtual Machine(Java虚拟机)的缩写。

简单来说JVM是用来解析和运行Java程序的。

二进制安装 Tomcat

tar xf apache-tomcat-9.0.65.tar.gz -C /usr/local/

[root@ubuntu2004 local]#ln -s apache-tomcat-9.0.65  tomcat   #设置软连接

[root@ubuntu2004 bin]#echo PATH='/usr/local/tomcat/bin:$PATH' >/etc/profile.d/tomcat.sh
[root@ubuntu2004 bin]#. /etc/profile.d/tomcat.sh
[root@ubuntu2004 bin]#startup.sh         #启动端口8080

10.0.0.101:8080   #在浏览器就能访问了

现在只是 以root的方式运行了,并没有开机启动,,他本事就是java程序,只不过是调用

[root@ubuntu2004 bin]#ll /usr/local/tomcat/logs/catalina.out                    #日志
-rw-r----- 1 root root 6545 9月  21 23:49 /usr/local/tomcat/logs/catalina.out

脚本安装

把java 和jdk的包扔进去

配置文件

[root@ubuntu2004 logs]#ll /usr/local/tomcat/logs/catalina.2022-09-22.log #日志文件

[root@ubuntu2004 tomcat]#ll work/Catalina/localhost/ROOT/org/apache/jsp/ #缓存位置
总用量 76            缓存文件
drwxr-x--- 2 tomcat tomcat  4096 9月  22 09:45 ./
drwxr-x--- 3 tomcat tomcat  4096 9月  22 00:03 ../
-rw-r----- 1 tomcat tomcat 18382 7月  14 20:28 index_jsp.class
-rw-r----- 1 tomcat tomcat 30325 7月  14 20:28 index_jsp.java
-rw-r----- 1 tomcat tomcat  5993 10月 18  2020 test_jsp.class
-rw-r----- 1 tomcat tomcat  5351 10月 18  2020 test_jsp.java

[root@ubuntu2004 logs]#tail -f localhost_access_log.2022-09-22.txt           #访问日志

10.0.0.1 - - [22/Sep/2022:09:10:21 +0800] "GET /bg-button.png HTTP/1.1" 200 713
10.0.0.1 - - [22/Sep/2022:09:17:40 +0800] "GET /test.html HTTP/1.1" 200 27
10.0.0.1 - - [22/Sep/2022:09:17:42 +0800] "GET /test.html HTTP/1.1" 304 -
10.0.0.1 - - [22/Sep/2022:09:38:14 +0800] "GET /index.jsp.0 HTTP/1.1" 200 397
10.0.0.1 - - [22/Sep/2022:09:38:19 +0800] "GET /index.jsp.0 HTTP/1.1" 304 -
 

[root@ubuntu2004 webapps]#pwd                #网页目录
/usr/local/tomcat/webapps

 组件分层和分类

顶级组件
Server,代表整个Tomcat容器,一台主机可以启动多tomcat实例,需要确保端口不要产生冲突
服务类组件
Service,实现组织Engine和Connector,建立两者之间关联关系, service 里面只能包含一个Engine
连接器组件
Connector,有HTTP(默认端口8080/tcp)、HTTPS(默认端口8443/tcp)、AJP(默认端口
8009/tcp)协议的连接器,AJP(Apache Jserv protocol)是一种基于TCP的二进制通讯协议。
容器类
Engine、Host(虚拟主机)、Context(上下文件,解决路径映射)都是容器类组件,可以嵌入其它组件,
内部配置如何运行应用程序。
内嵌类
可以内嵌到其他组件内,valve、logger、realm、loader、manager等。以logger举例,在不同容器组
件内分别定义。
集群类组件
listener、cluste

核心组件

  • Tomcat启动一个Server进程。可以启动多个Server,即tomcat的多实例, 但一般只启动一个
  • 创建一个Service提供服务。可以创建多个Service,但一般也只创建一个                                              每个Service中,是Engine和其连接器Connector的关联配置
  • 可以为这个Service提供多个连接器Connector,这些Connector使用了不同的协议,绑定了不同的端口。其作用就是处理来自客户端的不同的连接请求或响应
  • Service 内部还定义了Engine,引擎才是真正的处理请求的入口,其内部定义多个虚拟主机Host                                                                                                                                                     Engine对请求头做了分析,将请求发送给相应的虚拟主机                                                        如果没有匹配,数据就发往Engine上的defaultHost缺省虚机                                                      Engine上的缺省虚拟主机可以修改
  • Host 定义虚拟主机,虚拟主机有name名称,通过名称匹配
    • Context 定义应用程序单独的路径映射和配置                #就是这种嵌套关系

 范例: tomcat日志实现json格式的访问日志

pattern="{&quot;clientip&quot;:&quot;%h&quot;,&quot;ClientUser&quot;:&quot;%l&quot;,&quot;authenticated&quot;:&quot;%u&quot;,&quot;AccessTime&quot;:&quot;%t&quot;,&quot;method&quot;:&quot;%r&quot;,&quot;status&quot;:&quot;%s&quot;,&quot;SendBytes&quot;:&quot;%b&quot;,&quot;Query?string&quot;:&quot;%q&quot;,&quot;partner&quot;:&quot;%{Referer}i&quot;,&quot;AgentVersion&quot;:&quot;%{User-Agent}i&quot;}"/>

在文件最后的指定位置加进去 

             Documentation at: /docs/config/valve.html
             Note: The pattern used is equivalent to using pattern="common" -->
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="{&quot;clientip&quot;:&quot;%h&quot;,&quot;ClientUser&quot;:&quot;%l&quot;,&quot;authenticated&quot;:&quot;%u&quot;,&quot;AccessTime&quot;:&quot;%t&quot;,&quot;method&quot;:&quot;%r&quot;,&quot;status&quot;:&quot;%s&quot;,&quot;SendBytes&quot;:&quot;%b&quot;,&quot;Query?string&quot;:&quot;%q&quot;,&quot;partner&quot;:&quot;%{Referer}i&quot;,&quot;AgentVersion&quot;:&quot;%{User-Agent}i&quot;}"/>
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />

      </Host>
    </Engine>
  </Service>
</Server>

[root@ubuntu2004 webapps]#tail -f /usr/local/tomcat/logs/localhost_access_log.2022-09-22.txt 

运行日志文件   ,复制出一段,转成人看的

[root@ubuntu2004 ~]#cat a.txt |jq
{
  "clientip": "10.0.0.1",
  "ClientUser": "-",
  "authenticated": "-",
  "AccessTime": "[22/Sep/2022:10:50:08 +0800]",
  "method": "GET /test.jsp HTTP/1.1",
  "status": "200",
  "SendBytes": "254",
  "Query?string": "",
  "partner": "-",
  "AgentVersion": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:104.0) Gecko/20100101 Firefox/104.0"
}

 总结

应用服务器
java应用

jsp = php          #模版文件 html+java

war=html,jsp,jar=zip格式  #依赖于tomcat应用服务器
jar=class文件= war+java应用服务器

app.java   #源码,文本
javac   #编译器
app.class 二进制,字节码,中间代码,统一,所有OS统一格式
jvm,jre(jvm+库jar),jdk(jre+java相关工具) java 命令 
机器码


tomcat结构

test.jsp --> test_jsp.java --> test_jsp.class --JVM -- 机器码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值