tomcat

web服务

nginx: 轻量级、web 反向代理、简单的负载均衡,处理静态数据的能力比较好;并发量2.5万
apache: 重量级,处理动态数据的能力比较好
tomcat: java的web服务,手机app大部分都使用的tomcat
lamp和lnmp 架构 index.html index.php,php作为中间件,php是能够加载index.php页面

tomcat

是基于java开发的,它只支持index.html和index.jsp页面,java能够解析index.jsp的文件;

Tomcat服务器是一个免费的开放源代码的Web应用服务器。Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta项目中的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发而成。由于有了Sun的参与和支持,最新的Servlet(java编写的一个web程序) 和JSP规范总是能在Tomcat中得到体现,Tomcat 5支持最新的Servlet 2.4和JSP 2.0规范。因为Tomcat技术先进、性能稳定,而且免费,因而深受Java爱好者的喜爱并得到了部分软件开发商的认可,是目前比较流行的Web应用服务器。
对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应HTML(标准通用标记语言下的一个应用)页面的访问请求。实际上Tomcat是Apache 服务器的扩展,但运行时它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。诀窍是,当配置正确时,Apache 为HTML页面服务,而Tomcat 实际上运行JSP 页面和Servlet。另外,Tomcat和IIS等Web服务器一样,具有处理HTML页面的功能,另外它还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat的默认模式。
tomcat_第1张图片
Servlet是Java提供的用于开发Web服务器应用程序的一个组件,运行在服务器端,由Servlet容器所管理,用于生成动态的内容。Servlet是平台独立的Java类,编写一个Servlet,实际上就是按照Servlet规范编写一个Java类。
JSP是servlet的扩展,可以认为JSP = HTML + Java代码 + JSP标签
Servlet获取请求数据和处理数据非常方便,但是向页面输出并显示数据(html标签)非常麻烦,毫无格式
jsp显示数据非常方便,像html格式一样,但是封装数据和处理数据比较麻烦

tomcat的作用:
用来对服务器上的web提供访问权限控制,并且具有处理HTML页面的功能

tomcat的优点:
兼有可扩展性和安全性,性能稳定

1、兼有可扩展性和安全性。假如单位时间内访问请求数急剧增加,可以用相对较低的费用增加前端的能力。
2、比较容易扩展。由于是通过在这台功能强大的服务器上运行的单个servlet容器,实际上也就不需要考虑session状态在分布式环境下的维护这类复杂的问题。
3、台后端服务器在外界不可以访问,网上的黑客只能访问前端的web服务器,不能直接访问后端的应用服务器,这就提高了安全性。但这并不意味着黑客们不能通过网络浏览器进行其它形式的攻击。
这种类型的站点的主要特点是每一个页面都可能是动态生成的,但这些数据中主要部分还是静态的(比如,各类图像GIF、JPG、PNG,流式媒体等)。想象以下某个站点采用了多个用于负载均衡的硬件设备,这些设备后端连结一组服务器,这些服务器可能是一组相对廉价的运行apache的linux服务器簇。这组位于前端的服务器簇将仅占总访问请求的10%的真正需要调用servlet的访问请求发送给后段的系统,后锻系统可以是一台Sun的E3500,或是IBM的AS/400,在这个后端的系统上运行着Tomcat,可能还包括企业级数据库。

tomcat的应用:
web应用服务器,可以作为中间件处理index.jsp的文件

jdk介绍

jdk(java development kit) 是java语言的软件开发工具包
其中基本组件包括:

javac – 编译器,将源程序转成字节码 
jar – 打包工具,将相关的类文件打包成一个文件 
javadoc – 文档生成器,从源码注释中提取文档 
jdb – debugger,查错工具 
java – 运行编译后的java程序(.class后缀的) 
appletviewer:小程序浏览器,一种执行HTML文件上的Java小程序的Java浏览器。 
Javah:产生可以调用Java过程的C过程,或建立能被Java程序调用的C过程的头文件。 
Javap:Java反汇编器,显示编译类文件中的可访问功能和数据,同时显示字节代码含义。 
Jconsole: Java进行系统调试和监控的工具 
xtcheck:一个检测jar包冲突的工具 
apt:注释处理工具 
jhat:java堆分析工具 
jstack:栈跟踪程序 
jstat:JVM检测统计工具 
jstatd:jstat守护进程 
jinfo:获取正在运行或崩溃的java程序配置信息 
jmap:获取java进程内存映射信息 
idlj:idl-to-java编译器,将IDL语言转化为java文件 
policytool:一个GUI的策略稳健和管理工具 
jrunscript:命令行脚本运行 

安装tomcat前要先安装jdk环境
因为版本的原因 需要重新安装一个新的jdk工具包 也就是java环境
准备一台虚拟机,拖入相关的软件包

[root@localhost ~]# java -version
openjdk version "1.8.0_102"
OpenJDK Runtime Environment (build 1.8.0_102-b14)
OpenJDK 64-Bit Server VM (build 25.102-b14, mixed mode)
[root@localhost ~]# rm -rf /usr/bin/java #删除原本主机上的Java程序
[root@localhost ~]# java -version
-bash: /usr/bin/java: 没有那个文件或目录
[root@localhost ~]# tar -zxf jdk-8u201-linux-x64.tar.gz 
[root@localhost ~]# mv jdk1.8.0_201/ /usr/local/java

能够让命令全局使用的方法:
1、制作软链接

ln  -s  /usr/local/java/bin/*   /usr/bin/

2、添加环境变量(通常情况我们使用第二种方法)

[root@localhost bin]# vim /etc/profile
#末尾添加
export JAVA_HOME=/usr/local/java
export JRE_HOME=/usr/local/java/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
#释义:
#export:声明一个变量
#jre   java  runtime   environment : java的运行环境
#class   java  依赖库文件
#path  环境变量
[root@localhost bin]# source /etc/profile
[root@localhost bin]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/java/bin:/usr/local/java/jre/bin
[root@localhost bin]# java -version
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)

注:
自己添加的环境变量,只能针对当前的shell和其子shell,如果另打开一个shell环境则需要重新生效

安装tomcat

[root@localhost ~]# tar -zxf apache-tomcat-8.5.35.tar.gz 
[root@localhost ~]# mv apache-tomcat-8.5.35 /usr/local/tomcat
[root@localhost ~]# cd /usr/local/tomcat/
[root@localhost tomcat]# cd bin/
[root@localhost bin]# ./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/local/java/jre
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
[root@localhost bin]# netstat -anput | grep java
tcp6       0      0 :::8080                 :::*                    LISTEN      58093/java          
tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      58093/java          
tcp6       0      0 :::8009                 :::*                    LISTEN      58093/java

访问192.168.10.30:8080(本机ip)
tomcat_第2张图片
tomcat软件目录结构功能
bin: 服务相关的脚本文件,可执行的文件,例如:关闭、开启脚本
conf:里面存放的是配置文件,xml结尾
lib:tomcat运行需要的依赖库文件
logs:运行的日志文件
webapps:web应用程序部署的目录,也就是站点根目录,页面是jsp或html结尾
work:存放着jsp编译后的class文件;class类文件也就是java程序编译后生成的文件

tomcat的多主机实例
虚拟主机,让一台主机可以运行多个tomcat

[root@localhost ~]# cp -r /usr/local/tomcat/ /usr/local/tomcat1
[root@localhost ~]# ls /usr/local/
bin  etc  games  include  java  lib  lib64  libexec  sbin  share  src  tomcat  tomcat1
[root@localhost ~]# cd /usr/local/tomcat1/conf/
[root@localhost conf]# vim server.xml
22 
69     
116     
[root@localhost conf]# cd ..
[root@localhost tomcat1]# ./bin/startup.sh 
Using CATALINA_BASE:   /usr/local/tomcat1
Using CATALINA_HOME:   /usr/local/tomcat1
Using CATALINA_TMPDIR: /usr/local/tomcat1/temp
Using JRE_HOME:        /usr/local/java/jre
Using CLASSPATH:       /usr/local/tomcat1/bin/bootstrap.jar:/usr/local/tomcat1/bin/tomcat-juli.jar
Tomcat started.
[root@localhost tomcat1]# netstat -anput | grep 8081
tcp6       0      0 :::8081                 :::*                    LISTEN      58441/java

访问8081端口进行验证
tomcat_第3张图片

Tomcat架构

1 server
提供一个接口让其他程序能够访问到service集合、同时要维护它所包含的所有service的生命周期,包括如何初始化、如何结束服务、如何找到别人要访问的service
2 service
Service是server下一个集合,service包含多个接收请求的connector并有一个处理所有连接的容器container
3 connector
Connector作用是监听客户端请求,并将请求封装提交container处理,然后将处理结果返回客户端。

Tomcat有两个典型的connector,一个用来监听浏览器的http请求,另一个是用来监听来自其他服务器的请求coyote http/1.1 connector 在端口8080处侦听来自客户browser的http请求。
Coyote AJP/1.3 connector 在端口8009处侦听来自其他webserver(apache)的servlet/jsp代理请求

4 container
1 engine
Engine下可以配置多个虚拟主机virtual host,每个虚拟主机都有一个域名,当engine获得一个请求时,它把该请求匹配到某个host上,然后把该请求交给host来处理。
Engine 有一个默认虚拟主机,当请求无法匹配到任何一个host上的时候,将交给该默认host来处理localhost

2 host
代表一个virtual host ,虚拟主机,每个虚拟主机和某个网络域名domain name相匹配。
每个虚拟主机下都可以部署(deploy)一个或者多个web app,每个web app对应一个context,有一个context path。
当host获得一个请求时,将把该请求匹配到某个context上,然后把该请求交给该context来处理。
所有无法和其他context的路径名匹配的请求都将最终和该默认context匹配。

3 context
一个context对应于一个web application
一个web application 由一个或者多个servlet组成。

tomcat的工作原理:

tomcat_第4张图片
server:最顶层元素,也就是tomcat服务,一个server可以包含至少一个service,用于具体提供服务
8005:负责关闭tomcat的端口
service分为两个部分:
1、connector:负责接收请求,并提供Socket与Request和Response相关的转化
2、container:用于封装和管理servlet,以及具体处理Request请求
connector分为两个部分:
1、监听端口8080 http1.1:监听来自客户端的请求
2、监听端口8009 ajp:接收其他服务的请求
3、监听端口8443:监听https
例:
http://localhost:8080/kgc/index.jsp
connector的8080端口接收–container----engine处理引擎----虚拟主机----context
context可以有多个,相当于多个目录,多个页面

一个Tomcat中只有一个Server,一个Server可以包含多个Service,一个Service只有一个Container,但是可以有多个Connectors,这是因为一个服务可以有多个连接,如同时提供Http和Https链接,也可以提供向相同协议不同端口的连接,示意图如下(Engine、Host、Context下边会说到):
tomcat_第5张图片
多个 Connector 和一个 Container 就形成了一个 Service,有了 Service 就可以对外提供服务了,但是 Service 还要一个生存的环境,必须要有人能够给她生命、掌握其生死大权,那就非 Server 莫属了!所以整个 Tomcat 的生命周期由 Server 控制。
另外,上述的包含关系或者说是父子关系,都可以在tomcat的conf目录下的server.xml配置文件中看出

编写一个自定义的页面

[root@localhost tomcat1]#  ./bin/shutdown.sh 
Using CATALINA_BASE:   /usr/local/tomcat1
Using CATALINA_HOME:   /usr/local/tomcat1
Using CATALINA_TMPDIR: /usr/local/tomcat1/temp
Using JRE_HOME:        /usr/local/java/jre
Using CLASSPATH:       /usr/local/tomcat1/bin/bootstrap.jar:/usr/local/tomcat1/bin/tomcat-juli.jar
[root@localhost tomcat1]# cd 
[root@localhost ~]# rm -rf /usr/local/tomcat1

[root@localhost ~]# cd /usr/local/tomcat/
[root@localhost tomcat]# vim conf/server.xml
148       
#添加
150       
#释义:
host name:域名
appbase:站点根目录, java开发的一个web项目 war
unpackwars:是否解压war包,这里开发写好的页面会打成war包
autodeploy:是否自动部署
  : #是否共享会话
[root@localhost tomcat]# mkdir webapps/hello
[root@localhost tomcat]# echo "1111" > webapps/hello/index.jsp
[root@localhost tomcat]# ./bin/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/local/java/jre
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
[root@localhost tomcat]# ./bin/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/local/java/jre
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
[root@localhost tomcat]# netstat -anput | grep 8080
tcp6       0      0 :::8080                 :::*                    LISTEN      59324/java          
tcp6       0      0 ::1:44070               ::1:8080                TIME_WAIT   -                   
[root@localhost tomcat]# curl 192.168.10.30:8080/kgc/index.jsp #访问验证
1111

tomcat的默认索引页 index.jsp

[root@localhost tomcat]# cd /usr/local/tomcat/webapps/hello/
[root@localhost hello]# mv index.jsp index1.jsp 
[root@localhost hello]# curl 192.168.10.30:8080/kgc/  #这儿会访问不到,会出现404
HTTP Status 404 – Not Found

HTTP Status 404 – Not Found


Type Status Report

Message /kgc/

Description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists.


Apache Tomcat/8.5.35

[root@localhost hello]# curl 192.168.10.30:8080/kgc/index1.jsp 1111

目录浏览功能
当访问一个目录,没有默认索引页,会展示出这个目录中所有的页面,前提需要开启目录浏览的功能
必须当前目录下没有默认索引页

[root@localhost ~]# cd /usr/local/tomcat/webapps/hello/
[root@localhost hello]# touch index{2..10}.jsp
[root@localhost hello]# ls
index10.jsp  index2.jsp  index4.jsp  index6.jsp  index8.jsp
index1.jsp   index3.jsp  index5.jsp  index7.jsp  index9.jsp
[root@localhost hello]# vim /usr/local/tomcat/conf/web.xml
111             listings
 112             true  #开启目录浏览功能
 
[root@localhost hello]# /usr/local/tomcat/bin/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/local/java/jre
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar

[root@localhost hello]# /usr/local/tomcat/bin/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/local/java/jre
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
[root@localhost hello]# netstat -anput | grep 8080
tcp6       0      0 :::8080                 :::*                    LISTEN      59567/java          
tcp6       0      0 192.168.10.30:8080      192.168.10.1:60129      ESTABLISHED 59567/java          
tcp6       0      0 192.168.10.30:8080      192.168.10.1:60128      FIN_WAIT2

访问http://192.168.10.30:8080/kgc/进行验证查看
tomcat_第6张图片
修改默认索引页

[root@localhost hello]# vim /usr/local/tomcat/conf/web.xml 
4696         aa.jsp
[root@localhost hello]# /usr/local/tomcat/bin/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/local/java/jre
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
[root@localhost hello]# /usr/local/tomcat/bin/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/local/java/jre
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
[root@localhost hello]# netstat -anput | grep 8080
tcp6       0      0 :::8080                 :::*                    LISTEN      59873/java          
tcp6       0      0 ::1:44088               ::1:8080                TIME_WAIT   -                   
[root@localhost hello]# echo aa > aa.jsp
[root@localhost hello]# ls
aa.jsp       index1.jsp  index3.jsp  index5.jsp  index7.jsp  index9.jsp
index10.jsp  index2.jsp  index4.jsp  index6.jsp  index8.jsp
[root@localhost hello]# curl 192.168.10.30:8080/kgc/
aa

这个实验做完之后再把刚刚改的配置更改回来,以便于后面接着使用

jvm内存监控页面
jvm(java vritual machine)java的虚拟主机

[root@localhost hello]# vim meminfo.jsp
#添加
<%
Runtime rtm = Runtime.getRuntime();
long mm = rtm.maxMemory()/1024/1024;
long fm = rtm.freeMemory()/1024/1024;
long tm = rtm.totalMemory()/1024/1024;
out.println("JVM memory info:
"); out.println("Max memory:"+mm+"MB"+"
"); out.println("Free memory:"+fm+"MB"+"
"); out.println("Total memory:"+tm+"MB"+"
"); out.println("Available memory can be used:"+(mm+fm-tm)+"MB"+"
"); %>

访问http://192.168.10.30:8080/kgc/meminfo.jsp进行验证
tomcat_第7张图片
jvm的内存分配方式:
堆内存和栈内存

堆内存的方式: jvm最大占用235M,但是tomcat不会使用全部,会先申请一块空间25M,然后使用了21M,剩余4M,所以tomcat还可以使用
mm-(tm-fm)也就是mm+fm-tm所得到的214M
jvm的堆内存分配是先分配一小块,然后在使用
堆内存是现在的jvm的分配方式

栈内存: 使用多少占用多少,现在不常用

JVM远程调用(jvm远程监控)
JMX是Java Management Extensions 的简写,即Java管理扩展,这门技术是对Java应用程序和JVM进行监控和管理的,在企业实际开发过程中,所有的程序都是需要进行监控的,没有监控,程序就相当于是裸奔。
在一些小公司可能没有监控,只注重于功能,但是在大公司中,没有监控是绝对不可能的。JMX是Java官方提供的一套用于监控Java程序和JVM运行时状态的标准API。
通过JMX,我们可以监控的内容包括:
1、服务器中各种资源的使用情况:如CPU、内存等
2、JVM内存使用情况
3、JVM中的线程情况
4、JVM中加载的类

很多开源软件都是用JMX来实现性能监控的,比如大名鼎鼎的Kafka:
Kafka 的每个监控指标都是以 JMX MBean 的形式定义的,具体来说,Kafka 使用基于 Metrics 的监控指标体系在方法调用的过程中设置埋点来统计 broke 端和 clients 端的各种监控指标,然后将采集的指标通过Metrics的JmxReporter送往JMX中。

实验:

主机 ip
tomcat 192.168.10.30
远程监控 192.168.10.40

tomcat主机:

[root@localhost ~]# cd /usr/local/tomcat/
[root@localhost tomcat]# vim bin/catalina.sh
307 CATALINA_OPTS="-Djava.rmi.server.hostname=192.168.10.30 #jmx监控的主机(本机)
308 -Dcom.sun.management.jmxremote #开启远程监控
309 -Dcom.sun.management.jmxremote.port=8080 #监控的端口
310 -Dcom.sun.management.jmxremote.ssl=false #不使用https
311 -Dcom.sun.management.jmxremote.authenticate" #认证登录

[root@localhost tomcat]# cd /usr/local/java/jre/lib/management/
[root@localhost management]# cp jmxremote.password.template jmxremote.password
[root@localhost management]# vim jmxremote.password
62 monitorRole  123456
 63 controlRole  123456
 [root@localhost management]# chmod 600 jmxremote.*
 
[root@localhost management]# /usr/local/tomcat/bin/shutdown.sh 

[root@localhost management]# /usr/local/tomcat/bin/startup.sh 

[root@localhost management]# netstat -anput | grep 8080
tcp6       0      0 :::8080                 :::*                    LISTEN      61598/java          
tcp6       0      0 ::1:44102               ::1:8080                TIME_WAIT   -        
[root@localhost bin]# systemctl stop firewalld
[root@localhost bin]# setenforce 0  

远程主机:验证

[root@localhost ~]# jconsole  #执行完后会弹出以下窗口

tomcat_第8张图片
tomcat_第9张图片
看到这儿就证明监控部署成功
tomcat_第10张图片

tomcat的管理平台

tomcat的应用管理平台:
用于部署页面,tomcat本身自带的一个管理平台

[root@localhost management]# cd /usr/local/tomcat/
[root@localhost tomcat]# cd webapps/
[root@localhost webapps]# ls
docs  examples  hello  host-manager  manager  ROOT
[root@localhost webapps]# cd manager/
[root@localhost manager]# vim /usr/local/tomcat/bin/catalina.sh
#将307-311注释
307 #CATALINA_OPTS="-Djava.rmi.server.hostname=192.168.10.30
308 #-Dcom.sun.management.jmxremote
309 #-Dcom.sun.management.jmxremote.port=8080
310 #-Dcom.sun.management.jmxremote.ssl=false
311 #-Dcom.sun.management.jmxremote.authenticate"

[root@localhost manager]# cd /usr/local/tomcat/
[root@localhost tomcat]# vim webapps/manager/META-INF/context.xml
#修改
20          allow="192.168.10.*" /> #允许这个网段的ip能查看应用管理平台
[root@localhost tomcat]# vim conf/tomcat-users.xml 
#在倒数第二行添加以下内容
44   
45   
46   
47   
#参数释义
manager-gui:可以去访问html接口
manager-script:可以去访问纯文本的接口
Manager-remote    jmx代理的接口
manager-status:可以查看tomcat的状态

[root@localhost tomcat]# /usr/local/tomcat/bin/shutdown.sh 

[root@localhost tomcat]# /usr/local/tomcat/bin/startup.sh 

[root@localhost tomcat]# netstat -anput | grep 8080
tcp6       0      0 :::8080                 :::*                    LISTEN      62671/java          
tcp6       0      0 ::1:44118               ::1:8080                TIME_WAIT   -            

访问192.168.10.30:8080/manager/html验证
tomcat_第11张图片
tomcat_第12张图片

第一种:部署使用图形界面 部署web项目,也就是war包
在这里插入图片描述
访问验证
tomcat_第13张图片
把这个使用图形界面部署的web项目删除掉
在这里插入图片描述
第二种:使用命令部署war包

[root@localhost ~]# cp bdqnweb.war /usr/local/tomcat/webapps/
[root@localhost ~]# /usr/local/tomcat/bin/shutdown.sh
[root@localhost ~]# /usr/local/tomcat/bin/startup.sh
[root@localhost ~]# netstat -anput | grep 8080
tcp6       0      0 :::8080                 :::*                    LISTEN      63351/java          
[root@localhost ~]# curl 192.168.10.30:8080/bdqnweb/


Hello World!

第三种:命令来部署war项目

[root@localhost ~]# rm -rf /usr/local/tomcat/webapps/bdqnweb*
[root@localhost ~]# unzip bdqnweb.war -d /usr/local/tomcat/webapps/bdqnweb
Archive:  bdqnweb.war
   creating: /usr/local/tomcat/webapps/bdqnweb/META-INF/
  inflating: /usr/local/tomcat/webapps/bdqnweb/META-INF/MANIFEST.MF  
   creating: /usr/local/tomcat/webapps/bdqnweb/WEB-INF/
   creating: /usr/local/tomcat/webapps/bdqnweb/WEB-INF/classes/
  inflating: /usr/local/tomcat/webapps/bdqnweb/WEB-INF/web.xml  
  inflating: /usr/local/tomcat/webapps/bdqnweb/index.jsp  
   creating: /usr/local/tomcat/webapps/bdqnweb/META-INF/maven/
   creating: /usr/local/tomcat/webapps/bdqnweb/META-INF/maven/cn.bdqn.bdqnweb/
   creating: /usr/local/tomcat/webapps/bdqnweb/META-INF/maven/cn.bdqn.bdqnweb/bdqnweb/
  inflating: /usr/local/tomcat/webapps/bdqnweb/META-INF/maven/cn.bdqn.bdqnweb/bdqnweb/pom.xml  
  inflating: /usr/local/tomcat/webapps/bdqnweb/META-INF/maven/cn.bdqn.bdqnweb/bdqnweb/pom.properties
 
[root@localhost ~]# cd /usr/local/tomcat/webapps/
[root@localhost webapps]# ls
bdqnweb docs  examples  hello  host-manager  manager  ROOT
[root@localhost webapps]# curl 192.168.10.30:8080/bdqnweb/


Hello World!

java写的web界面 web项目 打包之后 会变成war包
bdqnweb/
├── index.jsp #页面
├── META-INF 应用程序的配置目录 加载的程序 数据 扩展的包
│ ├── MANIFEST.MF
│ └── maven
└── WEB-INF 页面的配置
├── classes 类文件 index.jsp编译后生成的文件
└── web.xml 配置文件
java web项目 web(程序) war包(jar包 )

tomcat_第14张图片

1.jar包的介绍
JAR(Java Archive,Java 归档文件)是与平台无关的文件格式,它允许将许多文件组合成一个压缩文件。JavaSE程序可以打包成Jar包(J其实可以理解为Java了)。

JAR 文件格式以流行的 ZIP 文件格式为基础。与 ZIP 文件不同的是,JAR 文件不仅用于压缩和发布,而且还用于部署和封装库、组件和插件程序,并可被像编译器和 JVM 这样的工具直接使用。在 JAR 中包含特殊的文件,如 manifests 和部署描述符,用来指示工具如何处理特定的 JAR。

简单来说,Java编译好之后生成class文件,但如果直接发布这些class文件的话会很不方便,所以就把许多的class文件打包成一个jar,jar中除了class文件还可以包括一些资源和配置文件,通常一个jar包就是一个java程序或者一个java库。可以将这些jar包引入到你的项目中,可以直接使用这些jar包中的类和属性,这些jar包一般放在lib目录下。

2.war包的介绍

war(Web application Archive),与jar基本相同,它通常表示这是一个Java的Web应用程序的包,是一个可以直接运行的web模块,通常用于网站,打成包部署到容器中。以Tomcat来说,将war包放置在其\webapps\目录下,然后启动Tomcat,这个包就会自动解压,就相当于发布了。tomcat这种Servlet容器会认出war包并自动部署。

war包中的文件按照一定目录结构来组织。其根目录下包含有html和jsp文件,或者包含有这两种文件的目录,另外还有WEB-INF目录。通常在WEB-INF目录下含有一个web.xml文件和一个classes目录,web.xml是这个应用的配置文件,而classes目录下则包含编译好的servlet类和jsp,或者servlet所依赖的其他类(如JavaBean)。通常这些所依赖的类也可以打包成jar包放在WEB-INF下的lib目录下。

简单来说,war包是JavaWeb程序打的包,war包里面包括写的代码编译成的class文件,依赖的包,配置文件,所有的网站页面,包括html,jsp等等。一个war包可以理解为是一个web项目,里面是项目的所有东西。

3.区别

WAR文件代表了一个Web应用程序,JAR是类的归档
所有的包都是jar打的,只不过目标文件的扩展名不一样

tomcat的主机管理平台: 可以制作虚拟主机

[root@localhost ~]# vim /usr/local/tomcat/webapps/host-manager/META-INF/context.xml
20          allow="192.168.10.*" />
[root@localhost ~]# vim /usr/local/tomcat/conf/tomcat-users.xml
#添加
 49   
 50   
 51   
 52   
[root@localhost ~]# /usr/local/tomcat/bin/shutdown.sh 
[root@localhost ~]# /usr/local/tomcat/bin/startup.sh 

访问http://192.168.10.30:8080/host-manager/html验证
输入的用户名和密码也就是配置文件中的设置
tomcat_第15张图片
tomcat_第16张图片
创建虚拟主机
tomcat_第17张图片
tomcat_第18张图片

[root@localhost ~]# cd /usr/local/tomcat/webapps/
[root@localhost webapps]# ls
aaa  bdqnweb    docs  examples  hello  host-manager  manager  ROOT
[root@localhost webapps]# cd aaa/
[root@localhost aaa]# echo AAAAAA > index.jsp
[root@localhost aaa]# vim /etc/hosts
#添加
192.168.10.30 www.kgc.com
[root@localhost aaa]# /usr/local/tomcat/bin/shutdown.sh
[root@localhost aaa]# /usr/local/tomcat/bin/startup.sh
[root@localhost aaa]# curl www.kgc.com:8080/aaa/index.jsp
AAAAAA

tomcat的优化

tomcat的一个加固,用于安全方面

1、服务器的端口改为非8080端口
主配置文件中修改

[root@localhost ~]# cd /usr/local/tomcat1/conf/
[root@localhost conf]# vim server.xml
69     

2、禁用目录浏览功能

[root@localhost ~]# cd /usr/local/tomcat/webapps/hello/
[root@localhost hello]# vim /usr/local/tomcat/conf/web.xml
111             listings   
112             false   #开启目录浏览功能

3、在生产环境中,要禁用应用管理平台和主机管理平台

[root@localhost ~]# rm -rf /usr/local/tomcat/webapps/manager/
[root@localhost ~]# rm -rf /usr/local/tomcat/webapps/host-manager/

4、隐藏服务版本的信息
tomcat_第19张图片
没有找到对应的页面时,会显示版本的信息,可以隐藏版本信息

[root@localhost ~]# vim /usr/local/tomcat/conf/web.xml
23 
  24    404
  25    /notfound.jsp
  26 
[root@localhost ~]# cd /usr/local/tomcat/webapps/hello/
[root@localhost hello]# echo "page no found" > notfound.jsp
[root@localhost hello]# /usr/local/tomcat/bin/shutdown.sh 
[root@localhost hello]# /usr/local/tomcat/bin/startup.sh

当再次访问不存在的页面时,将不会出现版本信息
tomcat_第20张图片

5、脚本权限收回,防止爆破

chmod -R 700 /usr/local/tomcat/bin/*

你可能感兴趣的:(tomcat)