Nginx 学习(五)Tomcat 服务器

1 案例1:安装部署Tomcat服务器

1.1 问题

本案例要求部署Tomcat服务器,具体要求如下:

  • 安装部署JDK基础环境
  • 安装部署Tomcat服务器
  • 创建JSP测试页面

然后客户机访问此Web服务器验证效果:

  • 使用火狐浏览器访问Tomcat服务器的8080端口,浏览默认首页
  • 使用火狐浏览器访问Tomcat服务器的8080端口,浏览默认测试页面

1.2 方案

使用2台虚拟机,其中一台作为Tomcat服务器(192.168.99.100)、另外一台作为测试用的Linux客户机(192.168.99.5),如图-1所示。

图-1

使用RPM安装JDK基础环境

使用源码安装部署Tomcat服务器

1.3 步骤

实现此案例需要按照如下步骤进行。

步骤一:部署Tomcat服务器软件

1)使用RPM安装JDK环境

[root@web1 ~]# yum -y install  java-1.8.0-openjdk      #安装JDK
[root@web1 ~]# java -version                           #查看JAVA版本

2)安装Tomcat

[root@web1 lnmp_soft]# tar -xf  apache-tomcat-8.0.30.tar.gz
[root@web1 lnmp_soft]# mv apache-tomcat-8.0.30  /usr/local/tomcat
[root@web1 lnmp_soft]# ls /usr/local/tomcat
bin/                                            #主程序目录
webapps/                                        #页面目录
conf/                                           #配置文件目录
logs/                                           #日志目录  
temp/                                           #临时目录
work/                                           #自动编译目录
lib/                                            #库文件目录

3)启动服务

[root@web1 ~]# /usr/local/tomcat/bin/startup.sh

4)服务器验证端口信息

[root@web1 ~]# ss -nutlp |grep java        #查看java监听的端口
tcp        0      0 :::8080              :::*                LISTEN      2778/java 
tcp        0      0 :::8009              :::*                LISTEN      2778/java                     
tcp        0      0 ::ffff:127.0.0.1:8005     :::*         LISTEN       2778/java 

提示:如果检查端口时,8005端口启动非常慢,默认tomcat启动需要从/dev/random读取大量的随机数据,默认该设备生成随机数据的速度很慢,可用使用下面的命令用urandom替换random。

[root@web1 ~]# mv /dev/random  /dev/random.bak
[root@web1 ~]# ln -s /dev/urandom  /dev/random
[root@web1 ~]# killall   java   
[root@web1 ~]# cd /usr/local/tomcat
[root@web1 tomcat]# bin/startup.sh
[root@web1 ~]# ss -nutlp |grep java

另外,还可以使用方案二解决:

[root@web1 ~]# yum install rng-tools
[root@web1 ~]# systemctl start rngd
[root@web1 ~]# systemctl enable rngd

5)客户端浏览测试页面

http://192.168.99.100:8080

步骤二:修改Tomcat配置文件

1)创建静态页面

[root@web1 tomcat]# echo  "tomcat-test~~~~"  >  webapps/ROOT/test01.html

浏览器访问http://192.168.99.100:8080/test01.html

2)测试JSP页面

[root@web1 ~]# vim  /usr/local/tomcat/webapps/ROOT/test02.jsp
<html>
<body>
<center>
Now time is: <%=new java.util.Date()%>
</center>
</body>
</html>

浏览器访问http://192.168.99.100:8080/test02.jsp

2 案例2:使用Tomcat部署虚拟主机

2.1 问题

沿用练习二,使用Tomcat部署加密虚拟主机,实现以下要求:

  • 实现两个基于域名的虚拟主机,域名分别为:www.a.com和 www.b.com
  • 访问页面时支持SSL加密通讯
  • 每个虚拟主机都拥有独立的访问日志文件

2.2 方案

修改server.xml配置文件,创建www.b.com虚拟主机,顺便修改原有虚拟主机为www.a.com

2.3 步骤

实现此案例需要按照如下步骤进行。

步骤一:配置服务器虚拟主机

1)修改server.xml配置文件,创建虚拟主机

[root@web1 ~]# vim /usr/local/tomcat/conf/server.xml
...<Host name="www.b.com" appBase="web_b"></Host><Host name="www.a.com" appBase="webapps" unpackWARS="true" autoDeploy="true">
...
...</Host>

2)创建虚拟主机对应的页面根路径并测试

[root@web1 tomcat]# mkdir -p web_b/ROOT    #之后创建b网站的目录
[root@web1 tomcat]# echo "tomcat-A~~~" > webapps/ROOT/index.html
[root@web1 tomcat]# echo "tomcat-B~~~" > web_b/ROOT/index.html
tail -1 /etc/hosts   #查看域名解析
192.168.99.100  www.a.com  www.b.com 
[root@web1 tomcat]# bin/shutdown.sh   #关闭tomcat
[root@web1 tomcat]# bin/startup.sh    #开启
[root@web1 tomcat]# curl www.a.com:8080   #测试
tomcat-A~~~
[root@web1 tomcat]# curl www.b.com:8080
tomcat-B~~~

3)查看虚拟主机www.a.com的配置

unpackWARs="true" #自动解war包

autoDeploy="true" #自动更新开发工程师编写的网站功能

[root@proxy tomcat]# yum -y install java-1.8.0-openjdk-devel  #安装可以制作war包的工具
[root@proxy tomcat]# jar  -cf  a.war  /var/log   #之后可以使用jar命令打war包
[root@proxy tomcat]# cp  a.war  webapps    #将war包放入虚拟主机的网页目录
[root@proxy tomcat]# ls  webapps    #检查,可以看到已经自动解开,如果无效可以尝试重启tomcat

3 tomcat访问路径与页面位置

1)测试1

[root@web1 ~]# vim /usr/local/tomcat/conf/server.xml
...
<Host name="www.b.com" appBase="web_b">            
<Context  path=""  docBase=""  />           
</Host>
...
echo "web_b/ROOT/index.html" > web_b/ROOT/index.html   #默认页面路径
echo "web_b/index.html" > web_b/index.html   #创建素材,定义新路径
curl  www.b.com:8080   #测试可以看到的是默认的页面路径
web_b/ROOT/index.html
之后重启tomcat
curl  www.b.com:8080    #重启后测试可以看到新路径
web_b/index.html

2)测试2

[root@web1 ~]# vim /usr/local/tomcat/conf/server.xml
...
<Host name="www.b.com" appBase="web_b">
<Context  path=""  docBase="abc"  />   #修改成abc
</Host>
...
mkdir  web_b/abc    #创建测试目录
echo "web_b/abc/index.html"  >  web_b/abc/index.html  #测试页面
重启tomcat
[root@proxy tomcat]# curl www.b.com:8080    #查看,见到新路径
web_b/abc/index.html

3)测试3

[root@web1 ~]# vim /usr/local/tomcat/conf/server.xml
...
<Host name="www.b.com" appBase="web_b">
<Context  path=""  docBase="/abc"  />        #修改成/abc
</Host>
...
mkdir  /abc  #创建测试目录
echo  "/abc/index.html"  > /abc/index.html    #创建测试文件
重启tomcat
[root@proxy tomcat]# curl www.b.com:8080    #得到新路径
/abc/index.html

4)测试4

[root@web1 ~]# vim /usr/local/tomcat/conf/server.xml
...
<Host name="www.b.com" appBase="web_b>
<Context  path="/test"  docBase="/abc"  />   #path后面添加内容可以匹配用户访问路径,当用户访问www.b.com:8080/test/时,看到的是/abc的内容,如果访问www.b.com:8080就看到web_b/ROOT的内容
</Host>
重启tomcat
[root@proxy tomcat]# curl www.b.com:8080/test/
/abc/index.html
[root@proxy tomcat]# curl www.b.com:8080
web_b/ROOT/index.html

5)测试5

[root@web1 ~]# vim /usr/local/tomcat/conf/server.xml
...
<Host name="www.b.com" appBase="web_b">
<Context  path="/test"  docBase="abc"  />     #将/abc改成abc当用户访问www.b.com:8080/test/时,可以看到web_b/abc里的内容当用户访问www.b.com:8080时就看到web_b/ROOT的内容
重启tomcat
[root@proxy tomcat]# curl www.b.com:8080/test/         
web_b/abc/index.html
[root@proxy tomcat]# curl www.b.com:8080
web_b/ROOT/index.html

步骤四:配置Tomcat支持SSL加密网站

1)创建加密用的私钥和证书文件

[root@web1 ~]# keytool -genkeypair -alias tomcat -keyalg RSA -keystore /usr/local/tomcat/keystore                #提示输入密码为:123456
#-genkeypair     生成密钥对
#-alias tomcat     密钥别名
#-keyalg RSA     定义密钥算法为RSA算法
#-keystore         定义密钥文件存储在:/usr/local/tomcat/keystore

2)再次修改server.xml配置文件,创建支持加密连接的Connector

[root@web1 ~]# vim /usr/local/tomcat/conf/server.xml
...
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"clientAuth="false" sslProtocol="TLS" 
keystoreFile="/usr/local/tomcat/keystore" keystorePass="123456"/>
...
#备注,默认这段Connector被注释掉了,打开注释,添加密钥信息即可

3)重启Tomcat服务器

[root@web1 ~]# /usr/local/tomcat/bin/shutdown.sh
[root@web1 ~]# /usr/local/tomcat/bin/startup.sh

4)客户端设置host文件,并浏览测试页面进行测试(proxy可以充当客户端角色)

[root@proxy ~]# vim /etc/hosts
… …
192.168.99.100      www.a.com  www.b.com

分别访问测试

https://www.a.com:8443/

https://www.b.com:8443/

步骤五:配置Tomcat日志

1)为www.b.com虚拟主机开启日志

[root@web1 ~]# vim /usr/local/tomcat/conf/server.xml
.. ..
<Host name="www.b.com" appBase="web_b" >
...
#从默认localhost虚拟主机中把Valve这段复制过来,适当修改下即可
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"prefix="www-b-com" suffix=".log"pattern="%h %l %u %t &quot;%r&quot; %s %b" />
</Host>

2)重启Tomcat服务器

[root@web1 ~]# /usr/local/tomcat/bin/shutdown.sh
[root@web1 ~]# /usr/local/tomcat/bin/startup.sh

3)查看服务器日志文件

[root@web1 ~]# ls /usr/local/tomcat/logs/

4 案例3:使用Maven部署网站系统

4.1 问题

通过安装配置Maven,实现如下目标:

  • 配置镜像地址
  • 打包并上线网站项目

4.2 方案

通过tar包安装Maven

  • 释放tar包,拷贝到/usr/local目录
  • 安装并运行数据库
  • 打包网站项目,之后利用tomcat上线该网站

4.3 步骤

实现此案例需要按照如下步骤进行。

步骤一:安装maven工具,以及java环境

将三个文件传入虚拟机root的家目录,原地释放

apache-maven-3.6.3-bin.tar.gz #maven工具包

cms.tar.gz #网站项目

m2.tar.gz #依赖程序,释放之后是隐藏目录.m2

1)释放tar包,并拷贝到指定目录

[root@web1 ~]# tar -xf apache-maven-3.6.3-bin.tar.gz
[root@web1 ~]# mv apache-maven-3.6.3 /usr/local/maven

2)安装java依赖包

[root@web1 ~]# yum -y install java-1.8.0-openjdk
[root@web1 ~]# yum -y install java-devel

3)修改镜像地址,在第158行下添加

[root@web1 ~]# vim /usr/local/maven/conf/settings.xml  
<mirror><id>nexus-aliyun</id><mirrorOf>*</mirrorOf><name>Nexus aliyun</name><url>http://maven.aliyun.com/nexus/content/groups/public</url> 
</mirror>

步骤二:配置数据库并打包项目

1)配置数据库

[root@web1 ~]# yum install -y mariadb-server
[root@web1 ~]# systemctl start mariadb
[root@web1 ~]# cd CMS/
[root@web1 CMS]# cp src/main/resources/shishuocms.properties .     #拷贝网站数据库配置文件到当前目录,该文件定义了数据的用户名和密码等信息
[root@web1 CMS]# mysql -uroot < sql/install.sql       #导入网站相关数据库文件
Enter password:    直接回车
[root@web1 CMS]# mysqladmin password    #修改数据库密码
New password:      #接下来输入12345678
Confirm new password:     #在输入一次12345678

如果数据库密码输入错误

mysqladmin password -uroot -p        #改密码,先输入旧密码,然后输入两次新密码

如果数据库密码忘记

systemctl stop mariadb         #停服务
yum -y remove mariadb-server   #删除
rm -rf /var/lib/mysql/         #删除数据库文件,这样密码就没了
yum -y install mariadb-server  #重装
systemctl start mariadb        #启动数据库

2)打包项目

[root@web1 CMS]# /usr/local/maven/bin/mvn clean package     #按照之前定义的
公网服务器地址、数据库配置等内容打包项目,注意该命令要在CMS目录进行

步骤三:上线测试

cp  ~/lnmp_soft/apache-tomcat-8.0.30/conf/server.xml  /usr/local/tomcat/conf/
cp: 是否覆盖 "/usr/local/tomcat/conf/server.xml"?  y      #把tomcat的配置
文件恢复默认
重启tomcat 
rm  -rf  /usr/local/tomcat/webapps/ROOT   #删除原有默认页面目录
cp  target/shishuocms-2.0.1.war  /usr/local/tomcat/webapps/ROOT.war  #将新项目移动到tomcat中,然后会自动解包,然后真机打开浏览器访问192.168.99.100:8080看到“师说”页面则成功

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/72295.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Web存储

目录 什么是 HTML5 Web 存储? 方法 cookie webStorage 会话存储 sessionStorage 本地存储localStorage 什么是 HTML5 Web 存储? 使用HTML5可以在本地存储用户的浏览数据。 早些时候,本地存储使用的是 cookie。但是Web 存储需要更加的安全与快速. 这些数据不会被保存在服…

下单时如何保证数据一致性?

原创 哪吒 哪吒编程 2023-09-07 08:03 发表于辽宁 收录于合集#Redis11个 &#xff08;给哪吒编程加星标&#xff0c;提高Java技能&#xff09; 大家好&#xff0c;我是哪吒。 在前几篇文章中&#xff0c;提到了Redis实现排行榜、Redis数据缓存策略&#xff0c;让我们对Redis…

Golang 获取本地 IP 地址方法

在 Golang 中&#xff0c;使用 net 包可以很方便地获取到本机IP地址。 借助 net.InterfaceAddrs 方法 简单示例代码如下&#xff1a; package mainimport ("fmt""net" )func main() {addrList, err : net.InterfaceAddrs()if err ! nil {panic(err)}for…

VSCode学习笔记一:添加代码模板

一目了然 1 简述2 设置模板3 Global Snippets file示例 1 简述 问&#xff1a;为什么要设置代码模板&#xff1f; 答&#xff1a;编程语言是有个性的&#xff0c;不同语言的演讲风格是不一样的。 旁白&#xff1a;我不懂&#xff1f;&#xff01; 问&#xff1a;为什么要设置…

OpenPose

OpenPose Doc - Installation - Prerequisites

qt作业day4

//clock_exercise.cpp#include "clock_timer.h" #include "ui_clock_timer.h"//时间事件处理函数 void Clock_Timer::timerEvent(QTimerEvent *event) {if(event->timerId() time_id){sys_tm QDateTime :: currentDateTime(); // int year sy…

【c++】如何有效地利用命名空间?

​ &#x1f331;博客主页&#xff1a;青竹雾色间 &#x1f618;博客制作不易欢迎各位&#x1f44d;点赞⭐收藏➕关注 ​✨人生如寄&#xff0c;多忧何为 ✨ 目录 前言什么是命名空间&#xff1f;命名空间的语法命名空间的使用避免命名冲突命名空间的嵌套总结 前言 当谈到C编…

直播APP源码搭建:核心的服务器系统

在现代科技的推动下&#xff0c;网络衍生出了各种各样的技术&#xff0c;每个技术都被应用到需要的APP上&#xff0c;直播APP源码搭建出来的APP就是其中的一个&#xff0c;然而&#xff0c;这些技术能够成功的在直播APP源码搭建的APP中稳定的为用户们提供功能与服务&#xff0c…

芯科蓝牙BG27开发笔记-新建示例工程

此笔记的必要性 芯科的官方资料很丰富&#xff0c;并且ssv5中能方便索引到所需文档&#xff0c;不过大而全的问题就是找不到合适的切入点&#xff0c;更不会有本地化比较好的中文的系统的教程了。往往看到一个starting guide&#xff0c;会延伸其他starting guide&#xff0c;…

【Linux】Epoll Reactor【反应堆】模式的工作流程

Reactor模式的工作流程 主线程往epoll内核事件表中注册socket上的就绪事件。主线程调用epoll_wait等待socket上有数据可读。当socket上有数据可读时&#xff0c;epoll_wait通知主线程。主线程将socket可读事件放入请求队列。睡眠在请求队列上的某个工作线程被唤醒&#xff0c;…

ubuntu设置sudo免密

前提&#xff1a;有root权限 本质是修改/etc/sudoers 文件&#xff0c;但直接编辑这个文件容易改错造成系统异常&#xff0c;因此一般使用sudo visudo命令修改&#xff0c;这个命令保存时会检查文件格式&#xff0c;该命令会使用默认文本编辑器把/etc/sudoers 读到一个临时文件…

2023数学建模国赛C题思路--蔬菜类商品的自动定价与补货决策

C 题 蔬菜类商品的自动定价与补货决策 在生鲜商超中&#xff0c;一般蔬菜类商品的保鲜期都比较短&#xff0c;且品相随销售时间的增加而变差&#xff0c; 大部分品种如当日未售出&#xff0c;隔日就无法再售。因此&#xff0c;商超通常会根据各商品的历史销售和需 求情况每天进…

Android MediaRecorder录音

1. 简介 在android中录制音频有两种方式&#xff0c;MediaRecorder和AudioRecord。两者的区别如下&#xff1a; MediaRecorder 简单方便&#xff0c;不需要理会中间录制过程&#xff0c;结束录制后可以直接得到音频文件进行播放&#xff1b;录制的音频文件是经过压缩的&#…

如何使用TensorFlow完成线性回归

线性回归是一种简单的预测模型&#xff0c;它试图通过线性关系来预测目标变量。在TensorFlow中&#xff0c;我们可以使用tf.GradientTape来跟踪我们的模型参数的梯度&#xff0c;然后用这个信息来优化我们的模型参数。 以下是一个简单的线性回归的例子&#xff1a; pythonimpo…

vulkan学习路径

1.学习路径 了解图形渲染基础知识&#xff1a; 学习计算机图形学基础概念&#xff0c;包括坐标系统、三角形渲染、光照模型等。可以参考经典的图形学教材&#xff0c;如《Real-Time Rendering》和《Computer Graphics: Principles and Practice》。了解图形API的发展历史&#…

用户多设备多账户同时在线场景、匿名用户行为同步到注册用户

随着移动设备的普及和社交媒体的发展,用户在多个设备上同时访问同一个应用成为了一种常见的现象。这些设备可能属于同一个用户,也可能属于不同的用户,而且有些用户可能没有注册账户,只是以匿名的方式访问应用。在这种多设备、多账户、匿名用户同时在线的场景下,如何保证数…

Docker从认识到实践再到底层原理(四-2)|Docker镜像仓库实战案例

前言 那么这里博主先安利一些干货满满的专栏了&#xff01; 首先是博主的高质量博客的汇总&#xff0c;这个专栏里面的博客&#xff0c;都是博主最最用心写的一部分&#xff0c;干货满满&#xff0c;希望对大家有帮助。 高质量博客汇总 然后就是博主最近最花时间的一个专栏…

污水处理厂3D数字孪生三维可视系统降低设备风险隐患

当相对传统与保守的水务行业&#xff0c;与激进与开放的互联网发生碰撞之后&#xff0c;产生了最好的一个名词是&#xff1a;“智慧水务”&#xff0c;谈及智慧水务&#xff0c;自然免不了当下最具热度的技术“元宇宙”&#xff0c;水资源再生是我国追求高质量发展的新策略&…

软件测试/测试开发丨Selenium Web自动化多浏览器处理

点此获取更多相关资料 本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接&#xff1a;https://ceshiren.com/t/topic/27185 一、多浏览器测试介绍 1.1、多浏览器测试背景 用户使用的浏览器(firefox,chrome,IE 等)web 应用应该能在任何浏览器上正常的工作&#xff0c;这样…

springboot整合elasticsearch使用案例

引入依赖 <dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId> </dependency> 添加注入 import org.apache.http.HttpHost; import org.elasticsearch.client.Res…