• Linux 笔记


    一、前言

    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.7.0_80 /usr/local/jdk1.7

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

    [root@masternode src]# vim /etc/profile
    ......
    #Java
    export JAVA_HOME=/usr/local/jdk1.7
    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) 64-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.96.tar.gz
    [root@masternode src]# mv apache-tomcat-7.0.96 /usr/local/tomcat7
    [root@masternode src]# ls -l /usr/local/tomcat7
    total 132
    drwxr-xr-x 2 root root  4096 Oct 19 22:26 bin
    -rw-r--r-- 1 root root 18099 Jul 24 21:05 BUILDING.txt
    drwxr-xr-x 2 root root   158 Jul 24 21:05 conf
    -rw-r--r-- 1 root root  6090 Jul 24 21:05 CONTRIBUTING.md
    drwxr-xr-x 2 root root  4096 Oct 19 22:26 lib
    -rw-r--r-- 1 root root 56846 Jul 24 21:05 LICENSE
    drwxr-xr-x 2 root root     6 Jul 24 21:00 logs
    -rw-r--r-- 1 root root  1281 Jul 24 21:05 NOTICE
    -rw-r--r-- 1 root root  3255 Jul 24 21:05 README.md
    -rw-r--r-- 1 root root  9363 Jul 24 21:05 RELEASE-NOTES
    -rw-r--r-- 1 root root 16978 Jul 24 21:05 RUNNING.txt
    drwxr-xr-x 2 root root    30 Oct 19 22:26 temp
    drwxr-xr-x 7 root root    81 Jul 24 21:03 webapps
    drwxr-xr-x 2 root root     6 Jul 24 21:00 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.7
    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       8451 11.3  6.5 1104748 65668 pts/0   Sl   22:35   0:03 /usr/local/jdk1.7/bin/java -Djava.util.logging.config.file=/usr/local/tomca 7/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -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       8491  0.0  0.0 112708   976 pts/0    S+   22:35   0:00 grep --color=auto tomcat
    [root@masternode src]# netstat -ltnp | grep java
    tcp6       0      0 :::8009                 :::*                    LISTEN      8451/java
    tcp6       0      0 :::8080                 :::*                    LISTEN      8451/java
    tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      8451/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 管理相关的日志文件。

  • 相关阅读:
    java编码规范
    Unix操作系统内核结构报告
    vim常用命令组合
    JavaWeb学习笔记13--Servlet开发(二)
    JavaWeb学习笔记12--Servlet开发(一)
    JavaWeb学习笔记11--JSTL标签库
    JavaWeb学习笔记10--Cookie实现记住密码的功能
    JavaWeb学习笔记9--JSP属性范围
    JavaWeb学习笔记8--JSP内置对象详解
    JavaWeb学习笔记7--JSP脚本元素、指令元素、动作元素
  • 原文地址:https://www.cnblogs.com/cnjavahome/p/11706197.html
Copyright © 2020-2023  润新知