马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
重要内容:
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
复制代码
- [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
复制代码 然后重新加载设置文件:
- 启动 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:毕竟两个人的智慧大于一个人的智慧,如果你不明确本章节的内容或必要相干条记、视频,可私信小安,请不要怕羞和回避,可以向他人讨教,花点时间直到你真正的明确
|