文章目录
Tomcat介绍
Apache Tomcat是由Apache Software Foundation(ASF)开发的一个开源Java WEB应用服务器。属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。 类似功能的还有:Jetty、Resin、Websphere、weblogic、JBoss、Glassfish、GonAS等。
-
Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta项目- 中的一个核心项目
-
由Apache、Sun和其他一些公司及个人共同开发而成。
-
java语言写的网站用tomcat+jdk来运行
-
jdk(java development kit)是整个java的核心,
它包含了java运行环境和一堆java相关的工具以及java基础库。 -
最主流的jdk为sun公司发布的jdk,除此之外,
-
其实IBM公司也有发布JDK,CentOS上也可以用yum安装openjdk
Tomcat与Java
Tomcat与Java SE
Tomcat是用Java语言编写的,需要运行在Java虚拟机上,所以一般需要先安装JDK,以提供运行环境。
Tomcat与Java EE
Tomcat实现了几个Java EE规范,包括Java Servlet、Java Server Pages(JSP),Java Expression Language和Java WebSocket等,这些是都下载Tomcat安装包默认提供的,可以在源码中看到相关Java EE 规范API源码引用
Tomcat与Servlet/编程开发
Tomcat实现的几个Java EE规范最重的是Servlet,因为实现了Servlet规范,所以Tomcat也是一个Servlet容器,可以运行我们自己编写的Servlet应用程序处理动态请求。
平时用的Struts2、SpringMVC框架就是基于Servlet,所以我们可以在这些框架的基础上进行快速开发,然后部署到Tomcat中运行。 另外对于JSP规范实现:可以混合HTML与Java开发在一个文件中(.jsp),这种文件在第一次调用之后会被Tomcat的Jasper组件编译成一个servlet类,在后续的操作中则可以直接使用此类。这种开发方式不灵活,一般少用。
Tomcat与WEB/HTTP请求
tomcat的(HTTP类型)Connector组件实现了HTTP请求的解析,Tomcat通过Connector组件接收HTTP请求并解析,然后把解析后的信息交给Servlet处理:
对于静态资源(html/js/jpg等)请求,Tomcat提供默认的Servlet来处理并响应; 对于动态请求,可以映射到自己编写的Servlet应用程序来处理。
Tomcat与Nginx/Apache的应用架构
Nginx、Apache都是目前主流的Web服务器,也可以作为反向代理服务器;它们在处理大量并发的请求连接、连接会话管理和静态内容请求等方面相比Tomcat更具优势。所以一般在实际应用中,先是通过Nginx(或Apache)反向代理服务器接收请求,匹配分离动态/静态请求(动静分离);如果是静态请求,则转发到另外的Nginx WEB服务器上,返回静态内容;如果是动态请求,则转发到后面的Tomcatt应用服务器,处理动态请求的业务逻辑。
安装jdk
下载JDK
通过浏览器 http://r.aminglinux.com 下载,将JDK的包上传到LINUX机器上。上传完后,把它放到/usr/local/src目录下
解压
# cd /usr/local/src/
# ls -dlh jdk-8u171-linux-x64.tar.gz
-rw-r--r--. 1 root root 183M Jul 16 22:47 jdk-8u171-linux-x64.tar.gz
// 这个是下载好的JDK二进制包,不需要编译安装,解压就可以使用了
// 解压
# tar zxf jdk-8u171-linux-x64.tar.gz
# ls -dlh jdk1.8.0_171/
drwxr-xr-x. 8 10 143 255 Mar 29 08:18 jdk1.8.0_171/
// 将解压出来的目录,放到/usr/local/ 目录下重命名为jdk8
# mv jdk1.8.0_171/ /usr/local/jdk8
# ls -dlh /usr/local/jdk8/
drwxr-xr-x. 8 10 143 255 Mar 29 08:18 /usr/local/jdk8/
配置JDK环境变量
// 编辑 /etc/profile 文件,在内容最后加上以下内容
JAVA_HOME=/usr/local/jdk8/
JAVA_BIN=/usr/local/jdk8/bin
JRE_HOME=/usr/local/jdk8/jre
PATH=$PATH:/usr/local/jdk8/bin:/usr/local/jdk8/jre/bin
CLASSPATH=/usr/local/jdk8/jre/lib:/usr/local/jdk8/lib:/usr/local/jdk8/jre/lib/charsets.jar
测试
// 先使/etc/profile文件生效
# source /etc/profile
// 使用java -version命令查看JDK版本,验证JDK是否安装成功
# java -version
java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)
安装Tomcat
下载Tomcat
# cd /usr/local/src
# wget https://mirrors.cnnic.cn/apache/tomcat/tomcat-9/v9.0.10/bin/apache-tomcat-9.0.10.tar.gz
解压安装
// 下载的是二进制包,解压后放到 /usr/local 目录下重命名为tomcat就可以了
# tar zxvf apache-tomcat-9.0.10.tar.gz
# mv ./apache-tomcat-9.0.10 /usr/local/tomcat
脚本
tomcat的脚本在bin目录下,有:catalina、startup、shutdown、setenv、digest、version等。
其中catalina脚本用于启动和关闭tomcat服务器,是tomcat中最关键的脚本。
startup脚本和shutdown脚本等都是使用了不同的参数调用了catalina脚本:
最常用的两个
startup脚本以start参数调用了catalina脚本,用于启动Tomcat
shutdown脚本以stop参数调用了catalina脚本。用户关闭Tomcat
# ll /usr/local/tomcat/bin/*.sh
-rwxr-x---. 1 root root 23463 Jun 21 01:32 /usr/local/tomcat/bin/catalina.sh
-rw-r-----. 1 root root 1997 Jun 21 01:32 /usr/local/tomcat/bin/ciphers.sh
-rwxr-x---. 1 root root 1922 Jun 21 01:32 /usr/local/tomcat/bin/configtest.sh
-rwxr-x---. 1 root root 8509 Jun 21 01:32 /usr/local/tomcat/bin/daemon.sh
-rwxr-x---. 1 root root 1965 Jun 21 01:32 /usr/local/tomcat/bin/digest.sh
-rwxr-x---. 1 root root 3680 Jun 21 01:32 /usr/local/tomcat/bin/setclasspath.sh
-rwxr-x---. 1 root root 1902 Jun 21 01:32 /usr/local/tomcat/bin/shutdown.sh
-rwxr-x---. 1 root root 1904 Jun 21 01:32 /usr/local/tomcat/bin/startup.sh
-rwxr-x---. 1 root root 5483 Jun 21 01:32 /usr/local/tomcat/bin/tool-wrapper.sh
-rwxr-x---. 1 root root 1908 Jun 21 01:32 /usr/local/tomcat/bin/version.sh
启动Tomcat
//执行startup.sh即可启动Tomcat服务
// 执行shutdown.sh 就能关闭Tomcat服务, 重启Tomcat只能先关闭再启动这样操作。
# /usr/local/tomcat/bin/startup.sh
//查看进程
# ps aux|grep java
root 1694 2.1 2.9 4615344 118436 pts/0 Sl 23:33 0:03 /usr/local/jdk8/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomcat -Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap start
//查看端口
# netstat -lntp |grep java
tcp6 0 0 :::8080 :::* LISTEN 1694/java
tcp6 0 0 127.0.0.1:8005 :::* LISTEN 1694/java
tcp6 0 0 :::8009 :::* LISTEN 1694/java
// 三个端口:
// 8080为提供web服务的端口,
// 8005为管理端口,
// 8009端口为第三方服务调用的端口,比如httpd和Tomcat结合时会用到
// 只有当三个端口全部处于监听状态时,才能正常的请求访问tomcat服务器
// 三个端口都可以自定义
测试
// 测试访问前需要在防火墙将三个端口放行,或者关闭防火墙
# firewall-cmd --add-port=8080/tcp
success
# firewall-cmd --add-port=8005/tcp
success
# firewall-cmd --add-port=8009/tcp
success
// curl测试访问
# curl 10.1.1.28:8080 -I
HTTP/1.1 200
Content-Type: text/html;charset=UTF-8
Transfer-Encoding: chunked
Date: Mon, 16 Jul 2018 15:40:51 GMT
浏览器测试访问
出现如下的页面,就表示Tomcat的初步安装以及完成了
配置Tomcat监听80端口
配置方式
先查看80端口是否被占用
# netstat -lntp | grep 80
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1036/nginx: master
tcp6 0 0 :::8080 :::* LISTEN 1694/java
tcp6 0 0 127.0.0.1:8005 :::* LISTEN 1694/java
tcp6 0 0 :::8009 :::* LISTEN 1694/java
// 这里显示80端口被nginx占用了
//所以需要先关闭nginx
# /usr/local/nginx/sbin/nginx -s stop
# netstat -lntp | grep 80
tcp6 0 0 :::8080 :::* LISTEN 1694/java
tcp6 0 0 127.0.0.1:8005 :::* LISTEN 1694/java
tcp6 0 0 :::8009 :::* LISTEN 1694/java
修改Tomcat配置文件
// Tomcat主配置文件路径是 /usr/local/tomcat/conf/server.xml
// 编辑配置文件,
# cd /usr/local/tomcat/conf/
# vi server.xml
// 找到下面这段内容,将8080,修改为80,然后重启Tomcat服务即可
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
测试
测试访问Tocmat的80端口
//先重启Tomcat服务
# /usr/local/tomcat/bin/shutdown.sh
# /usr/local/tomcat/bin/startup.sh
// curl测试访问
# curl -I 127.0.0.1:80
HTTP/1.1 200
Content-Type: text/html;charset=UTF-8
Transfer-Encoding: chunked
Date: Mon, 16 Jul 2018 16:12:17 GMT
浏览器测试访问,注意地址栏没有加端口号,默认就是访问80端口
配置Tomcat虚拟主机
添加虚拟主机
// 编辑/usr/local/tomcat/conf/server.xml
//在</Host>下面增加如下内容
<Host name="tomcat.test.cn" appBase=""
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<Context path="" docBase="/data/wwwroot/test.cn/" debug="0" reloadable="true" crossContext="true"/>
</Host>
# Tomcat主配置文件server.xml中:
# <Host>和</Host>之间的配置为虚拟主机配置部分,
# name定义域名,
# appBase定义应用的目录,默认位置在/usr/local/tomcat/webapps
# Java的应用通常是一个war的压缩包,只需要将war的压缩包放到appBase目录下面即可。
# unpackWARs="true" 表示会自动解压war包,改为false就不会自动解压了
# autoDeploy="true" 表示会自动部署,
# docBase= 就是定义网站的根目录,相当于httpd的 DocumentRoot
增加后的文件内容如下图
测试
// 先重启Tomcat服务
# /usr/local/tomcat/bin/shutdown.sh
# /usr/local/tomcat/bin/startup.sh
// 创建配置里定义的docBase目录和测试文件
# mkdir /data/wwwroot/test.cn
# echo '<h1>Tomcat Test</h1>' > /data/wwwroot/test.cn/index.html
// 查看端口
# netstat -lntp| grep 80
tcp6 0 0 :::80 :::* LISTEN 2057/java
tcp6 0 0 127.0.0.1:8005 :::* LISTEN 2057/java
tcp6 0 0 :::8009 :::* LISTEN 2057/java
// curl 测试访问
# curl -x127.0.0.1:80 tomcat.test.cn
<h1>Tomcat Test</h1>
浏览器访问测试
需要先在Windows的hosts文件里定义: 10.1.1.28 tomcat.test.cn
访问效果如下图
用WAR包部署Zrlog博客
下载安装
// 下载最新的Zrlog的WAR包到 /usr/local/tomcat/webapps/ 目录下
# /usr/local/tomcat/webapps/
# wget http://dl.zrlog.com/release/zrlog-2.0.1-71c552b-release.war
// 添加虚拟主机配置
//在server.xml文件最下面的 </Host> 标签下面添加下面的内容
<Host name="zrlog.test.cn" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<Context path="" docBase="" debug="0" reloadable="true" crossContext="true"/>
</Host>
// 重启Tomcat服务
# /usr/local/tomcat/bin/shutdown.sh
# /usr/local/tomcat/bin/startup.sh
// 查看 /usr/local/tomcat/webapps/ 目录下 WAR包 自动解压后的目录
# ll
total 9680
drwxr-x---. 14 root root 4096 Jul 16 23:21 docs
drwxr-x---. 6 root root 83 Jul 16 23:21 examples
drwxr-x---. 5 root root 87 Jul 16 23:21 host-manager
drwxr-x---. 5 root root 103 Jul 16 23:21 manager
drwxr-x---. 3 root root 283 Jul 16 23:21 ROOT
drwxr-x---. 8 root root 111 Jul 17 01:10 zrlog-2.0.1-71c552b-release
-rw-r--r--. 1 root root 9906045 Jun 30 18:12 zrlog-2.0.1-71c552b-release.war
// zrlog-2.0.1-71c552b-release这个目录就是自动解压出来的了
// 接下来将刚才添加的虚拟主机配置中 docBase 改为这个目录的绝对路径
<Host name="zrlog.test.cn" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<Context path="" docBase="/usr/local/tomcat/webapps/zrlog-2.0.1-71c552b-release" debug="0" reloadable="true" crossContext="true"/>
</Host>
// 再次重启Tomcat服务
# /usr/local/tomcat/bin/shutdown.sh
# /usr/local/tomcat/bin/startup.sh
浏览器中进行数据库的配置
需要定义hosts:10.1.1.28 zrlog.test.cn
浏览器访问效果如下
需要创建一个专用的数据库和数据库用户
# mysql -uroot -p123456
mysql> create database zrlog;
Query OK, 1 row affected (0.00 sec)
mysql> grant all on zrlog.* to 'zrlog'@'127.0.0.1' identified by '123456';
Query OK, 0 rows affected (0.00 sec)
然后再浏览器中填入刚才创建的数据库的相应信息,再点击下一步
设置管理员账号密码,以及网站的基本信息
点击下一步后即可完成配置
再点击“点击查看”,就可以访问博客的首页了
Tomcat日志
配置方式
Tomcat配置访问日志的方法是在对应虚拟主机的里面加入下面的配置:
// 这里将日志的配置添加到先前配置的tomcat.test.cn这个虚拟主机里
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="123.cn_access" suffix=".log"
pattern="%h %l %u %t "%r" %s %b" />
# prefix定义访问日志的前缀,
# suffix定义日志的后缀,
# pattern定义日志格式。
# 新增加的虚拟主机默认并不会生成类似默认虚拟主机的那个localhost.日期.log日志,
# 错误日志会统一记录到catalina.out中。
# 关于Tomcat日志,你最需要关注catalina.out,当出现问题时,我们应该第一想到去查看它。
测试
// 添加完配置后,先重启Tomcat
# /usr/local/tomcat/bin/shutdown.sh
# /usr/local/tomcat/bin/startup.sh
// curl测试访问 tomcat.test.cn
# curl -x10.1.1.28:80 tomcat.test.cn
<h1>Tomcat Test</h1>
// 查看访问日志
# cat /usr/local/tomcat/logs/tomcat.test.cn_access.2018-07-17.log
10.1.1.28 - - [17/Jul/2018:20:06:14 +0800] "GET / HTTP/1.1" 200 21
扩展
java容器比较 http://my.oschina.net/diedai/blog/271367
http://www.360doc.com/content/11/0618/21/16915_127901371.shtml
j2ee、j2se、ejb、javabean、serverlet、jsp之间关系 http://bbs.csdn.net/topics/50015576
tomcat server.xml配置详解 http://blog.csdn.net/yuanxuegui2008/article/details/6056754
tomcat常用数据库连接的方法 http://wjw7702.blog.51cto.com/5210820/1109263
JAR、WAR包区别 http://blog.csdn.net/lishehe/article/details/41607725
tomcat常见配置汇总 http://blog.sina.com.cn/s/blog_4ab26bdd0100gwpk.html
resin安装 http://fangniuwa.blog.51cto.com/10209030/1763488/
1 tomcat 单机多实例
http://www.ttlsa.com/tomcat/config-multi-tomcat-instance/
2 tomcat的jvm设置和连接数设置
http://www.cnblogs.com/bluestorm/archive/2013/04/23/3037392.html
3 jmx监控tomcat
http://blog.csdn.net/l1028386804/article/details/51547408
4 jvm性能调优监控工具jps/jstack/jmap/jhat/jstat
http://blog.csdn.net/wisgood/article/details/25343845
http://guafei.iteye.com/blog/1815222
5 gvm gc 相关
http://www.cnblogs.com/Mandylover/p/5208055.html
http://blog.csdn.net/yohoph/article/details/42041729
tomcat内存溢出
https://blog.csdn.net/ye1992/article/details/9344807