Tomcat 环境搭建和管理

article/2025/9/14 19:52:52

Tomcat 概念

Tomcat 是 Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由 Apache、Sun 和其他一些公司及个人共同开发而成,由于有了 Sun的参与和支持,最新的 Servlet 和 JSP规范总是能在Tomcat 中得到体现,Tomcat 5 支持最新的Servlet2.4和 JSP 2.0规范. 因为 Tomcat 技术先进,性能稳定,免费,因而深爱Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的 Web 应用服务器.

Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发 访问用户不是很多的场合下被普通使用,是开发和调试 JSP 程序的首选.Tomcat 和 IIS 等Web 服务器一样,具有处理HTML页面的功能,不过,Tomcat处理静态 HTML的能力不如 Apache。

jsp 了解

JSP: Java Server Pages ,中文名叫 java 服务器页面,是由Sun Microsystems公司倡导,许多公司参与一起建立的一种动态网页技术标准,JSP技术有点类似ASP技术,它是在传统的网页HTML(标准通用标记语言的子集)文件(*.htm  *.html)中插入 Java程序段 (Scriptlet)和 JSP 标记(tag),从而形成JSP文件,后缀名为(*.jsp).用JSP开发的 Web 应用是跨平台的,既能在 Linux 下运行,也可以在其他系统上运行.

支持 JSP 网站 收费版 web 服务器    Oracle 的 weblogic    IBM 的 websphere

Weblogic 是美国 Oracle公司出品的一个 application server 确切的说是一个基于 JavaEE 架构的中间件,Weblogic 是用于开发,集成,部署和管理大型分布式 Web 应用,网络应用和数据库应用的 java 应用服务器。将 Java 的动态功能和 Java Enterprise 标准的安全性引入大型网络应用的开发、集成、部署管理之中.

WebSphere 是 IBM 的软件平台,它是Web应用程序和跨平台、跨产品解决方案所需要的整个中间件基础设施,WebSphere 提供了可靠、灵活和健壮的软件运行服务.

中间件

中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源.中间件位于客户机/服务器的操作系统之上,管理计算机资源和网络通讯,是连接两个独立应用程序或独立系统的软件,相连接的系统,即使它们有不同的接口,但通过中间件之间仍能交换信息,执行中间件的一个关键途径是信息传递,通过中间件,应用程序可以工作于多平台或 OS 环境.

中间件是一类连接软件组件和应用的计算机软件,它包括一组服务,以便于运行在一台或多台机器上的多个软件通过网络进行交互,该技术所提供的互操作性,推动了一致分布式体系架构的演进,该架构通常用于支持并简化那些复杂的分布式应用程序,它包括 web 服务器,事务监控器和消息队列软件.

Java 概念

JDK : java  development kit  (套件) 。简单的说 JDK 是面向开发人员使用的 SDK,它提供了 Java的开发环境和运行环境。就是Java开发工具,是进行Java开发的基础。

JDK(Java Development Kit)是Sun Microsystems针对Java开发人员的产品。自从Java推出以来,JDK已经成为使用最广泛的Java SDK。JDK 是整个Java的核心,包括了Java运行环境,Java工具和Java基础的类库。JDK是学好Java的第一步。而专门运行在x86平台的Jrocket在服务端运行效率也要比Sun JDK好很多。从SUN的JDK5.0开始,提供了泛型等非常实用的功能,其版本也不断更新,运行效率得到了非常大的提高。

SDK:Software Development Kit,软件开发工具包,一般都是一些软件工程师为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件时的开发工具的集合。可以包括函数库、编译程序等。

JRE:java Runtime Enviroment 是指 Java 的运行环境,是面向 Java 程序的使用者而不是开发者,运行JAVA程序所必须的环境的集合,包含JVM标准实现及Java核心类库。Java Runtime Environment(包括Java Plug-in)是Sun的产品,包括两部分:Java Runtime Environment和Java Plug-in。JRE是可以在其上运行、测试和传输应用程序的Java平台。它包括Java虚拟机(jvm)、Java核心类库和支持文件。它不包含开发工具(JDK)--编译器、调试器和其它工具。JRE需要辅助软件--Java Plug-in--以便在浏览器中运行applet。

JVM:java virtual machineJVM 就是我们常说的 java 虚拟机。JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。JVM是java的核心和基础,在java编译器和OS平台之间的虚拟处理器。它是一种基于下层的操作系统和硬件平台并利用软件方法来实现的抽象的计算机,可以在上面执行java的字节码程序。java编译器只需面向JVM,生成JVM能理解的代码或字节码文件。Java源文件经编译器,编译成字节码程序,通过JVM将每一条指令翻译成不同平台机器码,通过特定平台运行。

在 JDK的安装目录里你可以找到 jre目录里面有两个文件夹bin 和 lib,在这里可以认为 bin 里的就是 jvm, lib 中则是 jvm 工作所需要的类库,而 jvm 和 lib 和起来就称为 jre。


Tomcat工作      模式:B/S模式       端口:8080


安装  JDK + Tomcat

[root@zh tomcat-mysql-jdk]# tar xf jdk-8u211-linux-x64.tar.gz -C /usr/local/ ;cd /usr/local/[root@zh local]# ln -sv jdk1.8.0_211 jdk1.8
"jdk1.8" -> "jdk1.8.0_211"
  • 配置环境变量,让系统变量读到jdk的路径
[root@zh local]# cat /etc/profile.d/jdk8.sh 
export JAVA_HOME=/usr/local/jdk1.8.0_211
export CLASS_PATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/jar/tools.jar:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH[root@zh local]# . /etc/profile.d/jdk8.sh [root@zh local]# java -version
java version "1.8.0_211"
Java(TM) SE Runtime Environment (build 1.8.0_211-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.211-b12, mixed mode)
  • 安装 Tomcat 
[root@zh tomcat-mysql-jdk]# tar xf apache-tomcat-8.5.37.tar.gz -C /usr/local/src/
[root@zh tomcat-mysql-jdk]# cd /usr/local/src/apache-tomcat-8.5.37/

注意:Tomcat有两种安装方式,一种是直接解压就可以使用的二进制文件,第二种是编译安装,我们这里采用了第一种方法,下载的tomcat软件直接解压就可以执行的二进制文件,因为在官方默认下载的便是使用第一种方法安装,那么下载解压后的目录如下:

tomcat|---bin Tomcat:存放启动和关闭tomcat脚本;|---conf  Tomcat:存放不同的配置文件(server.xml和web.xml);|---lib:包含Tomcat使用的jar文件.unix平台此目录下的任何文件都被加到Tomcat的classpath中;|---logs:存放Tomcat执行时的LOG文件;
|---webapps:Tomcat的主要Web发布目录(包括应用程序示例);|--- ROOT:tomcat的家目录|--- index.jsp:Tomcat的默认首页文件
|---work:存放jsp编译后产生的class文件或servlet文件存放
|---temp:存放Tomcat运行时所产生的临时文件[root@zh apache-tomcat-8.5.37]# ls bin/
bootstrap.jar                 configtest.bat    setclasspath.sh  tomcat-native.tar.gz
catalina.bat                  configtest.sh     shutdown.bat     tool-wrapper.bat
catalina.sh                   daemon.sh         shutdown.sh      tool-wrapper.sh
catalina-tasks.xml            digest.bat        startup.bat      version.bat
commons-daemon.jar            digest.sh         startup.sh       version.sh
commons-daemon-native.tar.gz  setclasspath.bat  tomcat-juli.jarbat  是 windows 下的脚本(批处理)
sh   是 linux 下的脚本
catalina.sh是一个最关键的脚本,其他的启动脚本如startup,shutdown.sh,都是使用了不同的参数调用了该脚本,startup是以start参数调用了catalina脚本,shutdown使用stop调用了catalina脚本![root@zh apache-tomcat-8.5.37]# mv ../apache-tomcat-8.5.37/ /usr/local/tomcat ;cd
  • Tomcat 启动脚本 
[root@zh ~]# cat /etc/init.d/tomcat
#!/bin/bash 
JAVA_HOME=/usr/local/jdk1.8.0_211
export JAVA_HOME  
CATALANA_HOME=/usr/local/tomcat  
export CATALINA_HOME  
case "$1" in  
start)  echo "Starting Tomcat..."  $CATALANA_HOME/bin/startup.sh  ;;  
stop)  echo "Stopping Tomcat..."  $CATALANA_HOME/bin/shutdown.sh  ;;  
restart)  echo "Stopping Tomcat..."  $CATALANA_HOME/bin/shutdown.sh  sleep 2  echo  echo "Starting Tomcat..."  $CATALANA_HOME/bin/startup.sh  ;;  
*)  echo "Usage: $prog {start|stop|restart}"  ;;  
esac  
exit 0赋予执行权限
[root@zh ~]# chmod +x /etc/init.d/tomcat开启tomcat 
[root@zh ~]# service tomcat start
Unit tomcat.service could not be found.
Starting Tomcat...
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/jdk1.8.0_211
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.开机自启
[root@zh ~]# chkconfig --add tomcat
[root@zh ~]# chkconfig --list tomcat
[root@zh ~]# netstat -tulnp | grep 8080
tcp6       0      0 :::8080                 :::*                    LISTEN      4486/java关闭防火墙

  • 点击 Manager App  需要输入用户名 密码   因为还没有配置,可能显示的是 403 拒绝
  • 创建 Manager App 用户
</tomcat-users>
[root@zh /]# tail -9 /usr/local/tomcat/conf/tomcat-users.xml<role rolename="admin-gui"/>
<role rolename="admin-script"/>
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
<user username="admin" password="123456" roles="manager-gui,manager-script,manager-jmx,manager-status,admin-script,admin-gui"/>角色说明
1:“manager-gui”:Allows access to the html interface(允许通过web的方式登录查看服务器信息)。
2:“manager-script”: Allows access to the plain text interface(允许以纯文本的方式访问)。
3:“manager-jmx”: Allows access to the JMX proxy interface(允许jmx的代理访问)。
4:“manager-status”: Allows access to the read-only status pages(允许以只读状态访问)。
5:  admin-gui: 允许访问HTML GUI
6 : admin-script: 允许访问文本接口
  • Tomcat8以上还要增加以下配置
[root@zh ~]# cat /usr/local/tomcat/conf/Catalina/localhost/manager.xml
<Context privileged="true" antiResourceLocking="false"docBase="${catalina.home}/webapps/manager"><Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="^.*$" />
</Context>[root@zh ~]#/etc/init.d/tomcat stop && /etc/init.d/tomcat start


  • 搭建基于域名的虚拟主机

[root@zh ~]# vim /usr/local/tomcat/conf/server.xml
<Host name="zhtest1"  appBase="/var/www/html">
<Context path="" docBase="/var/www/html/web1" />
</Host>
<Host name="zhtest2"  appBase="/var/www/html">
<Context path="" docBase="/var/www/html/web2" />
</Host>#在末尾的</Engine>上面添加上面这几行appBase指定应用程序(网站)的基本路径,这里可以存放多个程序(网站),一般是相对路径,相对于tomcat的安装目录。
Context path=""为虚拟目录,如果是空,表示直接就是/,如果是如path="aa",那么访问的时候就是site:8080/aa
docBase="……" 为实际目录,就是可以是绝对路径,如果是相对路径就是基于appBase[root@zh ~]# mkdir -p /var/www/html/{web1,web2}
[root@zh ~]# service tomcat stop ; service tomcat start
[root@zh ~]# echo test1 > /var/www/html/web1/index.html
[root@zh ~]# echo test2 > /var/www/html/web2/index.html验证
[root@zh ~]# curl zhtest1:8080
test1
[root@zh ~]# curl zhtest2:8080
test2

 


http://chatgpt.dhexx.cn/article/3KXypIc0.shtml

相关文章

如何将mpg格式转换为mp4格式?

如何将mpg格式转换为mp4格式&#xff1f;mpg是什么格式文件呢&#xff1f;mpg全称MPEG&#xff0c;即动态图像专家组&#xff0c;是运动图像压缩算法的国际标准&#xff0c;这种专业的解释可能很多人看不懂&#xff0c;简单的说mpg就是一种视频文件格式。属于不常用的视频文件格…

mpg格式转换为mp4格式

如何将mpg格式转换为mp4格式&#xff1f;mpg的全称是Moving Pictures Experts Group&#xff0c;也被称为mpeg&#xff0c;是运动图像压缩算法的国际标准&#xff0c;简单的说mpg就是一种视频格式&#xff0c;mpg格式说过经过编码处理的图像文件越小&#xff0c;所占用的存储空…

Java使用mpxj导入.mpp格式的Project文件(甘特图)

最近换工作了&#xff0c;主要的项目都是企业内部为支撑的管理平台&#xff0c;刚入入职没多久&#xff0c;遇到了一个需求&#xff0c;就是导入微软的Project文件&#xff0c;踩过不少坑&#xff0c;所以记录一下&#xff0c;后续还有从数据库导出Project引导文件&#xff0c;…

引用型变量的赋值

内存分类 栈内存&#xff1a;空间较小&#xff0c;用来存储变量在堆内存的地址。 堆内存&#xff1a;空间大&#xff0c;用来存储变量的真实数据。 引用型变量数据引用&#xff1a;首先根据变量访问栈内存&#xff0c;再根据栈内存中的地址指向找到在堆内存中的变量数据。 当…

java对象与对象引用变量

Java对象及其引用 先搞清楚什么是堆&#xff0c;什么是栈。 Java开辟了两类存储区域&#xff0c;对比二者的特点 存储区域存储内容优点缺点回收栈基本类型的变量和对象的引用变量存取速度比堆要快&#xff0c;仅次于寄存器&#xff0c;栈数据可以共享存在栈中的数据大小与生…

变量的引用_概念

理解了变量的引用之后, 对于我们理解在python 中的函数的参数传递和以及函数的返回值都是非常由帮助的. 当一个python 程序运行的时候, 变量和数据都是保存在内存中的. 变量的引用这个概念, 就是介绍一下当一个python 程序运行时, 变量和数据是怎样保存的, 并且保存的是什么内…

C++中引用变量详解

目录 一、什么是引用&#xff1f; 二、引用的注意事项 三、引用的本质 四、常量引用 五、引用的使用场景​​​​​​​ 六、引用和指针的区别 一、什么是引用&#xff1f; 引用实际上是给一个变量起别名&#xff0c;编译器不会为引用变量开辟一个新的内存空间&#xff…

C++变量引用

本篇介绍的变量引用与之前介绍的指针不是同一概念&#xff0c;它们有本质的区分&#xff1a; 1&#xff09;不存在空引用。引用必须连接到一块合法的内存。 2&#xff09;一旦引用被初始化为一个对象&#xff0c;就不能被指向到另一个对象。指针可以在任何时候指向到另一个对…

Java_引用变量

目录 1.认识 null ​编辑 2.数组的应用 3.数组作为函数的参数 4.数组作为函数的返回值 5.数组练习 数组转字符串 6.数组拷贝 (1)通过函数Arrays.copyOf()进行拷贝&#xff1a; (2)通过函数System.arraycopy()进行拷贝&#xff1a; (3)拷贝范围Arrays.copyOfRange() (4)比…

C++中的引用变量详解

文章目录 声明及定义代码引用变量的特点图片解释引用变量的本质引用变量的用途int & 和 const int & 的区别引用变量和宏定义&#xff08;#define&#xff09;的区别 声明及定义 [const] int& 变量名 右值 注意&#xff1a;[]内的是可选的。即这里的const限定词是…

引用变量及其作用

首先&#xff0c;先来明白一下什么是引用变量。 一个变量可以声明为一个引用&#xff0c;它起着该变量的别名的作用。对引用进行操作&#xff0c;实际上就是对被引用的变量进行操作。 引用运算符&#xff1a;&&#xff1b; 定义的一般形式&#xff1a;数据类型 &引用变…

变量的引用

引用是C对C的一个重要扩充。 1、引用的概念&#xff1a;变量的引用就是变量的别名。引用不是新定义一个变量&#xff0c;而是给已存在变量取了一个别名&#xff0c;编译器不会为引用变量开辟内存空间&#xff0c;它和它引用的变量共用同一块内存空间。 从上面图中就可以看出&a…

引用变量

引用就是一个变量的别名&#xff0c;声明&#xff1a; int a 0; int &b a; b就是a的引用&#xff0c;a和b指向的内存时同一个地址&#xff0c;b可以修改变量的值 一。主要的用途是将引用变量作为函数的参数传递&#xff0c;为什么呢&#xff1f; &#xff08;1&…

C++入门基础—— 引用变量

目录 什么是引用&#xff1a; 引用的例子 引用的特性&#xff1a; 常量引用与非常量引用 使用场景 引用与指针的区别 什么是引用&#xff1a; 引用的概念 引用实际上就是取别名&#xff0c;提起这个名字就会让人知道是谁&#xff0c;谈起“鸡哥”就知道是坤坤&#xff0c;…

C++——引用变量

目录 一、创建引用变量 二、将引用作为函数参数 三、引用的属性和特别处 四、临时变量、引用参数和const 五、返回引用 六、何使用引用参数 七、参考书籍 引用变量是C新增的一种复合类型。引用是已定义的变量的别名&#xff08;另一个名字&#xff0c;但两个名字都是表示…

014 变量的引用

目标&#xff1a; 1、变量的引用 2、可变和不可变量类型 3、局部变量和全局变量 一、变量的引用 。变量 和 数据 都是保存在 内存 中的 。在 python 中 函数 的 参数传递 以及 返回值 都是靠 引用 传递的 1.1 引用的概念 在 Python 中 。变量 和 数据 是分开存储的 。数据 保…

C语言动态内存分配函数

目录 1.malloc()2.free()3.calloc()4.realloc()5.小结 在C中我们开辟内存空间有两种方式 :1.静态开辟内存 : 例如: int a; int b[10]; 这种开辟内存空间的特点是 所开辟的内存是在栈中开辟的固定大小的 ,如a是4字节 ,数组b是40字节 ,并且数组在申明时必须指定其长度 , 如果是全…

【C语言】------ 动态内存分配

动态内存开辟详解 动态内存分配什么是动态内存分配&#xff1f; 一、为什么使用动态内存分配呢&#xff1f;二、动态内存函数1.malloc和free2.calloc和realloc 三、常见的动态内存错误1.对NULL指针的解引用操作2.对动态内存开辟的越界访问3.向free传递一个非malloc函数返回的指…

【C语言】为什么存在动态内存分配

文章目录 前言一、动态内存分配定义 二、动态内存分配的意义1.可以控制所开辟的内存大小2.可以多次利用这部分空间 三&#xff0c;动态内存函数的介绍 前言 提示&#xff1a;我们先来看一个在vs编译器下&#xff0c;同学们常犯的错误 注意&#xff1a;在VS编译器下C语言是不支…

静态内存分配与动态内存分配

静态内存分配与动态内存分配 动机 平时看c/c的书籍时&#xff0c;总会看到一种观点&#xff0c;说是C/C语言使用的时候动态内存分配是最重要的&#xff0c;使用malloc等函数分配的内存必须要释放&#xff0c;否则及其容易出现内存泄露。但是自己有时候挺奇怪的&#xff0c;啥…