●自从JSP发布之后,推出了各式各样的JSP引擎,Apache Group在完成GNUJSP1.0的开发以后,开始考虑在SUN的JSWDK基础上开发一个可以直接提供Web服务的JSP服务器,当然同时也支持Servlet,这样Tomcat就诞生了。
●Tomcat服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选
●当配置正确时, Apache为HTML页面服务,而Tomcat实际上运行JSP页面和Servlet.另外, Tomcat和IIS等Web服务器一样,具有处理HTML页面的功能,另外它还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat的默认模式。不过, Tomcat处理静态HTML的能力不如Apache服务器。
●通常意义上的Web服务器接受请求后,只是单纯地响应静态资源,如HTML文件,
图片文件等,不能在后端进行一定的处理操作。Tomcat是Apache下的一个子项目,它具备Web服务器的所有功能,不仅可以监听接受请求并响应静态资源,而且可以在后端运行特定规范的Java代码Servlet,同时将执行的结果以HTML代码的形式写回客户端。
●Tomcat由一系列的组件构成,其中核心的组件有三个:
1 | 请求被发送到本机端口8080,被在那里侦听的Coyote HTTP/11.1Connector获得。 |
---|---|
2 | Connector把该请求交给它所在的Service的Engine来处理,并等待来自Engine的回应。 |
3 | Engine获得请求localhost/yy/index.JSP匹配它所拥有的所有虚拟主机Host. |
4 | Engine匹配到名为localhost的Host,即使匹配不到也把请求交给该Host处理,因为该Host被定义为该Engine的默认主机。 |
5 | localhost Host获得请求/yy/index.JSP,匹配它所拥有的所有Context。 |
6 | Host匹配到路径为/yy的Context,如果匹配不到,就把该请求交给路径名为Context去处理。 |
7 | path=" /yy"的Context获得请求/index.JSP,在它的mapping table中寻找对应的Servlet。 |
8 | Context匹配到URL PATTERN为*.JSP的Servlet,对应于JSPServlet类。 |
9 | 构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用JSPServlet的doGet()或doPost()方法。 |
10 | Context把执行完了之后的HttpServletResponse对象返回给Host, |
11 | Host把HttpServletResponse对象返回给Engine。 |
12 | Engine把HttpServletResponse对象返回给Connector。 |
13 | Connector把HttpServletResponse对象返回给客户browser。 |
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 日志 |
temp | 存放 Tomcat 运行时产生的文件 |
webapps | 存放项目资源的目录 |
work | Tomcat 工作目录,一般清除 Tomcat 缓存的时候会使用到 |
(1)下安装JDK
在部署Tomcat之前必须安装好jdk,因为jdk是Tomcat运行的必要环境.而jdk的安
装也相对比较简单,版本有很多,这里我们选择rpm版本即可!
打开oracle官网http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html, 该网页中会有172的大版本,根据所使用的计算机硬件配置,选择其中一个安装包,本案例,选择基于 linux64 位 rpm 版本,必须选中Accept License Agreement
再进行下载Linux x64 168.05 MB jdk-8u201-linux-x64.rpm
将jdk软件包上传到/root目录下安装jdk
[root@localhost opt]# rpm -ivh jdk-8u201-linux-x64.rpm
警告: jdk-8u201-linux-x64.rpm:头V3 RSA/SHA256 Signature, 密钥ID ec551f03: NOKEY
准备中... ##############[100%]
正在升级/安装..
1:jdk1.8-2000:1.8.0_201-fcs ############[100%]
Unpacking JAR files...
tools.jar....
lugin.jar....
javaws.jar....
deploy.jar....
rt.jar....
jissejar.charsets.jar....
localedata.jar....
##确认jdk安装目录·
[root@localhost opt]# cd /usr/java/jdk1.8.0_201-amd64/
[root@localhost jdk1.8.0 201-amd64]# ll
总用量25980
drwxr-xr-x 2 root root 4096 3月 7 22:09 bin
-rw-r--r-- 1 root root 3244 12月 16 03:45 COPYRIGHT
drwxr-xr-x 3 root root 132 3月 7 22:09 include
-rw-r--r-- 1 root root 5207434 12月 12 17:07 javafx-src.zip
drwxr-xr-x 5 root root 185 3月 7 22:09 jre
drwxr-xr-x 5 root root 245 3月 7 22:09 lib
-rw-r--r-- 1 root root 40 12月 16 03:45 LICENSE
drwxr-xr-x 4 root root 47 3月 7 22:09 man
-rw-r--r-- 1 root root 159 12月 16 03:45 README.html
-rw-r--r-- 1 root root 424 12月 16 03:45 release
-rw-r--r-- 1 root root 21103945 12月 16 03:45 src.zip
-rw-r--r-- 1 root root 108109 12月 12 17:07 THIRDPARTYLICENSEREADME-JAVAFX.txt
-rw-r--r-- 1 root root 155002 12月 16 03:45 THIRDPARTYLICENSEREADME.txt
##设置JDK环境变量###
[root@localhost ~]# vi /etc/profile ##下面参数新增#
export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64
export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH=$JAVA_HOME/bin:$PATH
[root@localhost ~]# source /etc/profile ##环境变量生效##
[root@localhost ~]#java -version ###查看java版本##
java version "1.8.0_201"
Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)
(2)安装启动Tomcat
执行下面的命令, 从 Tomcat 官网下载 apache-tomcat-9.0.16.tar.gz 稳定版本将安装包apache-tomcat-9.0.16.tar.gz上传到/root目录下
##将安装包移动 Tomcat 目录到/usr/local 下#
[root@localhost ~]# cd /opt
[root@localhost ~]# tar xzvf apache-tomcat-9.0.16.tar.gz
[root@localhost ~]# mv apache-tomcat-9.0.16 /usr/local/tomcat
###优化tomcat###########
ln -s /usr/local/tomcat/bin/startup.sh /usr/bin/
ln -s /usr/local/tomcat/bin/shutdown.sh /usr/bin/
##优化后的启动tomcat的方式 ##
[root@localhost ~]# startup.sh ###开启
[root@localhost ~]# shutdown.sh ###关闭
[root@localhost ~]# setenforce ?
setenforce: SELinux is disabled
[root@localhost ~]# netstat -ntap | grep 8080
tcp6 0 0 :::8080 :::* LISTEN 15458/java
##浏览器中输入http://20.0.0.140:8080 ##访问时会出现Tomcat的默认主页
##优化tomcat启动速度##
第一次启动查看日志会发现 Tomcat 启动很慢,默认情况下都需要几十秒,可以修改jdk参数进行改。
[root@localhost ~]# vi /usr/java/jdk1.8.0 201-amd64jre/lib/security/java.security
securerandom.source=file:/dev/urandom
##关闭tomcat##
[root@localhost ~]# shutdown.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/java/jdk1.8.0_201-amd64
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
##启动tomcat##
[root@localhost ~1# startup.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/java/jdk1.8.0_201-amd64
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
可能有时候公司会有多个项目需要运行,那么肯定不可能是一台服务器上运行多个
Tomcat服务,这样会消耗太多的系统资源。此时,就需要使用到Tomcat虚拟主机。
现在新增两个域名 www.zzt.com 和 www.accp.com ,希望通过这两个域名访问到不同的项目内容。
(1)第一步,创建zzt 和 accp 项目目录和文件
#因为识别的是java的文件形式,所以尽量定义jsp的文件,jsp文件可以写一些jsp语言
[root@localhost ~]# mkdir /usr/local/tomcat/webapps/zzt
[root@localhost ~]# echo "This is zzt page\!" > /usr/local/tomcat/webapps/zzt/index.jsp
[root@localhost ~]# mkdir /usr/local/tomcat/webapps/accp
[root@localhost ~]# echo "This is accp page\!" > /usr/local/tomcat/webapps/accp/index.jsp
(2)修改配置文件
[root@localhost ~]# vi /usr/local/tomcat/conf/server.xml
<Host name="www.zzt.com" appBase="/usr/local/tomcat/webapps"
unpackWARs="true" autoDeploy="true" xmlValidation="false"
xmlNamespaceAware="false">
<Context docBase="/usr/local/tomcat/webapps/zzt"
path="" reloadable="true" />
</Host>
<Host name="www.accp.com" appBase="/usr/local/tomcat/webapps"
unpackWARs="true" autoDeploy="true" xmlValidation="false"
xmlNamespaceAware="false">
<Context docBase="/usr/local/tomcat/webapps/accp"
path="" reloadable="true" />
</Host>
[root@localhost ~]# shutdown.sh
[root@localhost ~]# startup.sh
#这两步相当于重启
#####修改的位置:原来的删除,在原位置修改
命令 : | 解释: |
---|---|
Host name | 域名 |
appBase | 工作目录存放位置 |
unpackWARs | 我是否即时更新War包 |
autoDeploy | 是否用auto支持自动部署(当你把资源写入webapps,是否即时生效) |
xmlValidation | 是否支持xml的文件当中的验证 |
xmlNamespaceAware | 是否对xml当中的命令空间进行启用 |
false | 关闭 为什么要关闭验证:因为验证格式浪费时间,一般配置文件写对就对,不对也不提示,所以浪费 |
Context docBase | 你的站点存在目录 |
path="" | 设置为空:去加载它的默认类,而不是指定,因为java中有很多class文件, |
reloadable | 进行重新加载内容页面的功能,比如你在主页改东西,改完立即生效 |
(3)验证
##更改hosts文件## C:\Windows\System32\drivers\etc 改hosts文件
20.0.0.140 www.zzt.com www.accp.com
##测试网页#
1、使用浏览器访问 http://www.zzt.com:8080
1、使用浏览器访问 http://www.accp.com:8080