{"msg":"操作成功","code":200,"data":{"createBy":"admin","createTime":"2020-01-01 19:34:40","updateBy":"admin","updateTime":"2020-01-01 19:34:40","remark":null,"id":12,"articleTitle":"Tomcat安装与配置","articleUrl":"tomcat_install","articleThumbnail":"https://www.asumimoe.com/imgfiles/20220906/ead03235c356458c9e3fa664b3f5837f.jpg","articleFlag":"0","draftStatus":"1","reprintStatement":"1","articleSummary":"Tomcat是Apache 软件基金会（Apache Software Foundation）的Jakarta 项目中的一个核心项目，由Apache、Sun 和其他一些公司及个人共同开发而成。深受Java 爱好者的喜爱并得到了部分软件开发商的认可，成为目前比较流行的Web 应用服务器。","articleContent":"## Tomcat介绍\n\n### Tomcat简介\n\nTomcat 是由 Apache 开发的一个 Servlet 容器，实现了对 Servlet 和 JSP 的支持，并提供了作为Web服务器的一些特有功能，如Tomcat管理和控制平台、安全域管理和Tomcat阀等。\n\n由于 Tomcat 本身也内含了一个 HTTP 服务器，它也可以被视作一个单独的 Web 服务器。但是，不能将 Tomcat 和 Apache HTTP 服务器混淆，Apache HTTP 服务器是一个用 C 语言实现的 HTTP Web 服务器；这两个 HTTP web server 不是捆绑在一起的。Tomcat 包含了一个配置管理工具，也可以通过编辑XML格式的配置文件来进行配置。\n\n### 一般 web 项目路径结构\n\n```shell\n|-- webapp                         # 站点根目录\n    |-- META-INF                   # META-INF 目录\n    |   `-- MANIFEST.MF            # 配置清单文件\n    |-- WEB-INF                    # WEB-INF 目录\n    |   |-- classes                # class文件目录\n    |   |   |-- *.class            # 程序需要的 class 文件\n    |   |   `-- *.xml              # 程序需要的 xml 文件\n    |   |-- lib                    # 库文件夹\n    |   |   `-- *.jar              # 程序需要的 jar 包\n    |   `-- web.xml                # Web应用程序的部署描述文件\n    |-- <userdir>                  # 自定义的目录\n    |-- <userfiles>                # 自定义的资源文件\n```\n\n- webapp：工程发布文件夹。其实每个 war 包都可以视为 webapp 的压缩包。\n- META-INF：META-INF 目录用于存放工程自身相关的一些信息，元文件信息，通常由开发工具，环境自动生成。\n- WEB-INF：Java web应用的安全目录。所谓安全就是客户端无法访问，只有服务端可以访问的目录。\n- /WEB-INF/classes：存放程序所需要的所有 Java class 文件。\n- /WEB-INF/lib：存放程序所需要的所有 jar 文件。\n- /WEB-INF/web.xml：web 应用的部署配置文件。它是工程中最重要的配置文件，它描述了 servlet 和组成应用的其它组件，以及应用初始化参数、安全管理约束等。\n\nTomcat要求可以作为网站根目录的路径下必须包含WEB-INF文件夹，该文件夹下必须有名为web.xml的文件。\n\n## Tomcat安装\n\n### 安装Java环境\n\nTomcat8要求java版本在1.7以上，我选择升级java版本到1.8。\n\n1. 下载java环境安装包并上传至linux服务器\n\n2. 创建java安装目录\n\n   ```bash\n   mkdir /usr/local/java1.8\n   ```\n\n3. 解压JDK包\n\n   ```bash\n   tar -zxf jdk-8u202-linux-x64.tar.gz -C /usr/local/java1.8\n   ```\n\n4. 修改环境变量文件\n\n   ```bash\n   vim /etc/profile\n   export JAVA_HOME=/usr/local/java1.8\n   export PATH=$PATH:$JAVA_HOME/bin\n   export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar\n   export JRE_HOME=$JAVA_HOME/jre\n   ```\n\n5. 重新加载环境变量文件使配置生效\n\n   ```bash\n   source /etc/profile\n   ```\n\n### 安装Tomcat\n\n1. 下载Tomcat安装包并解压\n\n   ```bash\n   mkdir /usr/local/tomcat\n   tar -zxf apache-tomcat-8.5.15.tar.gz -C /usr/local/tomcat\n   ```\n\n2. 启动tomcat\n\n   ```bash\n   cd /usr/local/tomcat\n   chmod -R +x ./bin\n   ./bin/startup.sh\n   ```\n\n3. 访问http://localhost:8080验证是否启动成功\n\n4. Tomcat目录结构\n\n   - bin目录存放一些启动运行Tomcat的可执行程序和相关内容。\n   - conf存放关于Tomcat服务器的全局配置。\n   - lib目录存放Tomcat运行或者站点运行所需的jar包，所有在此Tomcat上的站点共享这些jar包。\n   - wabapps目录是默认的站点根目录，可以更改。\n   - work目录用于在服务器运行时过度资源，简单来说，就是存储jsp、servlet翻译、编译后的结果。\n\n其他目录和文件暂时不做介绍。\n\n### Tomcat设置开机自启\n\n- 方法一\n\n  ```bash\n  vim /etc/rc.d/rc.local\n  \n  export JAVA_HOME=/usr/local/java1.8 \n  /usr/local/tomcat/bin/startup.sh start\n  ```\n\n- 方法二\n\n1. 创建如下文件并添加如下内容\n\n   ```shell\n   vim /etc/init.d/tomcat\n   \n   #!/bin/bash \n   # chkconfig: 2345 10 90 \n   # description: Starts and Stops the Tomcat daemon.\n   # /etc/init.d/tomcat\n   # Tomcat auto-start\n   # Source function library.\n   #. /etc/init.d/functions\n   # source networking configuration.\n   #. /etc/sysconfig/network\n   RETVAL=0\n   export JAVA_HOME=/opt/jdk1.7.0_79\n   export JRE_HOME=/opt/jdk1.7.0_79/jre\n   export CATALINA_HOME=/usr/local/tomcat\n   export CATALINA_BASE=/usr/local/tomcat\n   start()\n   {\n       if [ -f $CATALINA_HOME/bin/startup.sh ];\n         then\n           echo $\"Starting Tomcat\"\n               $CATALINA_HOME/bin/startup.sh\n           RETVAL=$?\n           echo \" OK\"\n           return $RETVAL\n       fi\n   }\n   stop()\n   {\n       if [ -f $CATALINA_HOME/bin/shutdown.sh ];\n         then\n           echo $\"Stopping Tomcat\"\n               $CATALINA_HOME/bin/shutdown.sh\n           RETVAL=$?\n           sleep 1\n           ps -fwwu root | grep tomcat|grep -v grep | grep -v PID | awk '{print $2}'|xargs kill -9\n           echo \" OK\"\n           # [ $RETVAL -eq 0 ] && rm -f /var/lock/...\n           return $RETVAL\n       fi\n   }\n   \n   case \"$1\" in\n    start) \n       start\n       ;;\n    stop)  \n       stop\n       ;;\n                                                   \n    restart)\n        echo $\"Restaring Tomcat\"\n        $0 stop\n        sleep 1\n        $0 start\n        ;;\n    *)\n       echo $\"Usage: $0 {start|stop|restart}\"\n       exit 1\n       ;;\n   esac\n   exit $RETVAL\n   ```\n\n2. chmod a+x /etc/init.d/tomcat\n\n3. chkconfig --add tomcat   # 将tomcat添加为服务\n\n4. chkconfig tomcat on  # 设置服务开机自启\n\n**注意：**\n    \n\n```bash\n有时候为了方便管理，我们常常喜欢在Linux中将之安装为服务，然后就可以使用服务来管理。\n但是当我们运行安装服务的命令时候，假设服务名为myservice\n#chkconfig --add myservice 常常会出现\nservice myservice does not support chkconfig 我们一般在脚本开头加入下面两句就好了 #gedit /etc/init.d/myservice 添加下面两句到 #!/bin/bash 之后。\n# chkconfig: 2345 10 90 # description: myservice .... 其中2345是默认启动级别，级别有0-6共7个级别。\n等级0表示：表示关机\n等级1表示：单用户模式\n等级2表示：无网络连接的多用户命令行模式\n等级3表示：有网络连接的多用户命令行模式\n等级4表示：不可用\n等级5表示：带图形界面的多用户模式\n等级6表示：重新启动\n10是启动优先级，90是停止优先级，优先级范围是0－100，数字越大，优先级越低。\n```\n\n## 更改Tomcat配置\n\n### 修改Tomcat监听端口。\n\n我们都有过访问网站的经历。我们一般只输入域名就可以访问，那么假设我们现在作为网络服务提供者，将要对外发布网站，我们怎么让用户只输入我们的域名就能看到我们为他/她准备的网页呢？\n首先我们需要将监听端口设置为80，道理很简单，用户不会在浏览器输入:8080来访问网站，浏览器也不会自动将请求发送到服务器的8080端口。\n\n在%TOMCAT_HOME%（以下代指Tomcat的安装路径）下的conf目录下的server.xml文件中修改。\n\t\n\n```xml\n<Connector port=”8080″ protocol=”HTTP/1.1″\n```\n\n这样，就不用输入:8080了。\n\n### 修改默认站点。\n\n首先说，站点是具有特定结构的文件夹。这一点在Tomcat里表现得极为清晰。\n\n站点，在服务器上肯定是用文件夹（即目录结构）来存储和管理的。但是它和普通的文件夹又不同，在Tomcat里，可用于作为站点的文件夹必须有如下特点：拥有一个名为WEB-INF的子文件夹，该子文件夹下必须有一个名为web.xml的文件，而且该xml文件必须受约束与特定的DTD。\n我们先配置或者说叫创建一个站点，再将其设置为默认站点。\n\n配置站点：创建文件夹jpress，创建WEB-INF子文件夹，创建web.xml，完成。web.xml内容可以参考webapps/ROOT/WEB-INF/web.xml。\n\n设置为默认站点：\n这里需要分为两步执行。\n\n- 告诉Tomcat当请求哪个站点时（或者说在域名后面跟的是什么名字），你来找我。\n\n- 告诉Tomcat我在哪里。\n\n\n```xml\n<Host name=\"localhost\"  appBase=\"webapps\"\n  unpackWARs=\"true\" autoDeploy=\"true\">\n   <Context path=\"\" docBase=\"jpress\"/>\n```\n\n### 修改默认页面。\n\n那么如果没有写index.html,Tomcat会怎么展示主页呢？\n我们找到conf/web.xml。这个文件是对所有站点的共同属性做出了设置。比如大家看文件结尾处：\n    \n\n```xml\n<welcome-file-list>\n    <welcome-file>index.html</welcome-file>\n    <welcome-file>index.htm</welcome-file>\n    <welcome-file>index.jsp</welcome-file>\n</welcome-file-list>\n```\n\n这个叫做欢迎页面，当没有输入资源地址时，会由上至下地查找，获取页面，进行响应。\n改动它就可以，但是不建议在这里改，会是所有站点设置变化，你应该将其复制到你需要改动的站点下的web.xml，进行设置。\n\n### Tomcat虚拟主机\n\n虚拟主机，就是将一个或多个主机名（域名）和Tomcat所在的服务器进行绑定。由于一个IP可以和多个域名进行帮定，我们大可以将不同的域名指向服务器（指硬件）上的不同文件夹，造成一个服务器（或者一个IP）多个主机的“虚拟主机”效果。\n\n```xml\n#你的主机名（域名）1\n<Host name=\"localhost\"  appBase=\"webapps\"\n           unpackWARs=\"true\" autoDeploy=\"true\"\n           xmlValidation=\"false\" xmlNamespaceAware=\"false\"> \n</Host> \n#你的域名2\n<Host name=\"www.agnostus.com\" appBase=\"主机空间地址\" \n       unpackWARs=\"true\" autoDeploy=\"true\" \n       xmlValidation=\"false\" xmlNamespaceAware=\"false\">  \n       #域名3可以和域名2共用一个主机空间\n        <Alias>coderecord.org</Alias>\n        <Context path=\"\" docBase=\"站点地址\" debug=\"1\" reloadable=\"true\" allowLinking=\"true\" />\n</Host>\n```\n\n### Tomcat多实例\n\n1. 复制多份tomcat文件\n\n   ```bash\n   cp /usr/local/tomcat /usr/local/tomcat1\n   cp /usr/local/tomcat /usr/local/tomcat2\n   ```\n\n2. 修改剩余两个tomcat实例中的server.xml配置文件，修改shutdown端口与监听端口。\n\n   ```xml\n   vim /usr/local/tomcat1/conf/server.xml\n   \n   <Server port=”8006″ shutdown=”SHUTDOWN”>\n   <Connector port=”8081″ protocol=”HTTP/1.1″\n   \n   vim /usr/local/tomcat1/conf/server.xml\n   \n   <Server port=”8007″ shutdown=”SHUTDOWN”>\n   <Connector port=”8082″ protocol=”HTTP/1.1″\n   ```\n\n3. 可以利用nginx做代理及负载均衡\n\n   ```shell\n   vim /etc/nginx/nginx.conf\n   \n   upstream tomcat {\n   server 127.0.0.1:8080 weight=1 max_fails=2 fail_timeout=2;\n   server 127.0.0.1:8081 weight=1 max_fails=2 fail_timeout=2;\n   server 127.0.0.1:8082 weight=1 max_fails=2 fail_timeout=2;\n   }\n   \n   server {\n   ...\n   location / {\n   proxy_pass http://tomcat;\n   }\n   ...\n   }\n   ```","categoryId":2,"viewCount":1027,"categoryName":"中间件","author":"球接子","authorAvatar":null,"tagIds":[5,14],"tagNames":["Tomcat","中间件"]}}