主要内容:
Tomcat概述、Tomcat部署安装、Tomcat应用案例(虚拟主机、地址重写、SSL加密站点、Tomcat日志)、Tomcat集群,maven应用
一、Tomcat概述
Apache Tomcat(简称 Tomcat)是一个开源的 Java Servlet 容器,由 Apache 软件基金会开发和维护。它实现了 Java Servlet 和 JavaServer Pages(JSP)规范,为 Java 应用程序提供了一个轻量级的、高性能的 Web 服务器环境。Tomcat 不仅可以作为独立的 Web 服务器运行,还可以与其他 Web 服务器(如 Apache HTTP Server)集成,提供更强大的功能和性能。
1)Java概述
Java 是一种广泛使用的编程语言,由 Sun Microsystems(后被 Oracle 收购)于 1995 年推出。Java 语言具有跨平台性、面向对象、简单性、安全性等特点,广泛应用于企业级应用、移动应用、嵌入式系统、Web 开发等领域。
Java体系:
- Jave SE(标准版)
- Java EE(企业版)
2)JDK 和 JRE
JDK(Java Development Kit):
Java 开发工具包,包含了 Java 编译器(javac)、Java 运行时环境(JRE)、调试工具(如 jdb)、文档生成工具(如 javadoc)等,是开发 Java 应用程序的必备工具。
JRE(Java Runtime Environment):
Java 运行时环境,包含了 Java 虚拟机(JVM)、Java 类库(如 java.lang、java.util 等),是运行 Java 应用程序的必备环境。
3)Java Servlet概述
Java Servlet 是 Java 技术中用于处理 Web 请求和响应的标准组件。Servlet 运行在 Servlet 容器(如 Tomcat)中,可以接收和处理客户端(通常是浏览器)的 HTTP 请求,并生成动态的 HTTP 响应。Servlet 提供了一种基于组件的、可扩展的 Web 应用开发方式,使得开发者可以专注于业务逻辑的实现,而不必关心底层的网络通信细节。
常见Servlet容器:
- IBM websphere
- Oracle weblogic
- Apache tomcat(免费)
- Redhet Jboss
二、Tomcat 部署安装
前提条件:
- Java 开发工具包 (JDK):确保你的系统上已经安装了 JDK,并且 JAVA_HOME 环境变量已经配置
- 下载 Tomcat:从 Apache Tomcat 官方网站 下载最新版本的 Tomcat
- 网址:Apache Tomcat® - Apache Tomcat 9 Software Downloads
1)安装部署JDK(jdk1.8)
2)安装tomcat
3)启动tomcat
4)测试服务器
Tomcat配置文件及目录
- /usr/local/tomcat //安装目录
- /usr/local/tomcat/conf/ //配置文件目录
- /usr/local/tomcat/bin/ //主程序目录
- /usr/local/tomcat/lib/ //库文件目录
- /usr/local/tomcat/webapps/ //网页目录
- /usr/local/tomcat/work/ //自动编译目录(jsp代码转换servlet)
- /usr/local/tomcat/logs/ //日志目录
- /usr/local/tomcat/temp/ //临时目录
Tomcat进程管理
- 命令:/usr/local/tomcat/bin/startup.sh //启动服务
- 命令:/usr/local/tomcat/bin/shutdown.sh //关闭服务
例如:安装部署Tomcat服务器
步骤1:使用RPM安装JDK基础环境
[root@proxy ~]# yum -y install java-1.8.0-openjdk //安装JDK
[root@proxy ~]# yum -y install java-1.8.0-openjdk-devel //JDK依赖包(War包)
[root@proxy ~ROOT]# java -version //查看JAVA版本
openjdk version "1.8.0_161"
OpenJDK Runtime Environment (build 1.8.0_161-b14)
OpenJDK 64-Bit Server VM (build 25.161-b14, mixed mode)
步骤2:安装tomcat
[root@proxy ~]# cd lnmp_soft/
[root@proxy lnmp_soft]# ls
apache-tomcat-8.0.30.tar.gz nginx-1.17.6 varnish-5.2.1.tar.gz
apache-tomcat-9.0.6.tar.gz nginx-1.17.6.tar.gz vpn
[root@proxy lnmp_soft]# tar -xf apache-tomcat-8.0.30.tar.gz //解压压缩包
[root@proxy lnmp_soft]# cp -r apache-tomcat-8.0.30 /usr/local/tomcat //拷贝压缩包到安装目录
[root@proxy lnmp_soft]# ls /usr/local/tomcat/
bin lib logs RELEASE-NOTES temp work
conf LICENSE NOTICE RUNNING.txt webapps
因tomcat由Java编写,无需./configure源码编译安装,直接解压复制到相应目录即可使用;
步骤3:启动tomcat服务
[root@proxy ~]# /usr/local/tomcat/bin/startup.sh //脚本开启tomcat服务
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
步骤4:查看服务端口信息(8080 8009 8005)
[root@proxy ~]# netstat -anptul | grep java //查看java监听的端口
tcp6 0 0 127.0.0.1:8005 :::* LISTEN 4598/java
tcp6 0 0 :::8009 :::* LISTEN 4598/java
tcp6 0 0 :::8080 :::* LISTEN 4598/java
由于Tomcat由Java编写。在netstat命令查看时,无法找到以tomcat名的服务;需使用java为服务名查询;
测试:浏览器访问默认首页http://192.168.2.5:8080/
tomcat服务运行正常需使用3个端口:
8005关闭Tomcat程序使用、8009开发者使用、8080为网页端口(tomcat不占用80端口)
注意:tomcat存在服务不成功问题,与随机字符有关,因默认tomcat启动需要从/dev/random读取大量的随机数据,默认该设备生成随机数据的速度很慢,导致8005端口启动非常慢,最终服务启动失败;可使用下面的命令用urandom替换random;
查看随机字符设备:
[root@proxy ~]# ls /dev/random //存储随机字符(与当日输入命令产生有关)
/dev/random
[root@proxy ~]# ls /dev/urandom //已存储海量的随机字符
/dev/urandom
- 解决方案1:随意输入命令例如ls、touch等。则可以产生随即字符(随机,不可靠)
- 解决方案2:修改软链接方式,使用已生成海量的随机字符的设备
[root@proxy ~]# mv /dev/random /dev/random.bak //备份random
[root@proxy ~]# ln -s /dev/urandom /dev/random
[root@proxy ~]# ll /dev/random
lrwxrwxrwx. 1 root root 12 4月 15 10:22 /dev/random -> /dev/urandom
[root@proxy ~]# killall java
[root@proxy ~]# /usr/local/tomcat/bin/startup.sh
- 解决方案3:安装rng-tools工具
[root@proxy ~]# yum install rng-tools
[root@proxy ~]# systemctl start rngd
[root@proxy ~]# systemctl enable rngd
步骤5:编写测试html和JSP页面
Tomcat支持静态和动态页面,无需像Nginx一样安装php解释器来识别动态网页;
1)编写测试html页面(静态)
[root@proxy ~]# echo "I am Tomcat" > /usr/local/tomcat/webapps/ROOT/test.html
测试:浏览器访问测试静态页面http://192.168.2.5:8080/test.html
2)编写测试jsp页面(动态)
[root@proxy ~]# vim /usr/local/tomcat/webapps/ROOT/test.jsp
<html>
<body>
<center>
Now time is: <%=new java.util.Date()%> //显示服务器当前时间
</center>
</body>
</html>
测试:浏览器访问测试动态页面http://192.168.2.5:8080/test.jsp
还原操作1:
[root@proxy ~]# cp ~/lnmp_soft/apache-tomcat-8.0.30/conf/server.xml /usr/local/tomcat/conf/server.xml
还原操作2:
[root@proxy ~]# cd ~/lnmp_soft/
[root@proxy lnmp_soft]# killall java
[root@proxy lnmp_soft]# rm -rf /usr/local/tomcat/
[root@proxy lnmp_soft]# cp -r apache-tomcat-8.0.30 /usr/local/tomcat
案例:apache-tomcat-9.0安装步骤
1)安装步骤
下载并解压 Tomcat
下载压缩包如
apache-tomcat-9.0.xx.tar.gz
,然后解压到希望安装的目录,例如:tar -xvzf apache-tomcat-9.0.xx.tar.gz -C /opt
设置环境变量
为方便使用,可以设置
CATALINA_HOME
环境变量,指向 Tomcat 的安装目录。在 Linux 系统上,可以在~/.bashrc
或~/.bash_profile
文件中添加以下内容:export CATALINA_HOME=/opt/apache-tomcat-9.0.xx export PATH=$PATH:$CATALINA_HOME/bin
然后重新加载配置文件:
source ~/.bashrc
启动 Tomcat
进入 Tomcat 的
bin
目录,启动 Tomcat 服务器:cd $CATALINA_HOME/bin ./startup.sh
或者在 Windows 系统上:
cd %CATALINA_HOME%\bin startup.bat
验证安装
打开浏览器,访问
http://localhost:8080
,你应该能看到 Tomcat 的欢迎页面,表示 Tomcat 已经成功安装并运行停止 Tomcat
要停止 Tomcat 服务器,可以运行以下命令:
cd $CATALINA_HOME/bin ./shutdown.sh
或者在 Windows 系统上:
cd %CATALINA_HOME%\bin shutdown.bat
2)配置 Tomcat
管理用户
默认情况下,Tomcat 的管理界面是受保护的。需要在
conf/tomcat-users.xml
文件中配置管理用户。例如:<tomcat-users> <role rolename="manager-gui"/> <role rolename="admin-gui"/> <user username="admin" password="admin" roles="manager-gui,admin-gui"/> </tomcat-users>
配置端口
默认情况下,Tomcat 使用 8080 端口。如果你需要更改端口,可以编辑
conf/server.xml
文件,找到<Connector>
标签并修改port
属性。例如:<Connector port="8081" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
部署应用
将你的 WAR 文件复制到
webapps
目录下,Tomcat 会自动解压并部署应用。例如:cp myapp.war $CATALINA_HOME/webapps
三、Tomcat 虚拟主机
Tomcat 是一个开源的 Java Servlet 容器,用于运行 Java Web 应用程序。Tomcat 的主配置文件是 server.xml
,它位于 Tomcat 安装目录的 conf
子目录下。这个文件包含了 Tomcat 服务器的核心配置信息,定义了服务器的基本组件和行为。
1、主配置文件解析
- 主配置文件:/usr/local/tomcat/conf/server.xml
- server.xml配置文件框架(严格区分大小写,严禁嵌套虚拟主机)
解释说明:
<Server>
- 它代表整个容器,是Tomcat实例的顶层元素,由org.apache.catalina.Server接口定义,它包含一个元素,并且它不能做为任何元素的子元素;
<Server>
元素是server.xml
文件的根元素,代表整个 Tomcat 服务器实例。它包含一个或多个<Service>
元素。<Service>
- 该元素由org.apache.catalina.Service接口定义,它包含一个Engine元素,以及一个或多个Connector,这些Connector元素共享用同一个Engine元素;
<Service>
元素定义了一个服务,包含一个或多个<Connector>
元素和一个<Engine>
元素。<Connector>
- 由Connector接口定义,Connector元素代表与客户程序实际交互的给件,它负责接收客户请求,以及向客户返回响应结果;
<Connector>
元素定义了 Tomcat 如何与客户端进行通信。常见的配置包括 HTTP 连接器和 AJP 连接器。例如:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
<Engine>
- 由org.apahce.catalina.Engine接口定义,每个Service元素只能有一个Engine元素,处理在同一个Service中所有Connector元素接收到的客户请求;
<Engine>
元素定义了处理请求的 Catalina 引擎。它包含一个或多个<Host>
元素。<Host>
- 它由Host接口定义.一个Engine元素可以包含多个Host元素,每个Host的元素定义了一个虚拟主机,它包含了一个或多个Web应用;
<Host>
元素定义了一个虚拟主机,包含一个或多个<Context>
元素。例如:
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> </Host>
<Context>
- 它由Context接口定义,是使用最频繁的元素,每个Context代表了运行在虚拟主机上的单个Web应用,一个Host可以包含多个Context元素。
<Context>
元素定义了一个 Web 应用程序的上下文。例如:
<Context path="/myapp" docBase="myapp" reloadable="true" />
<Realm>
<Realm>
元素定义了用户和角色的存储机制,用于安全认证。<Valve>
<Valve>
元素定义了请求处理过程中的附加处理逻辑,如访问日志记录。
除了 server.xml
,Tomcat 还有其他一些重要的配置文件,例如:
web.xml
:位于conf
目录下,定义了全局的 Web 应用程序配置。context.xml
:位于conf
目录下,定义了全局的上下文配置。tomcat-users.xml
:位于conf
目录下,定义了 Tomcat 管理界面的用户和角色。
2、Tomcat架构及请求处理流程
Tomcat 的核心架构包括以下几个主要组件:
- Server:代表整个 Tomcat 服务器实例。
- Service:包含一个或多个连接器(Connector)和一个引擎(Engine)。
- Connector:负责处理客户端请求,并将请求传递给适当的容器。
- Engine:处理请求的顶层容器,包含一个或多个虚拟主机(Host)。
- Host:代表一个虚拟主机,包含一个或多个上下文(Context)。
- Context:代表一个 Web 应用程序。
当客户端(如浏览器)发送一个 HTTP 请求到 Tomcat 服务器时,请求的处理流程如下:
连接器(Connector):
- 连接器监听指定的端口(如 8080),接收客户端的 HTTP 请求。
- 连接器将请求数据解析为标准的 HTTP 请求格式。
引擎(Engine):
- 连接器将解析后的请求传递给引擎。
- 引擎根据请求的域名或 IP 地址,将请求分发到适当的虚拟主机(Host)。
虚拟主机(Host):
- 虚拟主机根据请求的上下文路径(Context Path),将请求分发到适当的 Web 应用程序(Context)。
上下文(Context):
- 上下文代表一个具体的 Web 应用程序。
- 上下文根据请求的 URL 路径,找到对应的 Servlet 或 JSP 页面。
Servlet/JSP:
- Servlet 或 JSP 页面处理请求,生成响应内容。
- 响应内容通过相同的组件层次结构返回给客户端。
案例1:Tomcat部署虚拟主机
- 注意:修改server.xml配置文件,严格区分大小写
步骤1:修改server.xml配置文件,创建虚拟主机
[root@proxy ~]# vim /usr/local/tomcat/conf/server.xml
...
<Host name="www.b.com" appBase="web_b" unpackWARs="true" autoDeploy="true"> //添加虚拟主机
</Host>
<Host name="www.a.com" appBase="webapps" unpackWARs="true" autoDeploy="true"> //修改默认虚拟主机的name,方便做实验对比
...
</Host>
name=“指定域名”;appBase=“指定网页存放路径”;unpackWARs="true"自动解WAR包;autoDeploy="true"自动部署(网页开发)
步骤2:创建虚拟主机对应的页面根路径
[root@proxy ~]# mkdir -p /usr/local/tomcat/web_b/ROOT/
[root@proxy ~]# echo "BBB" > /usr/local/tomcat/web_b/ROOT/index.html
[root@proxy ~]# echo "AAA" > /usr/local/tomcat/webapps/ROOT/index.html
步骤3:重启Tomcat服务
[root@proxy ~]# /usr/local/tomcat/bin/shutdown.sh //关闭服务
[root@proxy ~]# /usr/local/tomcat/bin/startup.sh //启动服务
[root@proxy ~]# ss -anptul | grep java
tcp LISTEN 0 1 ::ffff:127.0.0.1:8005 :::* users:(("java",pid=8954,fd=73))
tcp LISTEN 0 100 :::8009 :::* users:(("java",pid=8954,fd=51))
tcp LISTEN 0 100 :::8080 :::* users:(("java",pid=8954,fd=46))
步骤4:配置/etc/hosts文件
[root@proxy ~]# vim /etc/hosts
192.168.2.5 www.a.com www.b.com
测试:
[root@proxy ~]# curl www.a.com:8080 //注意访问的端口为8080
AAA
[root@proxy ~]# curl www.b.com:8080
BBB
浏览器访问测试页面http://www.a.com:8080及http://www.b.com:8080
补充:虚拟主机配置文件中的 autoDeploy 和 unpackWARs 功能解释:
- autoDeploy 自动更新网站功能,有助于开发工程师
- unpackWARs 自动解war包,通常开发工程师习惯将网站文件打成war包(类似tar包)上传到服务器,但还需要解包很麻烦,但有了这个功能就可以自动解开
例如:测试unpackWARs="true"自动解WAR包(前提是tomcat服务开启)
[root@proxy ~]# yum -y install java-1.8.0-openjdk-devel //此依赖包中包含可测试的war包
[root@proxy ~]# jar -cf b.war /var/log/ //jar命令压缩b.war包
[root@proxy ~]# ls
anaconda-ks.cfg b.war lnmp_soft lnmp_soft.tar.gz test.jpg
[root@proxy ~]# cp b.war /usr/local/tomcat/web_b/ //拷贝到虚拟主机网页目录
[root@proxy ~]# cd /usr/local/tomcat/web_b/
[root@proxy web_b]# ls //war包已被自动解压成目录
b b.war ROOT
unpackWARs="true"与autoDeploy="true"在配置文件中可以不写,默认功能开启,不需要重启tomcat服务;若需要将功能关闭,则将“true”改称”false”;
案例2:使用元素,实现“地址跳转”
- path 匹配输入的地址栏路径
- docBase 定义默认网站首页路径(针对webapps/ROOT)
- appBase 指定存放网页目录(针对webapps)
如果不加元素及docbase,默认webapps/ROOT就已经指定了网站首页路径,如果需要修改默认目录首页路径,就需要加;
例如1:修改www.b.com网站的首页目录,docBase""匹配为“空”
[root@proxy ~]# vim /usr/local/tomcat/conf/server.xml
<Host name="www.b.com" appBase="web_b" unpackWARs="true" autoDeploy="true">
<Context path="" docBase="" /> //使用docBase参数修改默认网站首页路径
</Host>
...
[root@proxy ~]# echo "web_b/ROOT/index.html" > /uar/loacl/tomcat/web_b/ROOT/index.html
[root@proxy ~]# echo "web_b/index.html" > /uar/loacl/tomcat/web_b/index.html
[root@proxy ~]# /usr/local/tomcat/bin/shutdown.sh
[root@proxy ~]# /usr/local/tomcat/bin/startup.sh
测试:当用户访问www.b.com:8080,显示为/uar/loacl/tomcat/web_b目录下的页面内容;
[root@proxy ~]# curl www.b.com:8080
web_b/index.html
例如2:修改www.b.com网站的首页目录,docBase匹配为“ABC”
[root@proxy ~]# vim /usr/local/tomcat/conf/server.xml
<Host name="www.b.com" appBase="web_b" unpackWARs="true" autoDeploy="true">
<Context path="" docBase="ABC" /> //使用docBase参数修改默认网站首页路径
</Host>
...
[root@proxy ~]# mkdir /usr/local/tomcat/web_b/ABC/
[root@proxy ~]# echo "ABC" > /usr/local/tomcat/web_b/ABC/index.html
[root@proxy ~]# /usr/local/tomcat/bin/shutdown.sh
[root@proxy ~]# /usr/local/tomcat/bin/startup.sh
测试:当用户访问www.b.com:8080,显示为/uar/loacl/tomcat/web_b/ABC目录下的页面内容;
[root@proxy ~]# curl www.b.com:8080
ABC
例如3:修改www.b.com网站的首页目录。docBase匹配为“/ABC”
[root@proxy ~]# vim /usr/local/tomcat/conf/server.xml
<Host name="www.b.com" appBase="web_b" unpackWARs="true" autoDeploy="true">
<Context path="" docBase="/ABC" /> //使用docBase参数修改默认网站首页路径
</Host>
...
[root@proxy ~]# mkdir /ABC //根目录下创建/ABC目录
[root@proxy ~]# echo "/ABC/index.html" > /ABC/index.html
[root@proxy ~]# /usr/local/tomcat/bin/shutdown.sh
[root@proxy ~]# /usr/local/tomcat/bin/startup.sh
— 测试:当用户访问www.b.com:8080,显示为/ABC目录下的页面内容;
[root@proxy ~]# curl www.b.com:8080
/ABC/index.html
当docBase指定带“/”路径的目录后,网页目录匹配将与appBase无关联
例如4:修改www.b.com网站的首页目录,path为“/test”,doBase匹配为“/ABC”
[root@proxy ~]# vim /usr/local/tomcat/conf/server.xml
<Host name="www.b.com" appBase="web_b" unpackWARs="true" autoDeploy="true">
<Context path="/test" docBase="/ABC" /> //使用path参数修改地址栏路径
</Host>
...
[root@proxy ~]# /usr/local/tomcat/bin/shutdown.sh
[root@proxy ~]# /usr/local/tomcat/bin/startup.sh
测试:
- ① 当用户访问www.b.com:8080/test,显示为/ABC目录下的页面内容;
- ② 当用户访问www.b.com:8080,显示为/uar/loacl/tomcat/web_b/ROOT目录下的页面内容;
[root@proxy ~]# curl www.b.com:8080
web_b/ROOT/index.html
[root@proxy ~t]# curl www.b.com:8080/test/ //注意访问路径末尾加【/】
/ABC/index.html
例如5:修改www.b.com网站的首页目录,path为“/test”,doBase匹配为“ABC”
[root@proxy ~]# vim /usr/local/tomcat/conf/server.xml
<Host name="www.b.com" appBase="web_b" unpackWARs="true" autoDeploy="true">
<Context path="/test" docBase="ABC" /> //使用path参数修改地址栏路径
</Host>
...
[root@proxy ~]# /usr/local/tomcat/bin/shutdown.sh
[root@proxy ~]# /usr/local/tomcat/bin/startup.sh
测试:
- ① 当用户访问www.b.com:8080/test,显示为/uar/loacl/tomcat/web_b/ABC目录下的页面内容;
- ② 当用户访问www.b.com:8080,显示为/uar/loacl/tomcat/web_b/ROOT目录下的页面内容;
[root@proxy tomcat]# curl www.b.com:8080/test/ //注意访问路径末尾加【/】
ABC
[root@proxy tomcat]# curl www.b.com:8080
web_b/ROOT/index.html
练习扩展:
1)访问www.b.com:8080 看到的是/usr/local/tomcat/test01/a/index.html中的内容
2)访问www.b.com:8080/abc/ 看到的是/var/www/html/index.html中的内容
[root@proxy ~]# vim /usr/local/tomcat/conf/server.xml
<Host name="www.b.com" appBase="test01">
<Context path="" docBase="a" />
<Context path="/abc" docBase="/var/www/html/" />
</Host>
[root@proxy ~]# mkdir -p /usr/local/tomcat/test01/a/
[root@proxy ~]# echo “I am a” > /usr/local/tomcat/test01/a/index.html
[root@proxy ~]# echo “8080/abc/” /var/www/html/index.html
[root@proxy ~]# /usr/local/tomcat/bin/shutdown.sh
[root@proxy ~]# /usr/local/tomcat/bin/startup.sh
[root@proxy ~]# curl www.b.com:8080
I am a
[root@proxy ~]# curl www.b.com:8080/abc/
8080/abc/
案例3:配置SSL加密站点(端口8443)
1)修改server.xml配置文件,元素,开启tomcat服务的8443功能并添加密钥信息:
- keystoreFile="定义密钥文件存储路径"
- keystorePass="密钥库口令"
2)生成私钥证书文件
格式:keytool -genkeypair -alias tomcat -keyalg RSA -keystore /usr/local/tomcat/keystore
- [-genkeypair] 生成密钥对
- [-alias] 密钥别名
- [-keyalg RSA] 定义密钥算法为RSA算法
- [-keystore] 定义密钥文件存储在/usr/local/tomcat/keystore
例如:配置Tomcat支持SSL加密网站
步骤1:修改配置文件并创建支持加密连接的
默认被注释掉,需关闭注释,添加密钥信息即可
[root@proxy ~]# vim /usr/local/tomcat/conf/server.xml
84 <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
85 maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
86 clientAuth="false" sslProtocol="TLS"
87 keystoreFile="/usr/local/tomcat/keystore" keystorePass="123456" />
步骤2:创建加密用的私钥和证书文件
[root@proxy tomcat]# keytool -genkeypair -alias tomcat -keyalg RSA -keystore /usr/local/tomcat/keystore
输入密钥库口令: //“123456”,配置文件定义的keystorePass
再次输入新口令: //“123456”
您的名字与姓氏是什么?
[Unknown]: AJ
您的组织单位名称是什么?
[Unknown]: AJ
您的组织名称是什么?
[Unknown]: AJ
您所在的城市或区域名称是什么?
[Unknown]: AJ
您所在的省/市/自治区名称是什么?
[Unknown]: AJ
该单位的双字母国家/地区代码是什么?
[Unknown]: CNA
CN=AJ, OU=AJ, O=AJ, L=AJ, ST=AJ, C=CNA是否正确?
[否]: Y
输入 <tomcat> 的密钥口令 //“123456”
(如果和密钥库口令相同, 按回车):
再次输入新口令: //“123456”
Warning:
JKS 密钥库使用专用格式。建议使用 "keytool -importkeystore -srckeystore /usr/local/tomcat/keystore -destkeystore /usr/local/tomcat/keystore -deststoretype pkcs12" 迁移到行业标准格式 PKCS12。
[root@proxy ~]# ls /usr/local/tomcat/ //查看目录下是否有keystore文件
bin keystore LICENSE NOTICE RUNNING.txt test01 web_b
conf lib logs RELEASE-NOTES temp webapps work
步骤3:重启服务
[root@proxy ~]# /usr/local/tomcat/bin/shutdown.sh
[root@proxy ~]# /usr/local/tomcat/bin/startup.sh
验证:
[root@proxy tomcat]# curl -k https://www.b.com:8443 //-k,忽略安全风险
web_b/ROOT/index.html
常见报错:
[root@proxy tomcat]# curl -k https://www.b.com:8443
curl: (28) Operation timed out after 300320 milliseconds with 0 out of 0 bytes received
常见报错:创建的keystore指定存放文件与配置文件指定文件不一致
[root@proxy tomcat]# keytool -genkeypair -alias tomcat -keyalg RSA -keystore /usr/local/tomcat/keystort
输入密钥库口令:
keytool 错误: java.lang.Exception: 未生成密钥对, 别名 <tomcat> 已经存在
常见报错:
curl: (7) Failed connect to www.b.com:8443; 拒绝连接
案例4:配置Tomcat日志
- 日志存放目录:/usr/local/tomcat/logs/
- 查看localhost虚拟主机的内容:(可生成tomcat日志)
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" //日志存放目录
prefix="localhost_access_log" suffix=".txt" //日志文件名,日志扩展名
pattern="%h %l %u %t "%r" %s %b" /> //日志输出格式
从默认localhost虚拟主机中把这段进行复制,适当修改即可
例如:为虚拟主机设置不同的tomcat日志文件
[root@proxy ~]# vim /usr/local/tomcat/conf/server.xml
<Host name="www.b.com" appBase="web_b" unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="web_b_log" suffix=".log"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
...
[root@proxy ~]# /usr/local/tomcat/bin/shutdown.sh
[root@proxy ~]# /usr/local/tomcat/bin/startup.sh
验证:
[root@proxy ~]# ls /usr/local/tomcat/logs/ //查看生成的tomcat日志文件
web_b_log.2021-04-15.log
[root@proxy ~]# curl www.b.com:8080 //通过访问站点,添加日志记录
web_b/ROOT/index.html
[root@proxy ~]# cat /usr/local/tomcat/logs/web_b_log.2021-04-15.log
192.168.2.5 - - [15/Apr/2021:16:33:33 +0800] "GET / HTTP/1.1" 200 22
四、Tomcat集群
使用Nginx反向代理tomcat(修改nginx配置)
例如:配置Tomcat集群
1) 在192.168.4.5主机上配置Nginx调度器
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
http{
upstream toms {
server 192.168.2.100:8080;
server 192.168.2.200:8080;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://toms;
}
}
}
2) 在192.168.2.100和192.168.2.200主机上配置Tomcat调度器
[root@web1 ~]# yum -y install java-1.8.0-openjdk //安装JDK环境
[root@web1 ~]# tar -xzf apache-tomcat-8.0.30.tar.gz
[root@web1 ~]# mv apache-tomcat-8.0.30 /usr/local/tomcat
3)启动服务
[root@web1 ~]# /usr/local/tomcat/bin/startup.sh
4) 客户端验证
为防止有数据缓存,可以使用真机的Firefox访问代理服务器,输入Ctrl+F5刷新页面
五、Maven概述
Maven是一个软件项目管理工具,可以对Java项目进行构建、依赖管理;(一般JAVA开发工程师使用工具),它提供了一种标准化的项目结构和构建过程,使得项目的构建和管理变得更加简单和一致;基于项目对象模型(POM),Maven利用一个中央信息片断能管理一个项目的构建、报告和文档等步骤。
- Project(项目):Maven 将所有的项目视为一个项目对象模型(Project Object Model,POM),通过
pom.xml
文件来描述项目的元数据、依赖、构建配置等信息。 - Dependency Management(依赖管理):Maven 通过中央仓库和本地仓库来管理项目的依赖,自动下载和解析所需的库文件。
- Build Lifecycle(构建生命周期):Maven 定义了一套标准的构建生命周期,包括 clean、compile、test、package、install 等阶段,每个阶段都有特定的目标(goal)。
- Plugin(插件):Maven 的核心功能通过插件来实现,插件可以扩展 Maven 的功能,执行特定的构建任务。
POM包含了Maven创建项目的基本信息、用于描述项目的构建过程、声明项目依赖等;执行任务或目标时,Maven会在当前目录中查找POM。通过读取POM获取所需的配置信息,然后执行目标。
1)项目结构
Maven 推荐一种标准的项目结构,使得不同项目的目录结构保持一致,便于管理和维护。
my-app/
├── pom.xml
├── src/
│ ├── main/
│ │ ├── java/
│ │ └── resources/
│ └── test/
│ ├── java/
│ └── resources/
└── target/
pom.xml
:项目的核心配置文件,定义了项目的元数据、依赖、构建配置等。src/main/java
:存放项目的源代码。src/main/resources
:存放项目的资源文件,如配置文件、静态资源等。src/test/java
:存放测试代码。src/test/resources
:存放测试资源文件。target
:构建输出目录,存放编译后的类文件、打包后的 jar/war 文件等。
2)依赖管理
Maven 通过 pom.xml
文件中的 <dependencies>
标签来管理项目的依赖。依赖可以来自中央仓库、本地仓库或其他远程仓库。例如:
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
3)构建生命周期
Maven 定义了三个标准的构建生命周期:
- default(默认):处理项目的部署,包括编译、测试、打包等。
- clean(清理):清理构建输出目录。
- site(站点):生成项目文档和报告。
每个生命周期包含一系列的阶段(phase),每个阶段可以绑定一个或多个目标(goal)。例如,mvn clean install
命令会先执行 clean 生命周期的 clean 阶段,然后执行 default 生命周期的 install 阶段。
Maven特点:
① 项目设置遵循统一的规则;
② 任意工程中共享;
③ 依赖管理包括自动更新;
④ 一个庞大且不断增长的库;
⑤ 可扩展,能够轻松编写Java或脚本语言的插件;
⑥ 只需很少或不需要额外配置即可即时访问新功能;
⑦ 基于模型的构建,Maven能够将任意数量的项目构建到预定义的输出类型中,如JAR、WAR或基于项目元数据的分发,而不需要在大多数情况下执行任何脚本;
⑧ 项目信息的一致性站点,使用与构建过程相同的元数据,Maven 能够生成一个网站或PDF,包括您要添加的任何文档,并添加到关于项目开发状态的标准报告中;
⑨ 发布管理和发布单独的输出,Maven将不需要额外的配置,就可以与源代码管理系统(如 Subversion 或 Git)集成,并可以基于某个标签管理项目的发布。它也可以将其发布到分发位置供其他项目使用。Maven能够发布单独的输出,如 JAR包含其他依赖和文档的归档,或者作为源代码 发布;
⑩ 向后兼容性,可以很轻松的从旧版本Maven的多个模块移植到Maven 3中;
⑪ 子项目使用父项目依赖时,正常情况子项目应该继承父项目依赖,无需使用版本号,并行构建。编译的速度能普遍提高20 - 50 %;
⑫ 更好的错误报告,Maven改进了错误报告,它提供了Maven wiki页面的链接,可以点击链接查看错误的完整描述;
优点:
- 标准化:提供了一种标准的项目结构和构建过程,使得项目的构建和管理变得更加简单和一致。
- 依赖管理:自动下载和管理项目的依赖,简化了库文件的管理。
- 插件扩展:通过插件可以扩展 Maven 的功能,执行各种构建任务。
- 多模块支持:支持多模块项目,便于大型项目的管理和构建。
所需软件包:
- apache-maven-3.6.3-bin.tar.gz //maven工具(APAHCE)
- cms.tar.gz //JAVA开发写好的网站项目构建文件,但还需要一些依赖程序(POM文件)
- m2.tar.gz //释放创建网站需要的阿里云软件包,若服务可以连接外网则不需要该软件包(解压后为隐藏目录.m2)
镜像地址配置文件:/usr/local/maven/conf/settings.xml
例如:使用Maven部署网站系统
首先确保tomcat运行正常,为防止启动服务失败,设置random
[root@localhost 2]# scp maven/* 192.168.2.5:/root
[root@proxy ~]# mv /dev/random /dev/random.bak
[root@proxy ~]# ln -s /dev/urandom /dev/random
步骤1:安装maven工具,以及java环境
1)释放tar包并拷贝到指定目录
[root@proxy ~]# ls
anaconda-ks.cfg cms.tar.gz m2.tar.gz
apache-maven-3.6.3-bin.tar.gz lnmp_soft shishuocms-2.0.1.war
[root@proxy ~]# tar -xf apache-maven-3.6.3-bin.tar.gz //释放maven工具
[root@proxy ~]# tar -xf cms.tar.gz //网站项目构建文件
[root@proxy ~]# tar -xf m2.tar.gz //网站需要的软件包(隐藏目录.m2)
[root@proxy ~]# mv apache-maven-3.6.3 /usr/local/maven
2)安装java依赖包
[root@proxy ~]# yum -y install java-1.8.0-openjdk //安装java环境包
[root@proxy ~]# yum -y install java-devel //安装java开发依赖包
[root@proxy ~]# /usr/local/maven/bin/mvn -v //查看maven相关信息
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: /usr/local/maven
Java version: 1.8.0_161, vendor: Oracle Corporation, runtime: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.161-2.b14.el7.x86_64/jre
Default locale: zh_CN, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-862.el7.x86_64", arch: "amd64", family: "unix"
3)修改镜像地址(复制相关配置模板,并在第158行下粘贴添加)
[root@proxy ~]# vim /usr/local/maven/conf/settings.xml
159 <mirror> //镜像服务器配置
160 <id>nexus-aliyun</id> //阿里云服务器
161 <mirrorOf>*</mirrorOf>
162 <name>Nexus aliyun</name>
163 <url>http://maven.aliyun.com/nexus/content/groups/public</url>
164 </mirror>
不想“重复造文字”,可指定阿里云对外提供Maven相关的服务器地址,该服务器专门存放了许多功能代码提供开发工程师使用;
步骤2:配置数据库并打包项目
因网站要存放相关用户信息,需使用数据库存放;
1)配置数据库
[root@proxy ~]# yum -y install mariadb-server //安装数据库软件包
[root@proxy ~]# systemctl start mariadb //启动数据库
[root@proxy ~]# cd CMS/
[root@proxy CMS]# cp src/main/resources/shishuocms.properties . //将网站拷贝到当前目录
[root@proxy CMS]# mysql -uroot < sql/install.sql //导入数据库关于网站的文件
[root@proxy CMS]# mysqladmin password //修改数据库密码
New password: //12345678
Confirm new password:
2)使用maven打包项目
[root@proxy CMS]# /usr/local/maven/bin/mvn clean package //对CMS项目进行构建,打包生成了shishuocms-2.0.1.war包
[root@proxy CMS]# ls target/
antrun generated-sources maven-status shishuocms-2.0.1.war
classes maven-archiver shishuocms-2.0.1
步骤3:上线测试
1)备份原有网站页面
[root@proxy CMS]# mv /usr/local/tomcat/webapps/ROOT/ /opt/tomcat_ROOT
2)将网站的war包拷贝到tomcat网站页面目录
[root@proxy CMS]# cp target/shishuocms-2.0.1.war /usr/local/tomcat/webapps/ROOT.war
[root@proxy CMS]# ls /usr/local/tomcat/webapps/
Docs example host-manager manager ROOT ROOT.war
[root@proxy CMS]# /usr/local/tomcat/bin/startup.sh //启动tomcat服务
- 注意:/usr/local/tomcat/webapps/ROOT.war的war包名字,自动解压war包及ROOT目录
测试:使用浏览器访问:http://http://192.168.2.5:8080/
扩展知识:tomcat中server.xml配置详解
元素名 | 属性 | 解释 |
server | port | 指定一个端口,这个端口负责监听关闭tomcat的请求 |
shutdown | 指定向端口发送的命令字符串 | |
service | name | 指定service的名字 |
Connector(表示客户端和service之间的连接) | port | 指定服务器端要创建的端口号,并在这个断口监听来自客户端的请求 |
minProcessors | 服务器启动时创建的处理请求的线程数 | |
maxProcessors | 最大可以创建的处理请求的线程数 | |
enableLookups | 如果为true,则可以通过调用request.getRemoteHost()进行DNS查询来得到远程客户端的实际主机名,若为false则不进行DNS查询,而是返回其ip地址 | |
redirectPort | 指定服务器正在处理http请求时收到了一个SSL传输请求后重定向的端口号 | |
acceptCount | 指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理 | |
connectionTimeout | 指定超时的时间数(以毫秒为单位) | |
Engine(表示指定service中的请求处理机,接收和处理来自Connector的请求) | defaultHost | 指定缺省的处理请求的主机名,它至少与其中的一个host元素的name属性值是一样的 |
Context(表示一个web应用程序,通常为WAR文件,关于WAR的具体信息见servlet规范) | docBase | 应用程序的路径或者是WAR文件存放的路径 |
path | 表示此web应用程序的url的前缀,这样请求的url为http://localhost:8080/path/**** | |
reloadable | 这个属性非常重要,如果为true,则tomcat会自动检测应用程序的/WEB-INF/lib 和/WEB-INF/classes目录的变化,自动装载新的应用程序,我们可以在不重起tomcat的情况下改变应用程序 | |
host(表示一个虚拟主机) | name | 指定主机名 |
appBase | 应用程序基本目录,即存放应用程序的目录 | |
unpackWARs | 如果为true,则tomcat会自动将WAR文件解压,否则不解压,直接从WAR文件中运行应用程序 | |
Logger(表示日志,调试和错误信息) | className | 指定logger使用的类名,此类必须实现org.apache.catalina.Logger 接口 |
prefix | 指定log文件的前缀 | |
suffix | 指定log文件的后缀 | |
timestamp | 如果为true,则log文件名中要加入时间,如下例:localhost_log.001-10-04.txt | |
Realm(表示存放用户名,密码及role的数据库) | className | 指定Realm使用的类名,此类必须实现org.apache.catalina.Realm接口 |
Valve(功能与Logger差不多,其prefix和suffix属性解释和Logger 中的一样) | className | 指定Valve使用的类名,如用org.apache.catalina.valves.AccessLogValve类可以记录应用程序的访问信息 |
directory | 指定log文件存放的位置 | |
pattern | 有两个值,common方式记录远程主机名或ip地址,用户名,日期,第一行请求的字符串,HTTP响应代码,发送的字节数。combined方式比common方式记录的值更多 |
扩展知识:Nginx配置unicode
Unicode(统一码、万国码、单一码),是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码以满足跨语言、跨平台进行文本转换、处理的要求;
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
charset utf-8;
[root@proxy ~]# echo "我爱Linux" > /usr/local/nginx/html/index.html
[root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload
扩展知识:tomcat配置unicode
将该行代码放在网页文件index.html里,重启服务即可识别中文字体:
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
思维导图:
小结:
本篇章节为【第二阶段】OPERATION-DAY5 的学习笔记,这篇笔记可以初步了解到 Tomcat概述、Tomcat部署安装、Tomcat应用案例(虚拟主机、地址重写、SSL加密站点、Tomcat日志)、Tomcat集群,maven应用。除此之外推荐参考相关学习网址:
Tip:毕竟两个人的智慧大于一个人的智慧,如果你不理解本章节的内容或需要相关笔记、视频,可私信小安,请不要害羞和回避,可以向他人请教,花点时间直到你真正的理解
标签:Tomcat,tomcat,local,DAY5,proxy,Linux,OPERATION,root,usr From: https://blog.csdn.net/AnJern/article/details/141256483