自 2017 年 11 月编程语言排行榜 Java 占比 13%,高居榜首,Tomcat 也一度成为 Java开发人员的首选。其开源、占用系统资源少、跨平台等特性深受广大程序员喜爱。
Tomcat是Apache软件基金会(Apache Software Foundation)Jakarta 项目中的一个核心项目,由 Apache、Sun 和其他一些公司及个人共同开发而成,是 Sun 公司官方推荐的 Servlet 和 JSP 容器。因为 Tomcat 技术先进、性能稳定、免费,因而深受 Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的 Web 应用服务器。
Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器,属于轻量级应用服务器, 在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试 JSP 程序的首选。
对于一个初学者来说,可以这样认为,当在一台机器上配置好 Apache 服务器,可利 用它响应 HTML(标准通用标记语言下的一个应用)页面的访问请求。实际上,Tomcat 是 Apache 服务器的扩展,但运行时它是独立运行的,所以当运行 Tomcat 时,它实际上作为 一个与 Apache 独立的进程单独运行的。
当配置正确时,Apache 为 HTML 页面服务,而 Tomcat 实际上运行 JSP 页面和 Servlet。Tomcat 和 IIS 等 Web 服务器一样,具有处理 HTML 页面的功能,另外它还是一 个 Servlet 和 JSP 容器,独立的 Servlet 容器是 Tomcat 的默认模式。不过,Tomcat 处理静 态 HTML 的能力不如 Apache 服务器。
Tomcat 由一系列的组件构成,其中核心的组件有三个。
[root@localhost ~]# iptables -F ##清空防火墙规则
[root@localhost ~]# setenforce 0 ##关闭内核防护
[root@localhost ~]# cd /opt ##到/opt目录下是为了看的更清楚
将JDK的rpm包拷贝进来,也可以使用使用get方式下载
[root@localhost opt]# ls
jdk-8u201-linux-x64.rpm rh
linux系统中自带JDK,我们可以使用以下命令查看默认安装的JDK属性
[root@localhost opt]# java -version
openjdk version "1.8.0_181"
OpenJDK Runtime Environment (build 1.8.0_181-b13)
OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode)
[root@localhost opt]# rpm -ivh jdk-8u201-linux-x64.rpm ##使用rpm方式安装
警告:jdk-8u201-linux-x64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID ec551f03: NOKEY
准备中... ################################# [100%]
正在升级/安装...
1:jdk1.8-2000:1.8.0_201-fcs ################################# [100%]
Unpacking JAR files...
tools.jar...
plugin.jar...
javaws.jar...
deploy.jar...
rt.jar...
jsse.jar...
charsets.jar...
localedata.jar...
我们要为JDK设置环境变量,便于使用java命令
[root@localhost opt]# cd /usr/java/jdk1.8.0_201-amd64/
[root@localhost jdk1.8.0_201-amd64]# pwd
/usr/java/jdk1.8.0_201-amd64 ##将这个路径复制一下,便于声明环境变量,以防地址出错
[root@localhost jdk1.8.0_201-amd64]# vim /etc/profile
export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64
export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH=$JAVA_HOME/bin:$PATH
[root@localhost jdk1.8.0_201-amd64]# source /etc/profile ##加载环境变量
JDK成功安装
[root@localhost jdk1.8.0_201-amd64]# java -version
java version "1.8.0_201"
Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)
[root@localhost jdk1.8.0_201-amd64]# cd /opt
将软件包拷贝到当前目录
[root@localhost opt]# ls
apache-tomcat-9.0.16.tar.gz jdk-8u201-linux-x64.rpm rh
[root@localhost opt]# tar zvxf apache-tomcat-9.0.16.tar.gz -C /usr/local
[root@localhost opt]# cd /usr/local/
[root@localhost local]# ls
apache-tomcat-9.0.16 etc include lib64 sbin src
bin games lib libexec share
[root@localhost local]# mv apache-tomcat-9.0.16/ tomcat ##改名为tomcat,方便记忆
[root@localhost local]# cd tomcat/bin/
[root@localhost bin]# ls
bootstrap.jar configtest.sh shutdown.sh
catalina.bat daemon.sh startup.bat
catalina.sh digest.bat startup.sh
catalina-tasks.xml digest.sh tomcat-juli.jar
ciphers.bat makebase.bat tomcat-native.tar.gz
ciphers.sh makebase.sh tool-wrapper.bat
commons-daemon.jar setclasspath.bat tool-wrapper.sh
commons-daemon-native.tar.gz setclasspath.sh version.bat
configtest.bat shutdown.bat version.sh
建立软链接到/usr/bin下,方便直接调用脚本
[root@localhost bin]# ln -s /usr/local/tomcat/bin/startup.sh /usr/bin/
[root@localhost bin]# ln -s /usr/local/tomcat/bin/shutdown.sh /usr/bin/
[root@localhost bin]# startup.sh ##开启服务
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/java/jdk1.8.0_201-amd64
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
[root@localhost bin]# cd ~
[root@localhost ~]# netstat -ntap | grep 8080 ##查看服务的8080端口是否开启
tcp6 0 0 :::8080 :::* LISTEN 11993/java
查看日志会发现 Tomcat 第一次启动很慢,默认情况下都需要几十秒。在/usr/java/jdk1.8.0_171-amd64/jre/lib/security/java.security 文件中,将:securerandom.source=file:/dev/random修改成 securerandom.source=file:/dev/urandom,可以优化启动时间。
[root@localhost ~]# cd /usr/java/jdk1.8.0_201-amd64/jre/lib/security/ ##到这个目录下找到java.security文件
[root@localhost security]# vim java.security
securerandom.source=file:/dev/urandom ##优化启动时间,然后重启服务就可以看到启动时间缩短了
/dev/random与/dev/urandom是系统中提供的随机伪设备,也就是逻辑设备,他们的任务是提供用不为空的随机字节数据流,很多解密程序与安全应用程序(如SSH、Key、SSL等)需要他们提供随机数据流。
区别:
/dev/random的random pool依赖于系统中断,因此在系统的中断数不足时, /dev/random设备会一直封锁,尝试读取的进程就会进入等待状态,知道系统中断数充分够用。 /dev/random可以保证数据的随机性。
/dev/urandom不依赖系统中断,也就不会造成进程忙等待,但是数据的随机性不高。
[root@localhost ~]# cd /usr/local/tomcat/webapps/
[root@localhost webapps]# ls
docs examples host-manager manager ROOT
[root@localhost webapps]# mkdir njit njit1 ##创建两个站点目录
[root@localhost webapps]# cd njit
[root@localhost njit]# vim index.jsp ##创建网页首页
<h1>this is njit web</h1>
[root@localhost njit]# cd ../njit1 ##到另一个虚拟主机的站点路径
[root@localhost njit1]# vim index.jsp ##创建网页首页
<h1>this is njit1 web</h1>
设置DNS服务
[root@localhost njit1]# yum install bind -y
[root@localhost njit1]# vim /etc/named.conf
[root@localhost njit1]# vim /etc/named.rfc1912.zones
[root@localhost njit1]# cp -p /var/named/named.localhost /var/named/njit.com.zone
[root@localhost njit1]# vim /var/named/njit.com.zone
[root@localhost njit1]# cp -p /var/named/njit.com.zone /var/named/njit1.com.zone
[root@localhost njit1]# systemctl start named
[root@localhost conf]# vim server.xml
<Host name="www.njit.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<Context docBase="/usr/local/tomcat/webapps/njit" path="" reloadable="true"/>
</Host>
<Host name="www.njit1.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<Context docBase="/usr/local/tomcat/webapps/njit1" path="" reloadable="true"/>
</Host>
[root@localhost conf]# shutdown.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/java/jdk1.8.0_201-amd64
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
[root@localhost conf]# startup.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/java/jdk1.8.0_201-amd64
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
Host name:域名
appBase:应用程序的目录
unpackWARs:是否将代表Web应用的WAR文件解压;如果为true,通过解压后的文件结构运行该Web应用,如果为false,直接使用WAR文件运行Web应用。
autoDeploy:自动部署
xmlValidation:xml验证
xmlNamespaceAware:和web.xml的解析方式有关。默认为true,设置为false可以提升性能
Context docBase:指定了该Web应用使用的WAR包路径,或应用目录
path:指定了访问该Web应用的上下文路径,path属性为””,那么这个Context是虚拟主机的默认Web应用
reloadable:指示tomcat是否在运行时监控在WEB-INF/classes和WEB-INF/lib目录下class文件的改动。如果值为true,那么当class文件改动时,会触发Web应用的重新加载