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服务器。
java 基础
java 组成
Java包含下面部分:
-
语言、语法规范。关键字,如: if、for、class等
-
源代码source code
-
依赖库,标准库(基础).I第三方库(针对某些应用)。底层代码太难使用且开发效率低,封装成现成的库
-
JVM虚拟机。将源代码编译为中间码即字节码后,再运行在JVM之上
jdk
jdk包含三部分
java工具包 jre (第三方库) jvm (java虚拟机)
Oracle jdk
从2019年1月份开始,Oracle JDK 开始对 Java SE 8 之后的版本开始进行商用收费,确切的说是8u201/202 之后的版本。如果你用 Java 开发的功能如果是用作商业用途的,如果还不想花钱购买的话,能免费使用的最新版本是 8u201/202。当然如果是个人客户端或者个人开发者可以免费试用 Oracle JDK 所有的版本。
OpenJDK
OpenJDK是Sun公司采用GPL v2协议发布的JDK开源版本,于2009年正式发布。
官方网站:OpenJDK: JDK 6
OpenJDK 7是基于JDK7的beta版开发,但为了也将Java SE 6开源,从OpenJDK7的b20构建反向分支开发,从中剥离了不符合Java SE 6规范的代码,发布OpenJDK 6。所以OpenJDK6和JDK6没什么关系,只是API兼容而已
OpenJDK使用GPL v2可以用于商业用途。目前由红帽维护。OpenJDK也有在其基础上的众多发行版,比如阿里的Dragonwell。
相对来说,Oracle jDK具有更好的响应能力和JVM性能,更加稳定。
openjdk 安装
在CentOS中,可以使用 yum 仓库安装 openjdk
oracle jdk 安装
官方下载链接:
#注意需要注册登录后,才能下载JDK
https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html
rpm 安装
需要先去下载rpm包
再 yum install jdk-8u291-linux-x64.rpm -y
vim /etc/profile.d/jdk.sh
. /etc/profile.d/jdk.sh
java -version
二进制安装jdk (推荐)
首先准备安装包
vim /etc/profile.d/jdk.sh
. /etc/profile.d/jdk.sh
java -version
tomcat
Tomcat服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,Tomcat具有处理HTML页面的功能,它还是一个Servlet和JSP容器 起始于SUN公司的一个Servlet的参考实现项目Java Web Senver,开发者是James Duncan Davidson,在19年,将项目贡献给了apache软件基金会(ASF),和ASF现有的项目JServ合并,并开源成为顶级项目 Tomcat仅仅实现了Java EE规范中与Servlet、JSP相关的类库,是JavaEE不完整实现。 著名图书出版商O'Relly约稿该项目成员Davidson希望使用一个公猫作为封面,但是公猫已经被使用,书出版后封面是一只雪豹。
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和
并发访问用户不是很多的场合下被普遍使用,Tomcat 具有处理HTML页面的功能,它还是一个Servlet和JSP容器
起始于SUN 公司的一个Servlet的参考实现项目 Java Web Server,开发者是 James Duncan Davidson,在1999年,将项目贡献给了apache软件基金会(ASF),和ASF现有的项目 JServ 合并,并开源成为顶级项目
Tomcat 仅仅实现了Java EE规范中与Servlet、JSP相关的类库,是JavaEE不完整实现。
著名图书出版商O'Reilly约稿该项目成员Davidson希望使用一个公猫作为封面,但是公猫已经被使用,书出版后封面是一只雪豹。
tomcat 安装
yum安装
yum install tomcat -y 即可
二进制安装
需要先安装jdk ,前面已经安装了,便不在演示
解压到指定目录 ,做软连接
安装完成
将tomcat加入自启动
添加用户
useradd -s /sbin/nologin tomcat
修改权限
chown tomcat:tomcat /usr/local/tomcat -R
vim /usr/lib/systemd/system/tomcat.service
访问192.168.94.7:8080
tomcat 配置文件及核心组件
配置文件
目录名字 | 功能 |
---|---|
bin | 存放启动和关闭 Tomcat 的脚本文件,比较常用的是 catalina.sh、startup.sh、shutdown.sh 三个文件 |
conf | 存放 Tomcat 服务器的各种配置文件,比较常用的是 server.xml、context.xml、tomcat-users.xml、web.xml 四个文件。 |
lib | 存放 Tomcat 服务器的 jar 包,一般不作任何改动,除非连接第三方服务,比如 redis,那就需要添加相对应的 jar 包 |
logs | 存放 Tomcat 日志 catalina.out 错误日志 |
temp | 存放 Tomcat 运行时产生的文件 |
webapps | 存放项目资源的目录 |
work | Tomcat 工作目录,一般清除 Tomcat 缓存的时候会使用到(升级版本时注意要删除里面的缓存) |
conf子目录
文件名 | 说明 |
---|---|
server.xml | 主配置文件 全局生效 |
web.xml | 每个webapp只有“部署"后才能被访问,它的部署方式通常由web.xml进行定义, 其存放位置为WEB-INF/目录中;此文件为所有的webapps提供默认部署相关的配置, 每个web应用也可以使用专用配置文件,来覆盖全局文件 |
context.xml | 用于定义所有web应用均需加载的Context配置,此文件为所有的webapps提供默认配置, 每个web应用也可以使用自已专用的配置,它通常由专用的配置文件context.xml来定义, 其存放位置为WEB-INF/目录中,覆盖全局的文件 |
tomcat-users.xml | 用户认证的账号和密码文件 |
catalina.policy | 当使用security选项启动omcat时,用于为tomcat设置安全策略 |
catalina.properties | Tomcat环境变量的配置,用于设定类加载器路径,以及一些与JVM调优相关参数 |
logging.properties | Tomcat日志系统相关的配置,可以修改日志级别和日志路径等 |
注意配置文件对于大小写敏感 |
组件
组件分层和分类
顶级组件
Server,代表整个Tomcat容器,一台主机可以启动多tomcat 实例 ,需要确保端口不要产生冲突
服务类组件
Service,实现组织Engine和Connector,建立两者之间关联关系, service 里面只能包含一个Engine
连接器组件
Connector,有HTTP(默认端口8080/tcp)、HTTPS(默认端口8443/tcp)、AJP(默认端口8009/tcp)协议的连接器,AJP(Apache Jserv protocol)是一种基于TCP的二进制通讯协议。
容器类
Engine、Host(虚拟主机)、Context(上下文件,解决路径映射)都是容器类组件,可以嵌入其它组件,内部配置如何运行应用程序。
内嵌类
可以内嵌到其他组件内,valve、logger、realm、loader、manager等。以logger举例,在不同容器组件内分别定义。
集群类组件
listener、cluster
首先开启 tomcat进程, 会有 server 产生 ,
然后产生 一个 service管理组件 管理 所有其他组件的
用户发送请求httpd 请求过来
connector 连接器(默认监听)接收到此请求, 会转交给 engine (引擎)
engine (引擎) 会处理请求, 遍历 host (虚拟主机) 会交给 客户访问的host, 如果找不到交给默认的 host 会根据 上下文 context (上下文) 映射关系 去找相对应的文件
找到文件后, 交给 JSP 生成代码, 再交给 servlet 生成 html
原路返回 反馈给用户
名称 | 说明 |
---|---|
server | 服务器,Tomcat运行的进程实例,一个Server中可以有多个service,但通常就一个 |
service | 服务,用来组织Engine(引擎)和Connector(连接器,端口)的对应关系,一个service中只有一个Engine |
connector | 连接器,负责客户端的HTTP、HTTPS、AJP等协议连接。一个Connector只属于某一个Engine |
Engine | 即引擎,用来响应并处理用户请求。一个Engine上可以绑定多个Connector |
Host | 即虚拟主机,可以实现多虚拟主机,例如使用不同的主机头区分 |
Context | 应用的上下文,配置特定url路径映射和目录的映射关系: url => directory |
引擎:
一般而言,引擎是一个程序或一套系统的支持部分。常见的程序引擎有游戏引擎、搜索引擎、杀毒引擎等
例子
<?xml version="1.0" encoding="UTF-8"?>
<Server port="8005" shutdown="SHUTDOWN"><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"><Host name="localhost" appBase="webapps"unpackWARs="true" autoDeploy="true"><Context ><Context /></Host></Engine></Service>
</Server>
tomcat 处理请求过程
-
假设来自客户的请求为: http://localhost:8080/test/index.jsp 浏览器端的请求被发送到服务端端口8080,Tomcat进程监听在此端口上。通过侦听的HTTP/1.1Connector获得此请求。
-
Connector把该请求交给它所在的Service的Engine来处理,并等待Engine的响应
-
Engine获得请求192.168.91.100:8080/test/index.jsp,遍历它所有虚拟主机Host
-
Engine匹配到名为localhost的Host。如果匹配不到,就把请求交给该Engine中的defaultHost处理. localhost Host获得请求/test/index.jsp,匹配它所拥有的所有Context
-
Host匹配到路径为/test的Context
-
path=/test的Context获得请求index.jsp,在它的mapping table中寻找对应的servlet
-
Context匹配到URLPATTERN为*.jsp的Sservlet,对应于]spServlet类构造HtpServletRequest对象和HttpServletResponse对象,作为参数调用)spSer let的doGet或doPost方法。
-
Context把执行完了之后的HttpServletResponse对象返回给Host
-
Host把HttpServletResponse对象返回给Engine
-
Engine把HttpServletResponse对象返回给Connector
-
Connector把HttpServletResponse对象返回给浏览器端
主页文件的优先级
index.html index.htm index.jsp
也可以去配置文件下修改