目录
一、web技术
1、C/S架构与B/S架构
1.1 http协议与C/S架构
1.2 http协议与B/S架构
2、前端三大核心技术
2.1 HTML(Hypertext Markup Language)
2.2 css(Cascading Style Sheets)
2.3 JavaScript
3、同步和异步
4、web架构
4.1 web资源和访问
4.2 后台应用架构
4.2.1 单体应用架构
4.2.2 微服务
二、Java基础
1、java概念
2、java组成
3、java如何实现动态网页功能
3.1 servlet
3.2 jsp
4、Java的开发工具包jdk
5、Java虚拟机(JVM)的各种版本
5.1 Oracle JDK 版本
5.2 OpenJDK
三、Tomcat
1、Tomcat概述
2、安装Tomcat
2.1 安装oraclejdk
2.1.1 rpm安装
2.1.2 二进制安装
2.2 安装Tomcat
3、Tomcat相关文件
3.1 目录文件
3.2 普通文件
3.3 bin目录下的启动文件
3.4 conf目录下的配置文件
3.5 日志文件
3.6 临时文件和缓存文件
拓展:版本升级
3.7 webapps目录文件
3.8 访问目录
4、Tomcat组件
4.1 组件分层和分类
4.2 tomcat处理请求过程
4.3 Tomcat核心组件
5、tomcat端口号
5.1 8005端口
5.2 8009端口
5.3 8080端口
一、web技术
1、C/S架构与B/S架构
1.1 http协议与C/S架构
操作系统有进程子系统,使用多进程就可以充分利用硬件资源。进程中可以多个线程,每一个线程可以被CPU调度执行,这样就可以让程序并行的执行。这样一台主机就可以作为—个服务器为多个客户端提供计算服务。
客户端和服务端往往处在不同的物理主机上,它们分属不同的进程,这些进程间需要通信。跨主机的进程间通信需要使用网络编程。最常见的网络编程接口是socket。
Socket 称为套接字,本意是插座。也就是说网络通讯需要两端,如果一端被动的接收另一端请求并提供计算和数据的称为服务器端,另一端往往只是发起计算或数据请求,称为客户端。
这种编程模式称为 Client/Server 编程模式,简称C/S编程,开发的程序也称为C.S程序。C/S编程往往使用传输层协议(TCP/UDP),较为底层,比如: QQ,迅雷,云音乐,云盘, foxmail, xshell等。
1.2 http协议与B/S架构
1990年 HTTP 协议和浏览器诞生。在应用层使用文本跨网络在不同进程间传输数据,最后在浏览器中将服务器惴返回的HTML渲染出来。由此,诞生了网页开发。
网页是存储在 WEB 服务器端的文本文件,浏览器发起HTTP请求后,到达WEB服务程序后,服务程序根据 URL 读取对应的HTML文件,并封装成 HTTP 响应报文返回给浏览器端。起初网页开发主要指的是 HTML、CSS 等文件制作,目的就是显示文字或图片,通过超级链接跳转到另一个HTML并显示其内容。后来,网景公司意识到让网页动起来很重要,伴着 SUN 的 java 的名气,发布了JavaScript语言,可以在浏览器中使用5引攀执行的脚本语言,可以让网页元素动态变化。网页动起来了。
为了让网页动起来,微软使用 ActiveX 技术、SUN的 Applet 都可以在浏览器中执行代码,但都有安全性问题。能不能直接把内容直接在WEB服务器端组织成HTML,然后把HTML返回给浏览器渲染呢?
最早出现了 CGl (Common Gateway Interface)通用网关接口,通过浏览器中输入URL直接映射到一个服务器端的脚本程序执行,这个脚本可以查询数据库并返回结果给浏览器端。这种将用户请求使用程序动态生成的技术,称为动态网页技术。先后出现了 ASP、PHP、JSP 等技术,这些技术的使用不同语言编写的程序都运行在服务器端,所以称为WEB后端编程。有一部分程序员还是要编写HTML、CSS、JavaScript,这些代码运行在浏览器端,称为WEB前端编程。合起来称为Browser/Server编程,即B/S编程。
2、前端三大核心技术
2.1 HTML(Hypertext Markup Language)
一种用于创建网页的标记语言。它是Web页面的基础,用于描述页面的结构和内容。
HTML通过使用各种标签(例如<html>、<head>、<title>、<body>等)来定义页面的结构和内容,包括文本、链接、图像、表格、表单等元素。浏览器解释HTML代码并将其呈现为用户可读的页面。
HTML技术的主要目标是为Web内容提供语义结构,使得文档的结构和内容能够被清晰地定义,从而实现跨平台的一致性和可访问性。
HTML还能够通过链接(hyperlinks)来连接不同页面,实现超文本(hypertext)的交互性。此外,HTML5作为HTML的最新版本,引入了许多新特性,如多媒体支持、本地存储、Canvas绘图等,使得Web应用程序开发更加丰富和灵活
2.2 css(Cascading Style Sheets)
一种用于描述文档样式和布局的样式表语言。它与HTML一起被用于网页设计,用来设置网页上的各种元素的样式,包括布局、字体、颜色、大小、间距等
CSS的出现使得样式与内容分离,这意味着可以通过CSS单独管理网页的外观,而不需要将样式信息混合在HTML标记中。这种分离提高了代码的可维护性和可重用性
2.3 JavaScript
Javascript简称 JS,是一种动态的弱类型脚本解释性语言,和HTML、CSS并称三大WEB核心技术,得到了几乎主流浏览器支持
随着chrome浏览器的V8引擎发布 ,V8JS引擎不是解释执行,而是本地编译,在V8引擎做了很多优化,JS程序在其上运行堪比本地二进制程序。V8引擎使用C++开发,可以嵌入到任何C++程序中。基于V8引擎,2009年基于服务器 javascript 的运行环境 Node.js 诞生,创建了第一版npm (Node js包管理嚣和开源库生态系统)提供了大显的库供程序员使用。从此,便可以在服务器端真正大规模使用 JavaScript 编程了。也就是说 JavaScript 也可以真正称为服务器端编程语言了,成为目前唯一的前、后端通用的语言。
3、同步和异步
- 同步
交互式网页,用户提交了请求,就是想看到查询的结果。服务器响应到来后是一个全新的页面内容,哪怕 URL 不变,整个网页都需要重新渲染。例如,用户填写注册信息,只是2次密码不一致,提交后,整个注册页面重新刷新,所有填写项目重新填写(当然有办法让用户减少重填)。这种交互非常不友好。从代价的角度看,就是为了注册的一点点信息,结果返回了整个网页内容,不但浪费了网络带宽,还需要浏览器重新渲染网页,太浪费资源了,影响了用户体验和感受。上面这些请求的过程,就是同步过程,用户发起请求,页面整个刷新,直到服务器端响应的数据到来并重新渲染。
- 异步
1996年微软实现了 iframe 标签,可以在一个网页使用 iframe 标签局部异步加载内容。
1999年微软推出异步数据传输的 ActiveX 插件技术,太笨重了,但是也火了很多年。有一个组件XMLHttpRequest 被大多数浏览器支持。
传统的网页如果需要更新内容,必需重数整个网页面。Ajax的出现,改变这一切,同时极大的促进了 Javascript 的发展。Ajax即"Asynchronous Javascript AndXML”(异步JavaScript和XML),是指一种创建交互式、快速动态网页应用的网页开发技术,最早起源于1998年微软的Outook Web Access开发团队。Ajax通过在后台与服务器进行少量数据交换,可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。Javascript 通过调用浏览器内置的 WEB API 中的XMLHttpRequest对象实现Ajax技术。早期Aijax结合数据格式XML,目前更多的使用)SON。利用AAX可实现前后端开发的彻底分离,改变了传统的开发模式。
4、web架构
4.1 web资源和访问
- PC端或移动端浏览器访问
从静态服务器请求 HTML、CSS、JS 等文件发送到浏览器端,浏览器端接收后渲染在浏览器上从图片服务器请求图片资源显示,从业务服务器访问动态内容,动态内容是请求后有后台服务访问数据库后得到的,最终返回到浏览器端。
- 手机App访问
内置了 HTM L和 ]S 文件,不需要从静态WEB服务器下载JS或HTML。为的就是减少文件的发送,现代前端开发使用的文件太多或太大了有必要就从图片服务器请求图片,从业务服务器请求动态数据 客户需求多样,更多的内容还是需要由业务服务器提供,业务服务器往往都是由一组服务器组成。
4.2 后台应用架构
4.2.1 单体应用架构
传统架构 (单机系统)。一个项目一个工程:比如商品、订单、支付、库存、登录、注册等等,统一部署,一个进程。
all in one 的架构方式,把所有的功能单元放在一个应用里。然后把整个应用部署到一台服务器上。如果负载能力不行,将整个应用进行水平复制,进行扩展,然后通过负载均衡实现访问。
Java实现: JSP、 Servlet, 打包成一个jar. war部署
- 优点
易于开发和测试,也十分方便部署,当需要扩展时,只需要将war复制多份,然后放到多个服务器上,再做个负载均衡就可以了。
- 缺点
如果某个功能模块出问题,有可能全站不可访问,修改Bug后、某模块功能修改或升级后,需要停掉整个服务,重新整体重新打包、部署这个应用war包,功能模块相互之间耦合度高,相互影响,不适合当今互联网业务功能的快速迭代。特别是对于-一个大型应用,我们不可能把所有内容都放在一 个应用里面,我们如何维护、如何分工合作都是问题。如果项目庞大,管理难度大
web应用服务器:开源的 tomcat. jetty. glassfish, 商用的有weblogic、websphere. Jboss
4.2.2 微服务
微服务与soa 基本理念差不多, 只是微服务更细,属于SOA (Service Oriented Architecture)的子集面。微服务化的核心就是将传统的一站式应用,根据业务拆分成一个一个的服务,彻底去掉耦合,每一个微服务提供单个业务功能,一个服务只做一件事。每个服务都围绕着具体业务进行构建,并且能够被独立地部署到生产环境、类生产环境等。从技术角度讲就是一种小而独立的处理过程,类似与进程的概念,能够自行单独启动或销毁。
微服务架构(分布式系统),各个模块/服务,各自独立出来,"让专业的人干专业的事”,独立部署。分布式系统中,不同的服务可以使用各自独立的数据库。·服务之间采用轻量级的通信机制(通常是基于HTTP的RESTful API)。
微服务设计的思想改变了原有的企业研发团队组织架构。传统的研发组织架构是水平架构,前端、后端、DBA、测试分别有自己对应的团队,属于水平团队组织架构。而微服务的设计思想对团队的划分有着一定的影响,使得团队组织架构的划分更倾向于垂直架构,比如用户业务是一个团队来负责,支付业务是一个团队来负责。但实际上在企业中并不会把团队组织架构拆分得这么绝对,垂直架构只是一种理想的架构,微服务的实现框架有多种,不同的应用架构,部署方式也有不同。
- 优点
①每个服务足够内聚,足够小,代码容易理解。这样能聚焦一个只当的业务功能或业务需求。
②开发简单、开发效率提高,一个服务可能就是专业的只干一件事,微服务能够被小团队单独开发,这个小团队可以是2到5人的开发人员组成。
③微服务是松耦合的,是有功能意义的服务,无论是在开发阶段或部署阶段都是独立的。
④微服务能使用不同的语言开发
⑤易于和第三方集成,微服务运行容易且灵活的方式集成自动部署,通过持续集成工具,如: Jenkins、Hudson、Bamboo。微服务易于被一个开发人员理解、修改和维护,这样小团队能够更关注自己的工作成果,无需通过合作才能体现价值。微服务允许你利用融合最新技术。微服务只是业务逻辑的代码,不会和 HTML/CSS 或其他界面组件混合,即前后端分离,每个微服务都有自己的存储能力,可以有自己的数据库,也可以有统一数据库。
- 缺点
①微服务把原有的一个项目拆分成多个独立工程,增加了开发、测试、运维、监控等的复杂度
②微服务架构需要保证不同服务之间的数据一致性,引入了分布式事务和异步补偿机制,为设计和开发带来一定挑战,开发人员和运维需要处理分布式系统的复杂性,需要更强的技术能力
③微服务适用于复杂的大系统,对于小型应用使用微服务,进行盲目的拆分只会增加其维护和开发成本
二、Java基础
1、java概念
Java是一种广泛应用的高级编程语言,最初由Sun Microsystems开发,并于1995年正式发布。Java被设计为一种跨平台的语言,这意味着编写的Java程序可以在各种不同的计算机平台上运行,而无需针对特定平台进行修改
Java的跨平台性是通过Java虚拟机(JVM)实现的。Java程序首先被编译成字节码,然后在运行时,JVM将字节码解释执行或者编译成特定平台的机器码。这使得Java程序可以在任何支持Java的平台上运行,而不需要重新编写或编译
2、java组成
- 语言、语法规范。关键字,如: if、for、class等
- 源代码 source code
- 依赖库,标准库(基础)第三方库(针对某些应用)。底层代码太难使用且开发效率低,封装成现成的库
- JVM虚拟机。将源代码编译为中间码即字节码后,再运行在JVM之上
3、java如何实现动态网页功能
3.1 servlet
是Java Servlet 的简称,可以理解为是一个服务连接器,是用 Java 编写的服务器端程序,具有独立于平台和协议的特性, 简单的理解:servlet 就是一个中间件,包含了接口和方法,将客户端和数据库连接,从而实现动态网页的创建。
3.2 jsp
用于将 JSP 动态网页翻译成 Servlet 代码。
全称 Java Server Pages,是一种动态网页开发技术。它使用 JSP 标签在HTML网页中插入 Java 代码。标签通常以 <% 开头,以 %> 结束。也是一种 Java servlet,主要用于实现 Java web 应用程序的用户界面部分。
JSP 通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。
- 优点
架构简单,比较适合小型项目开发
- 缺点
JSP 职责不单一,职责过重,不便于维护
4、Java的开发工具包jdk
JDK(Java Development Kit)是 Java 语言的软件开发工具包,它包含了编译、运行Java应用程序所需的全部组件。主要包括以下几个部分
javac | Java 编译器,用于将源代码(.java 文件)编译为字节码文件(.class 文件) |
---|---|
java | Java 运行时环境,负责加载和执行字节码文件 |
javadoc | Java 文档生成工具,用于从源代码注释中提取信息生成API文档 |
jar | Java 打包工具,可以将多个类文件打包成一个.jar文件 |
jdb | Java 调试器,用于调试Java程序 |
jps, jinfo, jmap, jhat, jstack, jstat 等 | 这些是用于监控和管理Java虚拟机(JVM)的实用工具 |
jmod | 在较新版本的JDK中引入的一个模块化工具,用于处理Java模块化系统中的模块 |
jshell | 自JDK 9起引入的交互式Java Shell工具,可进行快速原型设计和学习Java语法 |
其中JDK与JRE的关系:
Java SE APl:Java 基础类库开发接口
JRE:Java Runtime Environment 缩写,指Java运行时环境,包含JVM +Java 核心类库
JDK:Java Development Kit,即Java语言的软件开发工具包JDK协议基于JRL(JavaResearch License)协议
5、Java虚拟机(JVM)的各种版本
5.1 Oracle JDK 版本
JDK也就是常说的J2SE,在1999年,正式发布了Java第二代平台,发布了三个版本:
- J2SE:标准版,适用于桌面平台
- J2EE:企业版,java在企业级开发所有规范的总和,共有13个大的规范,Servlet、Jsp都包含在JavaEE规范中
- J2ME:微型版,适用于移动、无线、机顶盒等设备环境
2005年,Java的版本又更名为JavaSE、JavaEE、JavaME
JDK7、JDK8、JDK11是LTS(Long Term Support),其中JDK8以下版本免费开源
5.2 OpenJDK
OpenJDK是Sun公司采用GPL v2协议发布的JDK开源版本,于2009年正式发布。
OpenJDK使用GPL v2可以用于商业用途。目前由红帽维护。OpenJDK也有在其基础上的众多发行版,比如阿里的Dragonwell。
相对来说,Oracle jDK具有更好的响应能力和JVM性能,更加稳定
在Linux 中,默认安装的是openjdk
三、Tomcat
1、Tomcat概述
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试 JSP 程序的首选。
当在一台机器上配置好Apache 服务器,可利用它响应 HTML(标准通用标记语言下的一个应用)页面的访问请求。实际上Tomcat 是 Apache 服务器的扩展,但运行时它是独立运行的,所以当你运行 Tomcat 时,它实际上作为一个与 Apache 独立的进程单独运行的。
当配置正确时,Apache 为 HTML 页面服务,而 Tomcat 实际上运行 JSP 页面和Servlet。另外,Tomcat 和 IIS 等Web服务器一样,具有处理HTML页面的功能,另外它还是一个Servlet 和JSP容器,独立的Servlet容器是Tomcat的默认模式。不过,Tomcat处理静态HTML的能力不如Apache服务器
2、安装Tomcat
官方下载链接:
https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html
#注意需要注册登录后,才能下载JDK
要求:下面安装所需的包,请到官网下载
2.1 安装oraclejdk
2.1.1 rpm安装
(1)将准备好的rpm包使用yum install或rpm -ivh安装
[root@localhost ~]#cd /opt
[root@localhost opt]#yum install -y jdk-8u291-linux-x64.rpm
或者
[root@localhost opt]#rpm -ivh jdk-8u291-linux-x64.rpm
(2)安装完成后,找到安装目录
[root@localhost opt]#find / -name javac
[root@localhost opt]#cd /usr/java
[root@localhost java]#ll
[root@localhost java]#cd /usr/java/jdk1.8.0_291-amd64/bin
(3)更换 jdk 工具
在Linux 中,默认安装的是openjdk工具,所以我们需要把它永久更换成刚安装的oraclejdk
为了让系统能够识别并使用这个JDK版本作为默认Java环境,需要设置一个环境变量,并写在开机自动检测的文件当中
- 对于全局生效(所有用户):编辑 /etc/profile 或 /etc/profile.d/*.sh文件。
- 对于仅当前用户生效:编辑 ~/.bashrc 或 ~/.bash_profile 文件
[root@localhost bin]#vim /etc/profile.d/jdk.sh
export JAVA_HOME=/usr/java/default
#设置了JAVA_HOME环境变量,它指向Java开发工具包(JDK)的安装目录export PATH=$JAVA_HOME/bin:$PATH
#修改了系统PATH环境变量,在原有PATH值前添加了 $JAVA_HOME/bin。这样一来,在执行java等命令时
#系统会在指定的Java bin目录下查找并优先执行相应的命令。也就是先执行$JAVA_HOME里的Java命令
#找到相应的命令后,立即停止查找export JRE_HOME=$JAVA_HOME/jre
#非必须项,但常见做法。设置了JRE_HOME环境变量,指向Java运行时环境(JRE)的安装目录
#通常位于JDK安装目录下的jre子目录export CLASSPATH=$JAVA_HOME/lib/:$JRE_HOME/lib/
#非必须项。设置了CLASSPATH环境变量,用于Java应用程序加载类文件时搜索的路径列表
#在早期Java版本中,需要通过CLASSPATH来指定自定义类库的位置
#重新加载文件或者重启
[root@localhost bin]#. /etc/profile.d/jdk.sh
或者
[root@localhost bin]#reboot
2.1.2 二进制安装
(1)事先准备好的二进制包
[root@localhost opt]#tar xf jdk-8u291-linux-x64.tar.gz -C /usr/local/
[root@localhost opt]#cd /usr/local/
[root@localhost local]#ln -s jdk1.8.0_291/ jdk
(2)安装完成后,与rpm安装一样,需要永久更换成刚安装的oraclejdk,需要设环境变量
2.2 安装Tomcat
Tomcat可以yum安装,但系统yum源中的版本过于老旧,所以不推荐安装。
那我们就需要在官方网站下载新版本的安装包后,进行二进制安装即可
#官方和镜像站点下载:
https://tomcat.apache.org/download-80.cgi
https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/
(1)事先准备好新版本的Tomcat安装包,然后解压
(2)复制文件至指定目录/usr/local,并自定义名称tomcat
[root@localhost opt]#cp -r /opt/apache-tomcat-9.0.16 /usr/local/tomcat
(3)创建程序用户和systemd管理文件
[root@localhost opt]#useradd -M -s /sbin/nologin tomcat
[root@localhost opt]#chown -R tomcat:tomcat /usr/local/tomcat/
[root@localhost opt]#cat > /usr/lib/systemd/system/tomcat.service <<EOF
[Unit]
Description=Tomcat
After=syslog.target network.target[Service]
Type=forking
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh
RestartSec=3
PrivateTmp=true
User=tomcat
Group=tomcat[Install]
WantedBy=multi-user.targetEOF[root@localhost opt]#systemctl daemon-reload
[root@localhost opt]#systemctl start tomcat
(4)开启tomcat后,过滤其端口号和进程
[root@localhost opt]#ss -natp | grep 8080
[root@localhost opt]#ps aux | grep tomcat
(5)开启tomcat后,能否使用pstree过滤到tomcat进程pid
由于tomcat 程序是使用java进程运行的,所以不能过滤到其pid号,只能过滤java进程的pid号
[root@localhost opt]#pstree -p | grep tomcat
[root@localhost opt]#pstree -p | grep java
3、Tomcat相关文件
使用tree命令可查看到/usr/local/tomcat/目录下所有的文件
[root@localhost opt]#cd /usr/local/tomcat/
[root@localhost tomcat]#tree
3.1 目录文件
目录名字 | 功能 |
---|---|
bin | 存放启动和关闭 Tomcat 的脚本文件,比较常用的是 catalina.sh、startup.sh、shutdown.sh 三个文件 |
conf | 存放 Tomcat 服务器的各种配置文件,比较常用的是 server.xml、context.xml、tomcat-users.xml、web.xml 四个文件。 |
lib | 存放 Tomcat 服务器的 jar 包,一般不作任何改动,除非连接第三方服务,比如 redis,那就需要添加相对应的 jar 包 |
logs | 存放 Tomcat 日志 |
temp | 存放 Tomcat 运行时产生的文件 |
webapps | 存放项目资源的目录 |
work | Tomcat 工作目录,一般清除 Tomcat 缓存的时候会使用到(升级版本时注意要删除里面的缓存) |
3.2 普通文件
README.md、BUILDING.txt | 提供了关于Tomcat的简要说明和构建过程的文档 |
---|---|
CONTRIBUTING.md | 如果存在,通常是指导如何为Tomcat项目做出贡献的指南 |
LICENSE 和 NOTICE | 分别包含了Tomcat使用的开源许可证条款和版权归属、第三方软件声明等法律信息 |
RELEASE-NOTES或类似的文件 | 记录了当前版本的发布说明和变更日志 |
3.3 bin目录下的启动文件
- 以.bat结尾的文件一般为windows环境下的相关文件
- 以.sh结尾的文件为Unix/Linux环境下的相关文件
其中最常见的文件 | |
---|---|
catalina.sh | Unix/Linux平台下启动、停止和管理Tomcat服务器的主要脚本 |
startup.sh | 启动Tomcat服务器的脚本 |
shutdown.sh | 关闭Tomcat服务器的脚本 |
3.4 conf目录下的配置文件
server.xml | Tomcat服务器的主要配置文件,包括端口号设置、连接器配置(HTTP/HTTPS/AJP)、引擎、主机、上下文(Web应用程序)以及其他全局服务配置 |
---|---|
web.xml | 位于conf/webapps/ROOT/WEB-INF或全局配置目录下,这是Servlet容器的默认部署描述符,定义了所有Web应用通用的初始化参数、Servlet映射、过滤器、监听器等配置。对于每个单独的应用,也会有各自的web.xml文件放置在各自的WEB-INF目录内 |
context.xml | 用于定义所有web应用均需加载的 Context 配置,此文件为所有的 webapps 提供默认配置,每个web应用也可以使用自已专用的配置,它通常由专用的配置文件 context.xml来定义,其存放位置为WEB-INF/目录中,覆盖全局的文件 |
Catalina | 这不是一个文件,而是指Tomcat服务器的核心容器。它负责处理所有的Web应用请求,并且通过加载conf目录下的配置文件来管理服务器的行为 |
catalina.properties | 这个文件包含了Catalina容器的一些全局属性设置,例如日志路径、临时工作目录、JMX设置等 |
jaspic-providers.xml | JAAS的提供者配置文件,用于定义和配置安全认证与授权的服务提供商 |
jaspic-providers.xsd | 对应的XML模式定义文件(XSD),用来验证jaspic-providers.xml文件是否遵循正确的结构和内容规范 |
catalina.policy | 当使用security选项启动omcat时,用于为tomcat设置安全策略 |
logging.properties | Tomcat的日志系统配置文件,定义了各种日志级别、日志输出位置以及格式化样式 |
tomcat-users.xml | 用户账号和权限信息的配置文件,定义了可以访问Tomcat Manager应用和其他受保护资源的用户名、密码以及角色分配 |
tomcat-users.xsd | 同样作为模式定义文件,用于验证tomcat-users.xml文件的格式正确性 |
3.5 日志文件
catalina.2020-07-14.log | tomcat服务日志 |
---|---|
catalina.out | tomcat服务错误日志 |
host-manager.2020-07-14.log | host manager管理日志 |
localhost.2020-07-14.log | 默认主机日志 |
localhost_access_log.2020-07-14.txt | 默认主机正常访问日志 |
manager.2020-07-14.log | manager管理日志 |
日志格式:
可在/usr/local/tomcat/conf/server.xml 配置文件下修改格式
%a - Remote IP address
%A - Local IP address
%b - Bytes sent, excluding HTTP headers, or '-' if zero
%B - Bytes sent, excluding HTTP headers
%h - Remote host name (or IP address if enableLookups for the connector is false)
%H - Request protocol
%l - Remote logical username from identd (always returns '-')
%m - Request method (GET, POST, etc.)
%p - Local port on which this request was received. See also %{xxx}p below.
%q - Query string (prepended with a '?' if it exists)
%r - First line of the request (method and request URI)
%s - HTTP status code of the response
%S - User session ID
%t - Date and time, in Common Log Format
%u - Remote user that was authenticated (if any), else '-'
%U - Requested URL path
%v - Local server name
%D - Time taken to process the request in millis. Note: In httpd %D is
microseconds. Behaviour will be aligned to httpd in Tomcat 10 onwards.
%T - Time taken to process the request, in seconds. Note: This value has
millisecond resolution whereas in httpd it has second resolution. Behaviour will
be align to httpd in Tomcat 10 onwards.
%F - Time taken to commit the response, in millis
%I - Current request thread name (can compare later with stacktraces)
%X - Connection status when response is completed:
X = Connection aborted before the response completed.
+ = Connection may be kept alive after the response is sent.
- = Connection will be closed after the response is sent.
There is also support to write information incoming or outgoing headers, cookies,
session or request attributes and special timestamp formats. It is modeled after
the Apache HTTP Server log configuration syntax. Each of them can be used
multiple times with different xxx keys:
%{xxx}i write value of incoming header with name xxx
%{xxx}o write value of outgoing header with name xxx
%{xxx}c write value of cookie with name xxx
%{xxx}r write value of ServletRequest attribute with name xxx
%{xxx}s write value of HttpSession attribute with name xxx
%{xxx}p write local (server) port (xxx==local) or remote (client) port
(xxx=remote)
%{xxx}t write timestamp at the end of the request formatted using the enhanced
SimpleDateFormat pattern xxx
3.6 临时文件和缓存文件
临时文件
缓存文件
拓展:版本升级
tomcat版本升级出错,是什么导致的呢?
答:可能是因为旧版本的缓存没有清除,所以要再升级新版本之前,清除旧版本的所有缓存
软件版本升级:
原来app1.1旧版本是利用软链接来使客户方便访问
现在又有一个app1.2的新版本如何更新呢?
那么就需要删除旧版本的软链接达到下线的目的,再做新版本的软链接到规定目录,供客户访问
[root@localhost mnt]#rm -rf /usr/local/tomcat/webapps/app
[root@localhost mnt]#ln -s /mnt/app1.2 /usr/local/tomcat/webapps/app
注:
其实客户访问的app名一直没有变化,变化的其实是软链接的源文件被改变了,这样客户访问的内容也会发生变化
3.7 webapps目录文件
docs | 这个文件夹包含了Tomcat的官方文档和教程,如安装指南、用户手册、API参考等。 当Tomcat启动后,可以通过浏览器访问 http://localhost:8080/docs/ 来查看这些文档 |
---|---|
examples | 提供了一系列示例Web应用程序,包括Servlets、JSPs和其他Java EE技术的演示代码。 通过运行 http://localhost:8080/examples/,您可以浏览并尝试这些示例应用 |
host-manager | 是一个用于管理和配置虚拟主机(Host)的Web应用程序。 管理员可以使用它来添加、删除或编辑Tomcat中的Host配置。要访问该应用,需要在tomcat-users.xml中设置适当的权限,并通过 http://localhost:8080/host-manager/ 访问 |
manager | 是一个更为全面的应用程序部署管理工具,允许管理员上传WAR文件、启动、停止、重新加载以及删除已经部署的应用程序。 同样,访问此应用也需要在tomcat-users.xml中设置权限,然后通过 http://localhost:8080/manager/ 访问 |
ROOT | 这是一个特殊的Web应用程序,它的上下文路径是空字符串,所以直接访问服务器地址 http://localhost:8080/ 时显示的内容就是ROOT应用的内容。 通常可以将自定义的网站主页放置在这个目录下,以便于通过服务器域名或IP地址直接访问主页面 |
3.8 访问目录
默认的访问目录:/usr/local/tomcat/webapps/ROOT目录
(1)如果在该目录下新建一个index.html文件,就会默认访问这个文件
这是因为在conf/web.xml这个文件中定义了全局的文件访问顺序,在没有局部配置的情况下,都已这个文件定义的为主
(2)在/usr/local/tomcat/webapps/ROOT/WEB-INF/目录下也有一个web-xml文件,这个文件并没有定义访问顺序,所以默认以全局配置文件为主。局部配置优先级比全局配置高,所以可在局部配置文件定义访问顺序
[root@localhost tomcat]#vim webapps/ROOT/WEB-INF/web.xml
<welcome-file-list><welcome-file>index.jsp</welcome-file><welcome-file>index.htm</welcome-file><welcome-file>index.html</welcome-file></welcome-file-list>
[root@localhost tomcat]#systemctl restart tomcat.service
现在默认访问的就是idnex.jsp文件,当然也可以自定义其它文件
4、Tomcat组件
4.1 组件分层和分类
- 顶级组件
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、cluster
名称 | 说明 |
---|---|
server | 服务器,Tomcat运行的进程实例,一个Server中可以有多个service,但通常就一个 |
service | 服务,用来组织Engine(引擎)和Connector(连接器,端口)的对应关系,一个service中只有一个Engine |
connector | 连接器,负责客户端的HTTP、HTTPS、AJP等协议连接。一个Connector只属于某一个Engine |
Engine | 即引擎,用来响应并处理用户请求。一个Engine上可以绑定多个Connector |
Host | 即虚拟主机,可以实现多虚拟主机,例如使用不同的主机头区分 |
Context | 应用的上下文,配置特定url路径映射和目录的映射关系: url => directory |
结合配置文件来说明
[root@localhost ~]#vim /usr/local/tomcat/conf/server.xml
#注释的格式
<!--....................-->
#配置文件主要内容
<?xml version="1.0" encoding="UTF-8"?>
<Server port="8005" shutdown="SHUTDOWN"><Service name="Catalina"><Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" /><Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /><Engine name="Catalina" defaultHost="localhost"><Host name="localhost" appBase="webapps"unpackWARs="true" autoDeploy="true"></Host></Engine></Service>
</Server>
[root@localhost ~]#sed -nr '/.*<!.*/,/.*->.*/!p' /usr/local/tomcat/conf/server.xml|grep -v "^$"
Server
'定义整个服务器级别的属性,如监听关闭命令的端口号(port="8005")以及用于关闭Tomcat服
务的命令字符串(shutdown="SHUTDOWN")。'Listener
'定义了一系列监听器,它们会在Tomcat启动和停止时执行特定的任务。例如:
VersionLoggerListener:在启动时打印版本信息。
JreMemoryLeakPreventionListener 和 ThreadLocalLeakPreventionListener
用于防止Java内存泄漏问题。
GlobalResourcesLifecycleListener:管理全局命名资源的生命周期。'
GlobalNamingResources
'定义了全局的JNDI资源,此处有一个名为 "UserDatabase" 的资源,它是一个用户数据库,
使用 MemoryUserDatabaseFactory 创建,并关联到 conf/tomcat-users.xml 文件中定义
的用户数据。'Service
'定义了一个名为 "Catalina" 的服务,它是Tomcat处理请求的核心组件集合,包括多个
Connector和一个Engine。'Connector
'定义了服务器对外提供HTTP服务的监听器,监听8080端口,协议为HTTP/1.1,设置了连接超时
时间、重定向HTTPS端口等属性。'
Engine
'作为顶级容器,代表整个Catalina Servlet容器,名称为 "Catalina",默认
主机名是 "localhost"。'Realm
'定义了安全域,用于认证和授权。这里包含两个Realm,首先通过 LockOutRealm 进行锁定策略
控制,然后使用基于内存的 UserDatabaseRealm 实现用户认证,从前面定义的 "UserDatabase"JNDI资源中读取用户信息。'Host
'定义了名为 "localhost" 的虚拟主机,设置应用基础目录(appBase)为 "webapps",并允许
自动解压WAR文件部署应用、启用自动部署功能。'
Valve
'定义了一个访问日志阀门(AccessLogValve),负责记录访问日志。指定日志存储路径、前缀、后
缀及日志格式。'
4.2 tomcat处理请求过程
-
假设来自客户的请求为: http://localhost:8080/test/index.jsp 浏览器端的请求被发送到服务端端口8080,Tomcat进程监听在此端口上。通过侦听的HTTP/1.1Connector获得此请求。
-
Connector把该请求交给它所在的Service的Engine来处理,并等待Engine的响应
-
Engine获得请求192.168.91.100:8080/test/index.jsp,遍历它所有虚拟主机Host
-
Engine匹配到名为localhost的Host。如果匹配不到,就把请求交给该Engine中的defaultHost处理. localhost Host获得请求/test/index.jsp,匹配它所拥有的所有Context
-
Host匹配到路径为/test的Context
-
path=/test的Context获得请求index.jsp,在它的mapping table中寻找对应的servlet
-
Context匹配到URLPATTERN为*.jsp的Sservlet,对应于]spServlet类构造HtpServletRequest对象和HttpServletResponse对象,作为参数调用)spSer let的doGet或doPost方法。
-
Context把执行完了之后的HttpServletResponse对象返回给Host
-
Host把HttpServletResponse对象返回给Engine
-
Engine把HttpServletResponse对象返回给Connector
-
Connector把HttpServletResponse对象返回给浏览器端
4.3 Tomcat核心组件
- Web容器
负责底层的HTTP协议
- Servlet容器
由catalina脚本帮忙处理的servlet代码,主要处理后端逻辑业务,catalina实际处理的是Servlet代码,而Servlet代码是由Java编写的
- JSP容器
JSP:在正常的html标签中嵌入一些java代码 这些JSP最终会被翻译成Servlet代码被执行,主要提供提供前端页面展示<% %>
总之,Tomcat就是一个容器,在这个容器中有三大核心组件: WEB、Servlet 和JSP,所以Tomcat是极其轻量级别的,核心组件都是支持基本运行的组件
5、tomcat端口号
tomcat是多端口监听,端口分别为8005、8009、8080
5.1 8005端口
这个端口是Tomcat的shutdown端口。当需要关闭Tomcat时,可以通过向这个端口发送一个特
定的命令来安全地终止服务。例如,通过运行bin/shutdown.sh(在Unix/Linux系统)
或bin/shutdown.bat(在Windows系统),或者直接通过网络发送请求到该端口来关闭Tomcat
5.2 8009端口
这个端口是用于AJP协议(Apache JServ Protocol)的连接器监听端口。AJP是一种高效、轻
量级的通信协议,主要用于将Web服务器(如Apache HTTP Server)与Java应用服务器(如Tomcat)
之间的负载均衡和代理功能进行整合。通过配置Apache HTTP Server使用mod_proxy_ajp模块并
将其反向代理指向8009端口,可以实现HTTP请求从Apache透明地转发给Tomcat处理,从而实现高性能的Web部署架构
5.3 8080端口
这是最常见的端口,它是Tomcat用来接收外部HTTP请求的默认监听端口。任何通过标准HTTP协
议访问Tomcat上托管的Web应用程序的客户端(如浏览器)都会连接到这个端口。如果您希望更
改Tomcat提供HTTP服务的端口号,可以在conf/server.xml文件中找到相关的Connector配置,
并修改其port属性值
tomcat的web服务监听的端口号是8080,所以访问时需要使用web浏览器访问本机的8080端口