tomcat简介:
(1)Tomcat 服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器,由java语言进行开发,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应HTML(标准通用标记语言下的一个应用)页面的访问请求。实际上Tomcat是Apache 服务器的扩展,但运行时它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。 (2)tomcat是java 2 ee不完整的实现
tomcat与apache之间的关联。
(1)apache为html提供页面服务,而tomcat实际上运行jsp页面和servlet, (2)Tomcat和IIS等Web服务器一样,具有处理HTML页面的功能,另外它还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat的默认模式。不过,Tomcat处理静态HTML的能力不如Apache服务器tomcat的核心组件。
catalina:servlet container coyote:http connection jasper:jsp enginee tomcat instance: 运行中的tomcat进程(java进程) server: 即一个tomcat实列; service: 用于将connector关联至engine组件,一个service只能包含一个engine组件 engine: tomcat的核心组件,用于运行jsp或servlet代码; connector: 接受并解析用户请求,将请求映射为engine中运行的代码;之后,将运行结果构建成响应报文 http,ajp host: 类似httpd中的虚拟主机。 context: 类似于httpd中的alias; 注意:每个组件都是由"类"来实现,有些组件的实现还不止一种。 顶级类组件:server 服务类组件:service 容器类组件:即可以部署webapp的组件,enginee,host,context 连接器组件:connector 被嵌套类组件:value,logger,realmtomcat的运行模式
standalone:通过内置的web server (http connector)来接受客户端的请求; proxy:由专门的web server服务客户端的httpd请求; in-process:部署于同一主机; network:部署于不同主机。部署tomcat,官方站点:http://tomcat.apache.org 两种部署方式:
第一种:我们可以去官方下载tomcat的二次源码包,不用进行编译直接使用。 第二种:就是我们使用yum安装。部署演示:根据第一种方案;
部署前提:安装jdk,因为我们的web程序在java虚拟机(JDK)上运行,而jdk上运行的是java类代码,所以中间需要一些代码转换, [root@localhost yum.repos.d]# yum install java -y Loaded plugins: fastestmirror, refresh-packagekit, security Loading mirror speeds from cached hostfile * base: mirrors.aliyun.com * extras: mirrors.aliyun.com * updates: mirrors.aliyun.com a | 4.0 kB 00:00 ... Setting up Install Process Resolving Dependencies --> Running transaction check ---> Package java-1.5.0-gcj.x86_64 0:1.5.0.0-29.1.el6 will be installed --> Processing Dependency: jpackage-utils >= 1.7.3 for package: java-1.5.0-gcj-1.5.0.0-29.1.el6.x86_64 --> Processing Dependency: sinjdoc for package: java-1.5.0-gcj-1.5.0.0-29.1.el6.x86_64 --> Running transaction check ---> Package jpackage-utils.noarch 0:1.7.5-3.16.el6 will be installed ---> Package sinjdoc.x86_64 0:0.5-9.1.el6 will be installed --> Processing Dependency: java_cup >= 0.10 for package: sinjdoc-0.5-9.1.el6.x86_64 --> Running transaction check ---> Package java_cup.x86_64 1:0.10k-5.el6 will be installed --> Finished Dependency Resolution [root@localhost yum.repos.d]# java -version 检查java的目前版本。 java version "1.5.0" gij (GNU libgcj) version 4.4.7 20120313 (Red Hat 4.4.7-23) Copyright (C) 2007 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PUR [root@localhost ~]# yum list all | grep jdk 检查相关jdk相关版本号 copy-jdk-configs.noarch 3.3-9.el6 base java-1.6.0-openjdk.x86_64 1:1.6.0.41-1.13.13.1.el6_8 base java-1.6.0-openjdk-demo.x86_64 1:1.6.0.41-1.13.13.1.el6_8 base java-1.6.0-openjdk-devel.x86_64 1:1.6.0.41-1.13.13.1.el6_8 base java-1.6.0-openjdk-javadoc.x86_64 1:1.6.0.41-1.13.13.1.el6_8 base java-1.6.0-openjdk-src.x86_64 1:1.6.0.41-1.13.13.1.el6_8 base java-1.7.0-openjdk.x86_64 1:1.7.0.261-2.6.22.1.el6_10 updates java-1.7.0-openjdk-demo.x86_64 1:1.7.0.261-2.6.22.1.el6_10 updates java-1.7.0-openjdk-devel.x86_64 1:1.7.0.261-2.6.22.1.el6_10 updates java-1.7.0-openjdk-javadoc.noarch 1:1.7.0.261-2.6.22.1.el6_10 updates java-1.7.0-openjdk-src.x86_64 1:1.7.0.261-2.6.22.1.el6_10 updates java-1.8.0-openjdk.x86_64 1:1.8.0.252.b09-2.el6_10 updates java-1.8.0-openjdk-debug.x86_64 1:1.8.0.252.b09-2.el6_10 updates java-1.8.0-openjdk-demo.x86_64 1:1.8.0.252.b09-2.el6_10 updates java-1.8.0-openjdk-demo-debug.x86_64 1:1.8.0.252.b09-2.el6_10 updates java-1.8.0-openjdk-devel.x86_64 1:1.8.0.252.b09-2.el6_10 updates java-1.8.0-openjdk-devel-debug.x86_64 1:1.8.0.252.b09-2.el6_10 updates java-1.8.0-openjdk-headless.x86_64 1:1.8.0.252.b09-2.el6_10 updates java-1.8.0-openjdk-headless-debug.x86_64 1:1.8.0.252.b09-2.el6_10 updates java-1.8.0-openjdk-javadoc.noarch 1:1.8.0.252.b09-2.el6_10 updates java-1.8.0-openjdk-javadoc-debug.noarch 1:1.8.0.252.b09-2.el6_10 updates java-1.8.0-openjdk-src.x86_64 1:1.8.0.252.b09-2.el6_10 updates java-1.8.0-openjdk-src-debug.x86_64 1:1.8.0.252.b09-2.el6_10 updates ldapjdk.x86_64 4.18-8.el6 base ldapjdk-javadoc.x86_64 4.18-8.el6 base [root@localhost ~]# yum install java-1.8.0-openjdk.x86_64 安装最新版jdk Loaded plugins: fastestmirror, refresh-packagekit, security Loading mirror speeds from cached hostfile * base: mirrors.aliyun.com * extras: mirrors.aliyun.com * updates: mirrors.aliyun.com Setting up Install Process Resolving Dependencies --> Running transaction check ---> Package java-1.8.0-openjdk.x86_64 1:1.8.0.252.b09-2.el6_10 will be installed --> Processing Dependency: java-1.8.0-openjdk-headless = 1:1.8.0.252.b09-2.el6_10 for package: 1:java-1.8.0-openjdk-1.8.0.252.b09-2.el6_10.x86_64 --> Processing Dependency: xorg-x11-fonts-Type1 for package: 1:java-1.8.0-openjdk-1.8.0.252.b09-2.el6_10.x86_64 --> Processing Dependency: libjvm.so(SUNWprivate_1.1)(64bit) for package: 1:java-1.8.0-openjdk-1.8.0.252.b09-2.el6_10.x86_64 --> Processing Dependency: libjli.so(SUNWprivate_1.1)(64bit) for package: 1:java-1.8.0-openjdk-1.8.0.252.b09-2.el6_10.x86_64 --> Processing Dependency: libjava.so(SUNWprivate_1.1)(64bit) for package: 1:java-1.8.0-openjdk-1.8.0.252.b09-2.el6_10.x86_64 (2)下载tomcat的二元分布, apache-tomcat-9.0.36.tar.gz [root@localhost ~]# tar -xf apache-tomcat-9.0.36.tar.gz -C /usr/local 解压tomcat到指定目录下。 [root@localhost ~]# cd /usr/local/ [root@localhost local]# ls apache-tomcat-9.0.36 bin etc games include lib lib64 libexec mysql mysql-5.5.62 sbin share src [root@localhost local]# ln -sv apache-tomcat-9.0.36/ tomcat `tomcat' -> `apache-tomcat-9.0.36/' [root@localhost local]# ls apache-tomcat-9.0.36 bin etc games include lib lib64 libexec mysql mysql-5.5.62 sbin share src tomcat [root@localhost local]# cd tomcat/ [root@localhost tomcat]# ls bin BUILDING.txt conf CONTRIBUTING.md lib LICENSE logs NOTICE README.md RELEASE-NOTES RUNNING.txt temp web bin:脚本及启动时用到的类 lib:类库 conf:配置文件 logs:日志文件 webapps:应用程序默认部署目录 work:工作目录 temp:临时文件目录 [root@localhost tomcat]# ls bin BUILDING.txt conf CONTRIBUTING.md lib LICENSE logs NOTICE README.md RELEASE-NOTES RUNNING.txt temp webapps work [root@localhost tomcat]# cd conf/ [root@localhost conf]# ls Catalina catalina.properties jaspic-providers.xml logging.properties tomcat-users.xml web.xml catalina.policy context.xml jaspic-providers.xsd server.xml tomcat-users.xsd server.xml:主配置文件 context.xml:每个webapp都可以有专用的配置文件,这些配置文件通常位于webapp应用程序目录下的web-inf目录中,用于定义会话管理器 ,jdbc等; conf/context.xml是为各webapp提供默认配置。 web.xml:每个webapp部署之后才能被访问,此文件则用于为所有的webapp提供默认部署相关的配置; tomcat-user.xml:用户认证的账号和密码配置文件。 catalina.policy:当使用-security选项启动tomcat实列时会读取此配置文件来实现其安全运行策略; catalina.properties:java属性的定义文件,用于设定类加载器路径等,以及一些jvm性能相关的调优参数; logging.properties:日志相关的配置信息; [root@localhost tomcat]# vim /etc/profile.d/tomcat.sh export CATALINA_HOME=/usr/local/tomcat 导入tomcat目录,将相关路径加入到PATH中。 export PATH=$CATALINA_HOME/bin:$PATH (3)运行catalina.sh脚本即可运行tomcat [root@localhost tomcat]# bin/catalina.sh --help 查看运行相关帮助。 Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /usr Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar Usage: catalina.sh ( commands ... ) commands: 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? Note: Waiting for the process to end and use of the -force option require that $CATALINA_PID is defined [root@localhost tomcat]# bin/catalina.sh start 启动tomcat Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /usr Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar Tomcat started. 注意:一般我们都是用普通用户运行tomcat,除非是1023端口之前必须要有root权限执行,所以tomcat运行端口为8080 [root@localhost conf]# ss -tnl | grep 8080 LISTEN 0 100 :::8080 :::* [root@localhost conf]#对tomcat进行访问,只是个tomcat中的应用程序。 tomcat启动成功后,我们手动来添加一个测试的应用程序。
webapps:这是应用程序的默认部署目录; 我们先来了解一下java webapp的组织架构; 有特定的组织形式,层次型的目录结构,主要包含了servlet代码文件,jsp页面文件,类文件,部署描述符文件等; /usr/local/tomcat/webapps/app1 /:webapp的根目录; web-INF/:当前webapp的私有资源目录,通常存放在当前webapp自用的web.xml META-INF/:当前webapp的私有资源目录,通常存放在当前webapp自用的context.html; classes/:此webapp的私有类; lib/:此webapp的私有类,被打包为jar格式类; index.jsp:webapp的主页 webapp归档格式: - war:webapp; . jar:EJB的类 .rar:资源适配器; .ear:企业及应用程序 添加一个测试的应用程序; [root@localhost webapps]# pwd /usr/local/tomcat/webapps [root@localhost webapps]# mkdir myapp/{lib,classes,WEB-INF,META-INF} -pv mkdir: created directory `myapp' mkdir: created directory `myapp/lib' mkdir: created directory `myapp/classes' mkdir: created directory `myapp/WEB-INF' 在这两个文件中我们没有创建context.xml和web.xml文件,因为我们可以不创建到时候直接去默认/usr/local/apache-tomcat-9.0.36/conf目录下帮我们拉去那两个文件。 mkdir: created directory `myapp/META-INF' [root@localhost webapps]# tree myapp/ myapp/ ├── classes ├── lib ├── META-INF └── WEB-INF [root@localhost tomcat]# tree work/ work/ └── Catalina 这表示引擎,包装容器。 └── localhost 本地主机 ├── docs ├── examples ├── host-manager ├── manager ├── myapp 这表示程序的主目录 │ └── org │ └── apache 这三项表示将域名进行倒写 │ └── jsp │ ├── index_jsp.class servlet代码编译成能在jdk虚拟机上运行类文件。 │ └── index_jsp.java 将jsp格式的文件转换成纯java格式代码(servlet代码) └── ROOT └── org └── apache └── jsp ├── index_jsp.class └── index_jsp.java [root@localhost webapps]# vim myapp/index.jsp <%@ page language="java" %> <%@ page import="java.util.*" %> <html> <head> <title>JSP Test Page</title> 通过我们编写的jsp文件可知,html代码中嵌套jsp代码。 </head> <body> <% out.println("hello,word."); %> </body> </html>添加成功后,我们可以验证,发现回应速度很快。
注意:我们访问的10.5.100.119:8080给我们呈现的主页面默认映射的为/usr/local/tomcat/webapps/ROOT目录下文件。 tomcat基本部署已经完成; 基本总结一下: tomcat是一个应用程序服务器,开发人员使用java代码开发出应用程序。 当客户端进行访问应用程序时;经历几个步骤;我们tomcat有两种运行方式,一种是客户端直接与tomcat服务器交互,另一种通过web服务器进行代理。 第一种方式:web代理(nginx) 客户端发起请求----->web代理服务器---->connector连接器接受用户请求---->通过service关联至engine-----jspare将jsp类代码转换成Java类代码-----经过编译成为class类代码----->运行到tomcat里面。