tomcat

JVM基本介绍

java业务都是运行在java虚拟机上的,简称jvm。
为什么java要使用jvm呢?
C语言不支持跨域平台,需要多次编译,可移植性比较差。
JAVA可以做到一次编译,多次运行,可移植性较高。
java在操作系统上启动运行一个jvm虚拟机,这样我们将java编译好的war、jar包在windows、linux、macos平台运行起来,无需重复编译。
jvm是由谁提供的呢?
jre:java运行环境,包含了jvm
jdk:java开发环境,会包含java 的运行环境jre
如果我们只是单纯的运行java代码,那么我们只使用jre就足够。

tomcat是什么,与nginx的区别

tomcat是一个web服务,提供动态程序的解析(java),支持静态资源。
企业会选择nginx+tomcat模型,nginx处理静态资源,tomvat处理动态资源(java),能加速网站的访问和降低访问的延迟。

tomcat的安装、配置、启动

安装

1. 安装jdk
yum install java -y
2. 安装tomcat
	wget https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-9/v9.0.34/bin/apache-tomcat-9.0.34.tar.gz
		mkdir /soft
		tar xf apache-tomcat-9.0.34.tar.gz  -C /soft/
		ln -s /soft/apache-tomcat-9.0.34/ /soft/tomcat

tomcat的目录结构
bin:主要包含启动和关闭tomcat的脚本(启停java脚本依赖的jar包文件)
conf:tomcat配置文件的目录
lib:tomcat运行时所需要库文件
logs:日志
temp:tomcat临时存放文件的路径
webapps:tomcat默认站点目录
work:tomcat运行时产生的缓存文件

启动

./soft/tomcat/bin/startup.sh

tomcat配置文件、架构

tomcat的一个配置文件代表一个server。

tomcat请求http的过程:
用户发出一个请求,如http: //tomcat. wenjie.com: 8080/ index. jsp。
Connector发现是http/1.1协议, 而且还是8080端口,于是就把请求接收后交给符合条件的Engine。
Engine通过请求中的主机名tomcat .wenjie. com查找满足条件的虚拟主机(Host) 。
找到后就去此虚拟主机指定的appBase (代码存放的目录)最后将解析产生的结果返回给用户。

tomcat虚拟主机配置

配置文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>

<!--注释信息   一个配置文件代表一个server-->
<Server port="8005" shutdown="SHUTDOWN">

  <!--监听器,跳过它-->
  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />

  <!--全局资源-->
  <GlobalNamingResources>

    <!--base认证模块-所有站点都能使用->conf/tomcat-users.xml文件中去定义-->
    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />
  </GlobalNamingResources>

    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    <!--https连接器
               maxThreads="150" SSLEnabled="true">
        <SSLHostConfig>
            <Certificate certificateKeystoreFile="conf/localhost-rsa.jks"
                         type="RSA" />
    -->

        <!--引擎-->
    <Engine name="Catalina" defaultHost="localhost">

      <!--tomcat自带的session复制
      <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
      -->

        <!--定义访问程序的认证,通过外部资源UserDatabase进行认证-->
      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>

        <!--具体站点的配置,默认站点 Host就相当于是Nginx的一个Server_name-->
      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
      </Host>

        <!--站点tomcat1.wenjie.com-->
      <Host name="tomcat1.wenjie.com"  appBase="/code1"
            unpackWARs="true" autoDeploy="true">

        <!--location /test   ( alias /code/admin )-->
        <Context docBase="/code1/admin" path="/test" reloadable="true"/>
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="tomcat_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
      </Host>


    </Engine>
  </Service>
</Server>

tomcat部署zrlog

1.获取war包,或者 ( 源码包 -->编译-->war包--部署 ) 
		war包:直接部署
		源码包:编译生成war包在部署

2.定义虚拟主机

        <!--站点zrlog.wenjie.com-->
      <Host name="zrlog.wenjie.com"  appBase="/zrlog"
            unpackWARs="true" autoDeploy="true">

        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="zrlog_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
      </Host>

2.上传war包至指定目录

[root@web01 conf]# mkdir /zrlog
[root@web01 conf]# ll /zrlog/
总用量 11316
-rw-r--r-- 1 root root 11585583 5月  11 11:32 ROOT.war


3.重启tomcat应用
	1.自动加压.war包
	2.自动部署,war包

[root@web01 conf]# /soft/tomcat/bin/shutdown.sh
[root@web01 conf]# /soft/tomcat/bin/startup.sh


4.检查是否部署ok
[root@web01 conf]# tail -f /soft/tomcat/logs/catalina.out
11-May-2020 11:33:32.577 信息 [main] org.apache.coyote.AbstractProtocol.start 开始协议处理句柄["http-nio-8080"]
11-May-2020 11:33:32.681 信息 [main] org.apache.catalina.startup.Catalina.start Server startup in [4,035] milliseconds



5.访问zrlog站点
	配置远程数据库连接信息
	MariaDB [(none)]> create  database zrlog charset utf8;
	MariaDB [(none)]> grant all privileges on *.* to 'all'@'%' identified by 'oldxu.com';




多web节点部署tomcat

多个web节点。
	172.16.1.7
	172.16.1.8

1.安装tomcat
	[root@web02 ~]# yum install java -y

3.拷贝代码 (注意是在web01节点操作的)
	[root@web01 ~]# scp -rp /soft root@10.0.0.8:/
	[root@web01 ~]# scp -rp /zrlog root@10.0.0.8:/

4.web02操作如下
[root@web02 ~]# rm -rf /soft/tomcat/
[root@web02 ~]# ln -s /soft/apache-tomcat-9.0.34/ /soft/tomcat


5.共享静态资源。

yum install nfs-utils -y

[root@nfs ~]# cat /etc/exports
/data/blog 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
/data/zrlog 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)

[root@nfs ~]# mkdir /data/zrlog
[root@nfs ~]# chown -R www.www /data/zrlog/
[root@nfs ~]# systemctl restart nfs

所有web节点都需要挂载
mount -t nfs 172.16.1.51:/data/zrlog /zrlog/ROOT/attached

base基础认证

tomcat自带的base基础认证(nginx basic auth)

1.配置conf/tomcat-users.xml

<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<user username="zwj" password="123456" roles="manager-gui,admin-gui"/>

2.还需要配置该项目的访问权限,因为Tomcat默认管理页面仅允许本机访问,如果希望其他网段能正常访问,需要配置允许规则。
	找到webapps/项目/META-INF/context.xml

[root@es-node1 tomcat]# vim 项目目录下/META-INF/context.xml
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
#修改为
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|10\.0\.0\.\d+" />

base基础认证在实际场景中的应用

[root@es-node1 tomcat]# vim /code/ROOT/WEB-INF/web.xml
<web-app>
...
    <security-constraint>
    <!--定义资源名称以及需要认证的url-->
        <web-resource-collection>
            <web-resource-name>zrlog</web-resource-name>
            <url-pattern>/admin/*</url-pattern>
        </web-resource-collection>
    
       <!--给对应资源关联角色名-->
        <auth-constraint>
            <role-name>zrlog_role</role-name>
        </auth-constraint>
    </security-constraint>
    
    <!--调用BASIC方法来实现认证-->
    <login-config>
        <auth-method>BASIC</auth-method>
        <realm-name>Default</realm-name>
    </login-config>
...
</web-app>


#配置用户名密码,关联对应的角色(多个role不要使用相同用户)
[root@es-node1 tomcat]# vim /soft/tomcat/conf/tomcat-users.xml
<role rolename="zrlog_role"/>
<user username="tomcat" password="123456" roles="zrlog_role"/>

#重启tomcat
[root@es-node1 ~]# /soft/tomcat/bin/shutdown.sh && /soft/tomcat/bin/startup.sh



java源码包、jar包、war包的关系、联系以及区别

  1. 什么是源码包
    是由java工程师编写的java代码,我们称之为java源码包,需要编译后才能运行。
    编译(使用maven的方式)编译后会得到war包或者jar包。
  2. 什么是jar包
    由源码编译后生成的产物,分为两种,一种是不能独立运行,被其他程序依赖运行。另一种是可以独立运行的,可以直接启动运行,无需tomcat。
  3. 什么是war包
    由源码编译后生成的产物,可以直接放入tomcat中运行起来
    三者的关系:
    源码包编译后会产生var包、jar包
    war包通常是直接由tomcat运行启动,启动加载项目时会依赖一些jar包
    jar包分为不可独立运行(被java程序依赖运行或被war包依赖运行)和可独立运行的。可独立运行的只需要有java环境即可。启动方法:java -jar xx.jar
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值