nginx: 轻量级、web 反向代理、简单的负载均衡,处理静态数据的能力比较好;并发量2.5万
apache: 重量级,处理动态数据的能力比较好
tomcat: java的web服务,手机app大部分都使用的tomcat
lamp和lnmp 架构 index.html index.php,php作为中间件,php是能够加载index.php页面
是基于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的默认模式。
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(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软件目录的结构和功能:
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
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的工作原理:
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下边会说到):
多个 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/进行验证查看
修改默认索引页
[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进行验证
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的应用管理平台:
用于部署页面,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验证
第一种:部署使用图形界面 部署web项目,也就是war包
访问验证
把这个使用图形界面部署的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包 )
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验证
输入的用户名和密码也就是配置文件中的设置
创建虚拟主机
[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的一个加固,用于安全方面
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、隐藏服务版本的信息
没有找到对应的页面时,会显示版本的信息,可以隐藏版本信息
[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
5、脚本权限收回,防止爆破
chmod -R 700 /usr/local/tomcat/bin/*