一、前言

Tomcat 是 Apache 软件基金会(Apache Software Foundation)Jakarta 项目中的核心项目,由 Apache、Sun 和其他一些公司及个人共同开发。使用 Java 语言编写的 Web 应用可以用 Tomcat + JDK 来运行。

Tomcat 是一个中间件,真正的起作用的是解析 Java 脚本的 JDK。JDK(Java Development Kit)是整个 Java 的核心,它包含了 Java 的运行环境和一堆与 Java 相关的工具及 Java 基础库。

主流的 JDK 是 Sun 公司(已经被 Oracle 公司收购)发布的 JDK,IBM 公司也发布了 JDK,在 CentOS 上可以使用 yum 命令安装 openjdk。

OpenJDK 原是 Sun Microsystems 公司为 Java 平台构建的 Java 开发环境(JDK)的开源版本,完全自由,开放源码。Sun Microsystems 公司在 2006 年的 JavaOne 大会上称将对 Java 开放源代码,于 2009 年 4 月 15 日正式发布 OpenJDK。甲骨文在 2010 年收购Sun Microsystem 之后接管了这个项目。Oracle/Sun JDK 里面包含的 JVM 是 HotSpotVM,HotSpot VM 只有非常非常少量的功能没有在 OpenJDK 里,那部分在 Oracle 内部的代码库里。这些私有部分都不涉及 JVM 的核心功能。所以说,Oracle/Sun JDK 与 OpenJDK 其实使用的是同一个代码库。从一个 Oracle 内部员工的角度来看,当他要构建 OracleJDK 时,他同样需要先从 http://hg.openjdk.java.net 签出 OpenJDK,然后从 Oracle 内部的代码库签出私有的部分,放在 OpenJDK 代码下的一个特定目录里,然后构建。值得注意的是,Oracle JDK 只发布二进制安装包,而 OpenJDK 只发布源码。

二、安装 JDK

JDK从1.5 版本开始,在官方的正式文档与宣传资料中已经不再使用类似 "JDK1.5" 的名称,只有程序员内部使用的开发版本号才继续沿用 1.5,1.6,1.7 ……的版本号,而且公开版本号则改为 JDK5,JDK6,JDK7……。

JDK 所有版本下载页面为:https://www.oracle.com/technetwork/java/javase/archive-139210.html,找到 Java SE 7,Accept License Agreement,复制下载地址:https://download.oracle.com/otn/java/jdk/7u80-b15/jdk-7u80-linux-x64.tar.gz,但是不能使用 wget 下载,因为会失败,可以复制此下载地址用浏览器下载或迅雷下载。然后上传到 Linux 的 /usr/local/src 中,如下:

[root@masternode ~]# cd /usr/local/src
[root@masternode src]# du -sh jdk-7u80-linux-x64.tar.gz
147M jdk-7u80-linux-x64.tar.gz
[root@masternode src]# tar zxf jdk-7u80-linux-x64.tar.gz
[root@masternode src]# mv jdk1..0_80 /usr/local/jdk1.

编辑 /etc/profile 配置文件,在下面添加 JDK 环境变量,如下:

[root@masternode src]# vim /etc/profile
......
#Java
export JAVA_HOME=/usr/local/jdk1.
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH
[root@masternode src]# source /etc/profile

分别运行 java,javac 可以检测 JDK 是否已经安装成功,查看 JDK 版本号,如下:

[root@masternode src]# javac
......
[root@masternode src]# java
......
[root@masternode src]# java -version
java version "1.7.0_80"
Java(TM) SE Runtime Environment (build 1.7.0_80-b15)
Java HotSpot(TM) -Bit Server VM (build 24.80-b11, mixed mode)

可以正常显示 JDK 版本信息,说明安装成功。

三、安装 Tomcat

Tomcat 所有版本下载页面为:https://archive.apache.org/dist/tomcat/,找到 tomcat-7 的 二进制 bin 包下载地址:https://archive.apache.org/dist/tomcat/tomcat-7/v7.0.96/bin/apache-tomcat-7.0.96.tar.gz,使用 wget 下载,如下:

[root@masternode src]# wget https://archive.apache.org/dist/tomcat/tomcat-7/v7.0.96/bin/apache-tomcat-7.0.96.tar.gz
[root@masternode src]# tar zxf apache-tomcat-7.0..tar.gz
[root@masternode src]# mv apache-tomcat-7.0. /usr/local/tomcat7
[root@masternode src]# ls -l /usr/local/tomcat7
total
drwxr-xr-x root root Oct : bin
-rw-r--r-- root root Jul : BUILDING.txt
drwxr-xr-x root root Jul : conf
-rw-r--r-- root root Jul : CONTRIBUTING.md
drwxr-xr-x root root Oct : lib
-rw-r--r-- root root Jul : LICENSE
drwxr-xr-x root root Jul : logs
-rw-r--r-- root root Jul : NOTICE
-rw-r--r-- root root Jul : README.md
-rw-r--r-- root root Jul : RELEASE-NOTES
-rw-r--r-- root root Jul : RUNNING.txt
drwxr-xr-x root root Oct : temp
drwxr-xr-x root root Jul : webapps
drwxr-xr-x root root Jul : work

如果是 Windows 系统,启动和关闭 tomcat 的脚本如下:

/usr/local/tomcat7/bin/startup.bat
/usr/local/tomcat7/bin/shutdown.bat

如果是 Linux 系统,启动和关闭 tomcat 的脚本如下:

/usr/local/tomcat7/bin/startup.sh
/usr/local/tomcat7/bin/shutdown.sh

启动 tomcat 并检查进程和端口,如下:

[root@masternode src]# /usr/local/tomcat7/bin/startup.sh
Using CATALINA_BASE: /usr/local/tomcat7
Using CATALINA_HOME: /usr/local/tomcat7
Using CATALINA_TMPDIR: /usr/local/tomcat7/temp
Using JRE_HOME: /usr/local/jdk1.
Using CLASSPATH: /usr/local/tomcat7/bin/bootstrap.jar:/usr/local/tomcat7/bin/tomcat-juli.jar
Tomcat started.
[root@masternode src]# ps aux |grep tomcat
root 11.3 6.5 pts/ Sl : : /usr/local/jdk1./bin/java -Djava.util.logging.config.file=/usr/local/tomca /conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize= -Dignore.endorsed.dirs= -classpath /usr/local/tomcat7/bin/bootstrap.jar:/usr/local/tomcat7/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat7 -Dcatalina.home=/usr/local/tomcat7 -Djava.io.tmpdir=/usr/local/tomcat7/temp org.apache.catalina.startup.Bootstrap start
root 0.0 0.0 pts/ S+ : : grep --color=auto tomcat
[root@masternode src]# netstat -ltnp | grep java
tcp6 ::: :::* LISTEN /java
tcp6 ::: :::* LISTEN /java
tcp6 127.0.0.1: :::* LISTEN /java

tomcat 的 java 进程 共监听了三个端口,分别是 8080 端口提供 Web 服务,8005 是管理端口,8009 是第三方服务调用端口,可以在 /usr/local/tomcat7/conf/server.xml 中看到。

用浏览器访问:http://192.168.150.140:8080,默认访问的是 /usr/local/tomcat7/webapps 中的 ROOT 项目,如下:

可以看到 tomcat 的首页显示正常。

四、Tomcat 虚拟主机

Apache 和 Nginx 都属于 Web Server,都有虚拟主机配置文件,而 Tomcat 同样有虚拟主机配置文件 /usr/local/tomcat7/conf/server.xml。何为 "虚拟主机"?一台物理机上搭建多个 web 站点,每个 web 站点独立运行,互不干扰,这些站点就是 "虚拟主机"。虚拟主机的实现方式通常有两种,即基于域名的虚拟主机(最常用)和基于端口的虚拟主机。

4.1 基于域名的虚拟主机

这种方式最常见,多个域名解析到同一个 IP 地址,在 Web 服务器里添加多个站点,每个站点设定一个域名。HTTP 协议请求里包含了域名信息,当 Web 服务器收到访问请求时,就可以根据不同的主机名来访问不同的网站。如下:

<Host name="www.moonxy.com"  appBase="" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<Context docBase="/data/www/moonxy" path="" reloadable="true" debug="0" crossContext="true"/>
</Host>
<Host name="www.amplinux.com" appBase="" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<Context docBase="/data/www/amplinux" path="" reloadable="true" debug="0" crossContext="true"/>
</Host>

<Host> 和 </Host> 之间是虚拟主机配置部分,name 定义域名,appBase 定义应用的目的,docBase 用来定义网站文件的存放路径,如果不定义,默认是在 appBase/ROOT 目录下,定义 docBase 后就以该目录为主,其中 appBase 和 docBase 可以一致。

4.2 基于端口的虚拟主机

一个 IP 地址,通过不同的端口实现不同网站的访问。如下:

<Service name="Catalina">
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
</Realm>
<Host name="www.moonxy.com" appBase="/data/www/moonxy" unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t &quot;%r&quot; %s %b" />
</Host>
</Engine>
</Service> <Service name="Catalina2">
<Connector port="8090" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
<Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />
<Engine name="Catalina2" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
</Realm>
<Host name="www.amlinux.com" appBase="/data/www/amlinux" unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t &quot;%r&quot; %s %b" />
</Host>
</Engine>
</Service>

分别配置了 8080 和 8090 端口,即http://www.moonxy.com:8080/ 和 http://www.amlinux.com:8090/。

4.3 Tomcat 日志

tomcat 对应日志的配置文件:tomcat 目录下的 /conf/logging.properties,日志目录为 /usr/local/tomcat/logs。

tomcat 的日志等级有:日志输出级别:SEVERE (最高级别) > WARNING > INFO > CONFIG > FINE > FINER(精心) > FINEST (所有内容,最低级别)

tomcat 有五类日志 :catalina、localhost、manager、admin、host-manager。

catalina.out 即标准输出和标准出错,所有输出到这两个位置的都会进入 catalina.out,这里包含 tomcat 运行自己输出的日志以及应用里向 console 输出的日志。默认这个日志文件是不会进行自动切割的,我们需要借助其他工具进行切割(注意:catalina.out 文件如果过大会影响系统性能)。

catalina.{yyyy-MM-dd}.log 是 tomcat 自己运行的一些日志,这些日志还会输出到 catalina.out,但是应用向 console 输出的日志不会输出到 catalina.{yyyy-MM-dd}.log,它是 tomcat 的启动和暂停时的运行日志,注意,它和 catalina.out 是里面的内容是不一样的。

localhost.{yyyy-MM-dd}.log 是默认虚拟主机错误日志,应用初始化(listener,filter,servlet)未处理的异常最后被 tomcat 捕获而输出的日志,它也是包含 tomcat 的启动和暂停时的运行日志,但它没有 catalina.2018-09-19.log 日志全。它只是记录了部分日志。

localhost_access_log.2019-09-19.txt 是访问 tomcat 的访问日志,请求时间和资源,状态码都有记录。

host-manager.2019-09-19.log 是 tomcat 虚拟主机的管理日志。

manager.2019-09-19.log 是 tomcat 的 manager 管理相关的日志文件。

Linux 笔记 - 第二十四章 配置 Tomcat的更多相关文章

  1. Linux 笔记 - 第十四章 LAMP 之(二) 环境配置

    博客地址:http://www.moonxy.com 一.前言 LAMP 环境搭建好之后,其实仅仅是安装上了软件,我们还需要掌握 httpd 和 PHP 的配置. 二.httpd 配置 2.1 创建虚 ...

  2. Linux 笔记 - 第二十二章 Nginx 配置 SSL

    一.前言 基础知识 1.1 公钥密码体制(public-key cryptography) 公钥密码体制分为三个部分,公钥.私钥.加密解密算法,它的加密解密过程如下: 加密:通过加密算法和公钥对内容( ...

  3. Linux 笔记 - 第十四章 LAMP 之(一) 环境搭建

    博客地址:http://www.moonxy.com 一.前言 LAMP 是 Linux Apache MySQL PHP 的简写,即把 Apache.MySQL 以及 PHP 安装在 Linux 系 ...

  4. Linux 笔记 - 第十九章 配置 Squid 正向代理和反向代理服务

    一.简介 Squid 是一个高性能的代理缓存服务器,对应中文的乌贼,鱿鱼的意思.Squid 支持 FTP,gopher 和 HTTP 协议.和一般的代理缓存软件不同,Squid 用一个单独的,非模块化 ...

  5. Gradle 1.12用户指南翻译——第二十四章. Groovy 插件

    其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://g ...

  6. “全栈2019”Java多线程第二十四章:等待唤醒机制详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...

  7. “全栈2019”Java第二十四章:流程控制语句中决策语句switch下篇

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  8. 第二十四章 在线会话管理——《跟我学Shiro》

    目录贴:跟我学Shiro目录贴 有时候需要显示当前在线人数.当前在线用户,有时候可能需要强制某个用户下线等:此时就需要获取相应的在线用户并进行一些操作. 本章基于<第十六章 综合实例>代码 ...

  9. 【读书笔记】C#高级编程 第二十四章 文件和注册表操作

    (一)文件和注册表 对于文件系统操作,相关的类几乎都在System.IO名称空间中,而注册表操作由System.Win32名称空间中的类来处理. (二)管理文件系统 System.MarshalByR ...

随机推荐

  1. ios官方demo

    http://developer.apple.com/iphone/library/samplecode/Reachability/Reachability.ziphttp://developer.a ...

  2. (转)Unity与3ds Max的单位关系(使用FBX文件)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/a1780531/article/deta ...

  3. UML——Use Case Diagram(用例图)

    用例图主要用来描述角色以及角色与用例之间的连接关系.说明的是谁要使用系统,以及他们使用该系统可以做些什么.一个用例图包含了多个模型元素,如系统.参与者和用例,并且显示这些元素之间的各种关系,如泛化.关 ...

  4. 构建Apache Web服务器

    Apache 是世界使用排名第一的 Web 服务器软件.它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的 Web 服务器端软件之一.Apache工作模式有多种,其 ...

  5. appium自动化常用API

    常用函数 一.获得信息类API (1)获取当前页面的activity名,比如: (.ui.login.ViewPage)  current_activity() 比如我们需要实现这个登录的功能时,主要 ...

  6. 防止ARP欺骗

    前言: 曾经因为宿舍里面的同学经常熬夜打游戏,好言相劝不管用,无奈之下使用arp欺骗他们的主机,使之晚上11点之后游戏延迟,掉线,最后,一到11点同学们就都上床睡觉了. 防止arp欺骗的三种思路: 在 ...

  7. docker 部署appium

    1.docker appium镜像和命令:https://github.com/appium/appium-docker-android 2.启动appium docker run --privile ...

  8. 【Spring IoC】Spring Bean(三)

    一.Spring Bean的定义 被称作 bean 的对象是构成应用程序的支柱也是由 Spring IoC 容器管理的.bean 是一个被实例化,组装,并通过 Spring IoC 容器所管理的对象. ...

  9. Leetcode142 环形链表

    很多题解没有讲清楚非环部分的长度与相遇点到环起点那部分环之间为何是相等的这个数学关系.这里我就补充下为何他们是相等的.假设非环部分的长度是x,从环起点到相遇点的长度是y.环的长度是c.现在走的慢的那个 ...

  10. es启动失败

    Aug 09 21:43:23 10921114-elklogserver elasticsearch[30152]: 2018-08-09 21:43:23,068 main ERROR Null ...