这篇文章给大家讲解Tomcat快速入门,Tomcat和Nginx类似,都是WEB服务器软件,只不过Tomcat是基于JAVA开发的WEB服务,主要解析JAVA代码。
Nginx仅支持静态资源解析,而Tomcat支持Java开发的web应用,还支持解析静态资源(效率不高)Nginx适合做前端负载均衡,而Tomcat适合做后端应用服务处理。通常清空下企业种会使用Nginx+Tomcat结合,Nginx处理静态资源,Tomcat处理动态资源。
Java环境简单介绍
JVM介绍:Java业务都是运行在Java虚拟机上,Java虚拟机简称为JVM,虚拟机是通过软件模拟出具有完整硬件系统的功能
为什么Java需要JVM虚拟机?
早期C语言,不支持跨平台,如果C语言想要在Windows Linux Mac上运行,需要进行分别编译,那么在Linux上有很多优秀的软件,如果需要在Windows上使用需要重新编译,移植性差。
而Java则不同,Java是可以跨平台,只需要将源码进行一次编译,能够在不同的操作系统运行。
Java是如何做到的?
它只需要在Windows Linux系统上运行一个JVM,这样我们就能将Java编译好的war包在Windows和Linux平台运行起来,无需我们重复编译,而JVM是由JRE提供的
Java环境种JRE和JDK的区别?
JRE是Java的运行环境,包含JVM
JDK是Java的开发环境,包含Java的运行环境JRE
如果说单纯的运行环境Java代码,只需要JRE足够,但是如果需要提供开发环境以及运行环境则需要JDK
Tomcat快速安装
一、安装jdk
1. yum -y install java 2. 或者上传rpm包 3. rpm -ivh jdk-8u181-linux-x64.rpm
二、安装Tomcat(下载、解压、启动)
Tomcat官网:Apache Tomcat® - Welcome!
1. #可以在官网直接下载也可以在windows下载后导入 2. [root@Web01 ~]# rz -E 3. rz waiting to receive. 4. [root@Web01 ~]# mkdir /soft 5. [root@Web01 ~]# tar xf apache-tomcat-9.0.73.tar.gz -C /soft/ 6. #做软连接一方面是方便调用,一方面是如果升级,直接重新挂下软连接即可 7. [root@Web01 ~]# ln -s /soft/apache-tomcat-9.0.73/ /soft/tomcat 8. [root@Web01 ~]# /soft/tomcat/bin/startup.sh #启动 9. #8080对外提供服务的端口,8005关闭Tomcat端口 10. [root@Web01 ~]# netstat -tnulp|grep java 11. tcp6 0 0 127.0.0.1:8005 :::* LISTEN 36724/java 12. tcp6 0 0 :::8080 :::* LISTEN 36724/java 13. [root@Web01 ~]# /soft/tomcat/bin/shutdown.sh #停止
三、配置systemctl方式启动
1. [root@Web01 ~]# systemctl cat nginx #模仿着写 2. # /usr/lib/systemd/system/nginx.service 3. [Unit] 4. Description=nginx - high performance web server 5. Documentation=http://nginx.org/en/docs/ 6. After=network-online.target remote-fs.target nss-lookup.target 7. Wants=network-online.target 8. 9. [Service] 10. Type=forking 11. PIDFile=/var/run/nginx.pid 12. ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf 13. ExecReload=/bin/sh -c "/bin/kill -s HUP $(/bin/cat /var/run/nginx.pid)" 14. ExecStop=/bin/sh -c "/bin/kill -s TERM $(/bin/cat /var/run/nginx.pid)" 15. 16. [Install] 17. WantedBy=multi-user.target 18. 19. 20. cat >/usr/lib/systemd/system/tomcat.service<<'EOF' 21. [Unit] 22. Description=Apache Tomcat Server 23. After=network.target remote-fs.target nss-lookup.target 24. 25. [Service] 26. Type=forking 27. ExecStart=/soft/tomcat/bin/startup.sh 28. ExecStop=/soft/tomcat/bin/shutdown.sh 29. ExecRetart=/soft/tomcat/bin/shutdown.sh && sleep2 && /soft/tomcat/bin/startup.sh 30. 31. [Install] 32. WantedBy=multi-user.target 33. EOF 34. 35. [root@Web01 ~]# systemctl daemon-reload #加进配置文件后重载 36. [root@Web01 ~]# systemctl start tomcat 37. [root@Web01 ~]# netstat -tnulp|grep java 38. tcp6 0 0 127.0.0.1:8005 :::* LISTEN 38210/java 39. tcp6 0 0 :::8080 :::* LISTEN 38210/java 40. [root@Web01 ~]# systemctl enable tomcat 41. Created symlink from /etc/systemd/system/multi-user.target.wants/tomcat.service to /usr/lib/systemd/system/tomcat.service.
Tomcat配置文件
1. tomcat软件目录结构 2. bin ---主要包含启动和关闭tomcat的脚本(启停java脚本依赖jar包文件) 3. conf ---tomcat配置文件的目录(站点配置:server.xml) 4. lib ---tomcat运行时需要加载的jar包 5. logs ---tomcat日志存放位置 6. temp ---tomcat临时存放文件路径 7. webapps ---tomcat默认站点目录 8. work ---tomcat运行时产生的缓存文件 9. [root@Web01 ~]# vim /soft/tomcat/conf/server.xml #配置文件 10. [root@Web01 ~]# sed -i '/<!--/,/-->/d' /soft/tomcat/conf/server.xml #删除注释行
Tomcat配置虚拟主机(与Nginx同理)
1. [root@Web01 ~]# cat /soft/tomcat/conf/server.xml 2. ...... #添加下面内容到默认host下面 3. <Host name="test.koten.org" appBase="/code/tomcat/test" 4. unpackWARs="true" autoDeploy="true"> 5. 6. 7. <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" 8. prefix="test" suffix=".txt" 9. pattern="%h %l %u %t "%r" %s %b" /> 10. 11. </Host> 12. ...... 13. [root@Web01 ~]# systemctl restart tomcat 14. [root@Web01 ~]# mkdir -p /code/tomcat/test/ROOT 15. [root@Web01 ~]# echo 'test:koten' > /code/tomcat/test/ROOT/index.html
本地解析hosts,浏览器访问:test.koten.org:8080
Tomcat HTTP请求过程
用户发出一个请求,如http://test.koten.org:8080/index.jsp
Connector发现是http/1.1协议,而且还是8080端口,于是就把请求接收后交给符合条件的Engine
Engine通过请求中的主机名test.koten.org查找满足条件的虚拟主机(Host)
找到后就去此虚拟主机指定的appBase(代码存放的目录)最后将解析产生的结果返回给用户。
Tomcat中的Context与Nginx中的location定义的路径效果类似,也与alias类似
1. location /files/ { 2. alias /var/www/myfiles/; 3. }
1. [root@Web01 ~]# cat /soft/tomcat/conf/server.xml 2. ...... 3. </Host> 4. <Host name="test.koten.org" appBase="/code/tomcat/test" #appBase与docBase前面部分需要保持一致 5. unpackWARs="true" autoDeploy="true"> 6. <!--访问test.koten.org:8080/tt这个url,会获取/code/tomcat/test/tt中页面的资源--> 7. <Context docBase="/code/tomcat/test/tt" path="/tt" reloadable="true" /> 8. 9. <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" 10. prefix="test" suffix=".txt" 11. pattern="%h %l %u %t "%r" %s %b" /> 12. 13. </Host> 14. ...... 15. [root@Web01 ~]# systemctl restart tomcat 16. [root@Web01 ~]# mkdir /code/tomcat/test/tt 17. [root@Web01 ~]# echo 'test:tt' > /code/tomcat/test/tt/index.html #注意这里不需要ROOT目录 18. 19. #经测试,先创建tt目录重启后会显示8005端口,不先创建tt目录,虽然也可以看,但是不显示8005端口,不知道这两者是否有关联