Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。Tomcat开放源代码,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。
实验Linux平台:本次实验使用红帽系的CentOS 7.3
安装tomcat需要先安装Java,下面安装Java编译环境JDK。
JDK有两个版本,一个是Oracle的,另外一个是OpenJDK开源社区版的。这两个版本安装那个都行,在红帽系列的Linux系统Base仓库中集成了OpenJDK的rpm包。我在下面的实验中就使用Base仓库自带的OpenJDK进行安装。
OracleJDK官网:http://www.oracle.com/technetwork/java/index.html
OpenJDK官网 :http://openjdk.java.net/
OpenJDK:
java-VERSION-openjdk :主程序包
java-VERSION-openjdk-headless:运行环境。
java-VERSION-openjdk-devel:开发包
安装相应版本的rpm包,在CentOS 7.3的Base库中有三个版本,1.8、1.7、1.6。
[[email protected] ~]#yum list all java* #这条命令可以查看所有的yum仓库中的Java包
[[email protected] ~]#yum -y install java-1.8.0-openjdk-devel #安装这个开发包会把主程序包作为依赖包一并安装
注意:如果是去官网下载的包在安装完成后,要配置JAVA_HOME环境变量,指向java的安装路径;
OpenJDK:
JAVA_HOME=/usr
Oracle JDK:
JAVA_HOME=/usr/java/jdk_VERSION
注意:多版本并存时,可使用 alternatives命令设定默认使用的版本;
查看当前的java版本:
java -version
安装Tomcat
tomcat官网提供rpm包和二进制格式的,二进制格式的直接解压到指定路径就可以是使用。
官网:http://tomcat.apache.org/index.html
使用Base仓库
[[email protected] ~]# yum -y install tomcat tomcat-lib tomcat-admin-webapps tomcat-webapps tomcat-docs-webapp
二进制
[[email protected] ~]# tar xf apache-tomcat-VERSION.tar.gz -C /usr/local/
[[email protected] ~]# cd /usr/local
[[email protected] ~]# ln -sv apache-tomcat-VERSION tomcat
二进制安装后需要指定一下程序路径
vim /etc/profile.d/tomcat.sh
export PATH=$PATH:/usr/local/tomcat/bin
tomcat程序环境:
tomcat的目录结构
bin :脚本,及启动时用到的类;
conf:配置文件目录;
lib :库文件,Java类库,jar;
logs:日志文件目录;
temp:临时文件目录;
webapps:webapp的默认目录;
work:工作目录,主要存放编译后的字节码文件;
使用二进制方式安装,使用catalina.sh 脚本对tomcat服务进行管理
catalina.sh
debug Start Catalina in a debugger
debug -security Debug Catalina with a security manager
jpda start Start Catalina under JPDA debugger
run Start Catalina in the current window
run -security Start in the current window with security manager 前台启动
start Start Catalina in a separate window
start -security Start in a separate window with security manager
stop Stop Catalina, waiting up to 5 seconds for the process to end
stop n Stop Catalina, waiting up to n seconds for the process to end
stop -force Stop Catalina, wait up to 5 seconds and then use kill -KILL if still running
stop n -force Stop Catalina, wait up to n seconds and then use kill -KILL if still running
configtest Run a basic syntax check on server.xml - check exit code for result
version What version of tomcat are you running
注:使用 -security 表示调用conf路径下的catalina.policy安全策略文件。
rpm包安装的程序环境:
### 配置文件目录:/etc/tomcat
主配置文件:server.xml
webapps存放位置:/var/lib/tomcat/webapps/
Unit File:tomcat.service
环境配置文件:/etc/sysconfig/tomcat
tomcat的配置目录下的文件
server.xml :主配置文件;
web.xml :每个webapp只有“部署”后才能被访问,它的部署方式通常由web.xml进行定义,其存放位置为WEB-INF/目录中;此文件为所有的webapps提供默认部署相关的配置;如果程序的WEB_INF目录中没有定义wem.xml就会继承这个文件的配置。
context.xml :每个webapp都可以使用的配置文件,它通常由专用的配置文件context.xml来定义,其存放位置为WEB-INF/目录中 ;此文件为所有的webapps提供默认配置;主要用来定义部署webapp时的背景信息。如果程序的WEB_INF目录中没有定义wem.xml就会继承这个文件的配置。
tomcat-users.xml :用户认证的账号和密码文件;权限配置通过角色(role)实现,将用户添加在角色上就会获取这个角色的权限,此文件在tomcat启动时被装入内存,如果修改必须重启才能生效。
catalina.policy :当使用-security选项启动tomcat时,用于为tomcat设置安全策略;
catalina.properties :Java属性的定义文件,用于设定类加载器路径,以及一些与JVM调优相关参数;
logging.properties :日志系统相关的配置;
log4j :java自带的日志管理系统
server.xml(主配置文件)
服务
侦听器
全局配置
容器
连接器
...
引擎
主机
...
过滤器
...
...
顶级组件 :Server
服务类组件:Service
连接器组件:http, https, ajp(apache jserv protocol)
容器类 :Engine, Host, Context,可以在里面部署应用程序
被嵌套类 :valve, logger, realm, loader, manager, ...
集群类组件:listener, cluster, ...
一个server中可以有多个连接器(HTTP、HTTPS、AJP),在server有多个引擎,一个连接器只能连接到一个引擎,但是一个引擎却可以接受多个连接器的请求,在server和引擎中间有一层service(服务),作用是把连接器和引擎连接对应。
在引擎中有多个host的,host是处理请求提供服务,在一个host中可以部署多个程序,通过context实现。
部署(deploy)webapp的相关操作:
deploy:将webapp的源文件放置于目标目录(网页程序文件存放目录),配置tomcat服务器能够基于web.xml和context.xml文件中定义的路径来访问此webapp;将其特有的类和依赖的类通过class loader装载至JVM;
部署有两种方式:在server.xml中定义
自动部署:auto deploy
-
手动部署:手动部署分为冷部署和热部署
a. 冷部署:把webapp复制到指定的位置,而后才启动tomcat;
b. 热部署:在不停止tomcat的前提下进行部署;热部署工具:manager、ant脚本、tcd(tomcat client deployer)等
部署一台host主机
vim /etc/tomcat/server.xml
host在engine中定义
name:主机名
appBase:此Host的webapps的默认存放目录,指存放非归档的web应用程序的目录或归档的WAR文件目录路径;可以使用基于$CATALINA_BASE变量所定义的路径的相对路径;
unpackWARs:是否自动展开host根目录下的war格式的归档文件。
autoDeploy:在Tomcat处于运行状态时,将某webapp放置于appBase所定义的目录中时,是否自动将其部署至tomcat;
webapp归档格式:Java打包格式
war:webapp的归档文件;这个文件放在站点目录下自动展开。
.jar:EJB的类打包文件(类库);
.rar:资源适配器类打包文件;
.ear:企业级webapp;
JSP WebAPP的组织结构:
/: webapps的根目录
index.jsp:主页文件; ...还有很多的其他.jsp文件。
WEB-INF/ :当前webapp的私有资源路径,通常用于存储当前webapp的web.xml和context.xml配置文件;不能被用户访问,被tomcat禁止通过web访问。
META-INF/:类似于WEB-INF/;
classes/ :类文件,当前webapp所提供的类;
lib/ :类文件,当前webapp所提供的类,被打包为jar格式;
手动提供一测试类应用,并冷部署:
[[email protected] ~]#mkdir -p /app/web/ROOT/{classes,lib,WEB-INF}
[[email protected] ~]#cd /app/web/ROOT/ #主机的默认应用的配置文件需要放在ROOT目录下
[[email protected] ROOT]#vim index.jsp #编辑一个测试页
<%@ page language="java" %>
<%@ page import="java.util.*" %> #导入类库
Test Page
<% out.println("hello world");
%>
tomcat的网页文件格式是.jsp结尾的
JSP: Java Server Page
类库:
TITLE
...
<%
... java code...
%>
执行过程:.jsp -->jasper--> .java --> javac --> .class --> jvm
注:编译过程中产生的java文件和class文件保存在toncat/work/Catalina/主机名/应用名/org/apache/jsp目录下
注意:基于jasper将静态输出的数据转为java代码进行输出,结果为servlet规范的代码;
将默认的主机改为test.com
测试
[[email protected] ROOT]#systemctl start tomcat #启动tomcat
[[email protected] ROOT]#ss -ntl #查看监听端口
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:22 *:*
LISTEN 0 100 :::8080 :::* #tomcat的http连接器默认使用8080端口
LISTEN 0 128 :::22 :::*
LISTEN 0 1 ::ffff:127.0.0.1:8005 :::* #tomcat的管理端口,默认使用127.0.0.1的8005端口
LISTEN 0 100 :::8009 :::* #tomcat的jap连接器,默认使用的8009端口
热部署主机和应用
将默认主机修改回localhost
host manager
点击取消会进入如下页面
编辑用户配置文件/etc/tomcat/tomcat-users.xml
添加如下内容。需要定义在
#定义用户角色
配置用户和密码
默认定义的用户角色
admin-gui 允许通过web访问host manager
admin-script 允许访问文本(命令行)接口
重启tomcat,刷新页面,输入用户名密码
配置manager
添加manager用户,在tomcat-users.xml文件中
manager用户角色:
manager-gui 允许用户访问基于图形界面的manager和status
manager-script 允许用户通过命令行接口访问manager和status
manager-jmx 允许用户通过jmx(java管理扩展)代理访问status页面,jmx可以用来接口tomcat的信息
manager-status 允许用户查看图形和命令行接口下status信息
也可以再给原来的用户添加一个角色,如下图。
重启tomcat进入manager管理页面
在这个页面中,可以对默认主机的应用进行管理
undeploy:反部署、拆除,停止webapp,并从tomcat实例上卸载webapp;通过manager管理
start :启动处于停止状态的webapp;
stop :停止webapp,不再向用户提供服务;其类依然在jvm上;
redeploy:重新部署;
expire sessions:设置会话的过期时间
添加应用