20171106 Tomcat(一)

  • Java语言介绍
  • Java EE和Tomcat
  • Tomcat的主要配置
  • Tomcat的管理工具
  • Tomcat的反向代理

一、Java语言介绍

(一)Java的特征

  • 面向对象
  • write once, run anywhere:一次编译,任何处运行
  • jdk:包含类库(API)、开发工具(javac)、JVM

(二)Java的三个方向

  • JAVA SE:标准版
  • JAVA EE:企业版,可以视为JAVA SE增加一些企业级功能模块
  • JAVA ME:移动版

(三)jdk与openjdk

  • 2006年Sun开源了jdk,建立了openjdk组织
  • openjdk与jdk接口兼容,可以按照需求选择
  • 当前有openjdk 1.6, 1.7, 1.8版本,对应oracle jdk的相应版本

(四)Java代码的运行

  • *.java(source code) --> javac --> *.class(bytecode)
    javac程序将java源码文件编译为字节码的java类文件
  • jvm:class loader,加载程序的类文件,及程序的类文件依赖到的其它的类文件而后运行; 整个运行表现为一个jvm进程

(五)java技术体系

  • Java编程语言
  • Java Class文件格式
  • Java API
  • Java VM

(六)JVM运行时区域

  • 方法区:线程共享, 用于存储被JVM加载的class信息、常量、静态变量、方法等
  • 堆:用于存储对象,是jvm所管理的内存中占用空间最大的一部分,也是GC(垃圾回收)管理的主要区域;
  • Java栈:线程私有,存储线程自己的局部变量
  • PC寄存器:线程私有的内存空间,程序的指令指针
  • 本地方法栈:

(七)jdk的安装

(1)openjdk的安装
  • java-VERSION-openjdk:核心包
  • java-VERSION-openjdk-headless:运行时环境包
  • java-VERSION-openjdk-devel:开发包
yum install java-1.8.0-openjdk-devel
java -version     // 查看当前java环境
(2)oracle jdk的安装
rpm -ivh jdk-8u151-linux-x64.rpm
vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/java/latest
export PATH=$JAVA_HOME/bin:$PATH
. /etc/profile.d/java.sh 
java -version

二、Java EE和Tomcat

(一)Java EE中的关键模块

  • Servlet:Java编写的服务器端程序,主要功能在于交互式地浏览和修改数据,生成动态Web内容

    • servlet container:容器,提供servlet功能的服务器
    • servlet engine:实现具体功能的servlet实例
  • JSP:Java Server Pages,是一种实现普通静态HTML 和动态 HTML 混合编码的技术;

    • 特点:借助内容和外观的分离,页面制作中不同性质的任务可以方便地分开:由页面设计者进行 HTML设计,同时留出供 Servlet 程序员插入动态内容的空间
    
    TITLE
    
    

    ...

    <% ... java code... // 插入动态内容,实现前端与后端的分离 %>
  • jsp与servlet的转换关系:
    .jsp -->jasper--> .java --> javac --> .class --> jvm

    • 基于jasper将静态输出的数据转为java代码进行输出,结果为servlet规范的代码
    • javac工具将servlet代码编译为类文件,再把类文件加载到jvm中运行
    • jsp的作用在于解决servlet处理html时的复杂性,将前端与后端的工作分离。运行时通过jasper将jsp翻译为标准的java源代码,再按照标准的java代码运行过程工作。

(二)Tomcat

  • Tomcat是一个servlet container,实现了Java EE中servlet, jsp部分,故其只是Java EE的部分实现
  • Tomcat是由Sun开发的Java Web Server(Java EE的最早实现)与ASF开发的JServ项目合并后产生的
  • 当前的Tomcat项目是在Tomcat 4.0(代号:Catalina)的基础上不断完善发展起来的,故Tomcat中很多地方仍旧能够看到单词catalina的痕迹

(三)Java EE的实现简介

  • 商业实现:
    WebSphere, WebLogic, Oc4j, Glassfish, Geronimo, JOnAS, JBoss
  • 开源实现:
    Tomcat, Jetty, Resin

(四)Tomcat的安装

(1)yum安装
yum install tomcat tomcat-docs-webapp tomcat-admin-webapps tomcat-webapps
systemctl start tomcat
(2)官网下载二进制压缩包,解压缩安装
tar xf apache-tomcat-7.0.82.tar.gz -C /usr/local/
cd /usr/local/
ln -sv apache-tomcat-7.0.82/ tomcat
useradd tomcat
setfacl -R -m u:tomcat:rwx ./tomcat/
vim /etc/profile.d/tomcat.sh
  export CATALINA_BASE=/usr/local/tomcat
  export PATH=$CATALINA_BASE/bin:$PATH
. /etc/profile.d/tomcat.sh 
. catalina.sh start     // tomcat由java编写,使用脚本运行将tomcat运行在jvm中

(五)Tomcat的程序环境

(1)tomcat的目录结构

bin:脚本及启动时用到的类
conf:配置文件目录
lib:库文件,Java类库,jar
logs:日志文件目录
temp:临时文件目录
webapps:webapp的默认目录
work:工作目录,存放编译后的字节码文件

(2)catalina.sh --help

run:前台模式启动
run -security:带安全管理的前台模式启动
start:后台模式启动
start -security:带安全管理的后台模式启动
stop:关闭
stop n:等待n秒后关闭
stop -force:强行关闭
stop n -force:等待n秒后,强行关闭
configtest:检查配置
version:查询版本

(3)rpm包安装的程序环境
  • 配置文件目录:/etc/tomcat
  • 主配置文件:server.xml
  • webapps存放位置:/var/lib/tomcat/webapps/
    examples
    manager
    host-manager
    docs
  • Unit File:tomcat.service
  • 环境配置文件:/etc/sysconfig/tomcat

三、Tomcat的主要配置

(一)tomcat的配置文件构成

  • server.xml:主配置文件
  • web.xml:每个webapp只有“部署”后才能被访问,它的部署方式通常由web.xml进行定义,其存放位置为WEB-INF/目录中;此文件为所有的webapps提供默认部署相关的配置
  • context.xml:每个webapp都可以使用的配置文件,它通常由专用的配置文件context.xml来定义,其存放位置为WEB-INF/目录中;此文件为所有的webapps提供默认配置
  • tomcat-users.xml:用户认证的账号和密码文件;角色(role),用户(user);此文件在tomcat启动时被装入内存
  • catalina.policy:当使用-security选项启动tomcat时,用于为tomcat设置安全策略
  • catalina.properties:Java属性的定义文件,用于设定类加载器路径,以及一些与JVM调优相关参数
  • logging.properties:日志系统相关的配置

(二)tomcat主配置文件:server.xml

  • 文件结构:

    
      
        
        
        ...
        
            
              
              
              ...
            
            
            ...
            
            ...
        
      
    
    
    20171106 Tomcat(一)_第1张图片
  • 每一个组件都由一个Java“类”实现,这些组件大体可分为以下几个类型:
    顶级组件:Server
    服务类组件:Service
    连接器组件:http, https, ajp(apache jserv protocol)
    容器类:Engine, Host, Context
    被嵌套类:valve, logger, realm, loader, manager, ...
    集群类组件:listener, cluster, ...

(三)JSP WebAPP的组织结构

index.jsp:主页
WEB-INF/:当前webapp的私有资源路径;通常用于存储当前webapp的web.xml和context.xml配置文件
META-INF/:类似于WEB-INF/
classes/:类文件,当前webapp所提供的类
lib/:类文件,当前webapp所提供的类,被打包为jar格式

(四)webapp归档格式

.war:webapp
.jar:EJB的类打包文件(类库)
.rar:资源适配器类打包文件
.ear:企业级webapp

(五)部署(deploy)webapp的相关操作

  • 部署步骤:

    • 将webapp的源文件放置于目标目录(网页程序文件存放目录)
    • 配置tomcat服务器能够基于web.xml和context.xml文件中定义的路径来访问此webapp
    • 将其特有的类和依赖的类通过class loader装载至JVM
  • 部署有两种方式:

    • 自动部署:auto deploy
    • 手动部署:
      冷部署:把webapp复制到指定的位置,而后才启动tomcat
      热部署:在不停止tomcat的前提下进行部署
  • 部署工具:manager, ant脚本, tcd(tomcat client deployer)等

  • undeploy:拆除(反部署),停止webapp,并从tomcat实例上卸载webapp

  • 实验1:实现一个最简单的webapp部署操作

mkdir -pv /var/lib/tomcat/webapps/test/{WEB-INF,classes,lib}
vim /var/lib/tomcat/webapps/test/index.jsp
<%@ page language="java" %>          // 声明使用的语言
<%@ page import="java.util.*" %>     // 声明引用的类

        
        Test Page
        
        
        <% out.println("hello world");
        %>
        

service tomcat restart

登录http:// 192.168.136.229:8080/test,成功显示预期结果

20171106 Tomcat(一)_第2张图片

使用tree命令查看/var/cache/tomcat/work/Catalina/localhost/test目录下的结构,可以看到index.jsp文件先通过jasper转化为.java源码文件,继而通过javac编译为.class类文件并被送入jvm中执行

20171106 Tomcat(一)_第3张图片

(六)tomcat的常用组件配置

(1)Server组件:
  • 代表tomcat instance,即表现出的一个java进程
  • 监听在8005端口,只接收“SHUTDOWN”——建议将监听端口设为-1,取消shutdown功能
  • 各server监听的端口不能相同,因此,在同一物理主机启动多个实例时,需要修改其监听端口为不同的端口
(2)Service组件:
  • 用于实现将一个或多个connector组件关联至一个engine组件
(3)Connector组件:
  • 负责接收请求,常见的有三类http/https/ajp(apache jserv protocol)

  • 进入tomcat的请求可分为两类:
    (1) standalone : 请求来自于客户端浏览器
    (2) 由其它的web server反代:来自前端的反代服务器
    nginx --> http connector --> tomcat
    httpd(proxy_http_module) --> http connector --> tomcat
    httpd(proxy_ajp_module) --> ajp connector --> tomcat

  • 属性:

    • 默认存在
      port="8080"
      protocol="HTTP/1.1"
      connectionTimeout="20000" // 单位:毫秒
      address:监听的IP地址;默认为本机所有可用地址
    • 可以添加的属性
      maxThreads:最大并发连接数,默认为200
      enableLookups:是否启用DNS查询功能,建议关闭
      acceptCount:等待队列的最大长度
      secure
      sslProtocol
(4)Engine组件:
  • Servlet实例,即servlet引擎,其内部可以一个或多个host组件来定义站点;通常需要通过defaultHost来定义默认的虚拟主机

  • 属性:
    name
    defaultHost
    jvmRoute:与基于cookie的session sticky有关

(5)Host组件:
  • 位于engine内部用于接收请求并进行相应处理的主机或虚拟主机,示例:

  • 常用属性说明:
    (1) appBase:此Host的webapps的默认存放目录,指存放非归档的web应用程序的目录或归档的WAR文件目录路径;可以使用基于$CATALINA_BASE变量所定义的路径的相对路径
    (2) autoDeploy:在Tomcat处于运行状态时,将某webapp放置于appBase所定义的目录中时,是否自动将其部署至tomcat

  • 实验2:实现在非默认webapps部署目录存放webapp文件

vim /etc/tomcat/server.xml     // 创建虚拟主机


mkdir -pv /app/webapps/ROOT/{WEB-INF,lib,classes}
vim /app/webapps/ROOT/index.jsp
<%@ page language="java" %>
<%@ page import="java.util.*" %>

        
        Test Page
        
        
        <% out.println("hellopeiyang test page");
        %>
        

service tomcat restart
(6)Context组件:
  • 实现别名的功能:如下,当url为/PATH时,自动寻找磁盘上/PATH/TO/SOMEDIR的文件

  • 实验3:在实验2的基础上,实现使用context组件

cp -r /app/webapps/ROOT/ /app/data/

vim /etc/tomcat/server.xml

        


vim /app/data/index.jsp
<%@ page language="java" %>
<%@ page import="java.util.*" %>

        
        Test Page
        
        
        <% out.println("hellopeiyang another test page");
        %>
        


service tomcat restart
(7)Valve组件:
  • 定义访问日志:org.apache.catalina.valves.AccessLogValve

  • 定义访问控制:org.apache.catalina.valves.RemoteAddrValve

  • 实验4:在实验3的基础上,使用valve组件实现定制访问日志和访问控制
vim /etc/tomcat/server.xml     // 位置在Host组件语句块中



service tomcat restart
tail /var/log/tomcat/node1_access_log.2017-11-07.log

日志内容存放在/var/log/tomcat/下定义名称的日志文件中

20171106 Tomcat(一)_第4张图片

192.168.136.129的主机无法访问

20171106 Tomcat(一)_第5张图片

非192.168.136.129的主机可以访问

20171106 Tomcat(一)_第6张图片

四、Tomcat的管理工具

(一)tomcat管理工具的使用角色(role)

  • manager-gui:允许查看图形管理界面和服务器状态界面
  • manager-script:允许通过文本接口管理和查看服务器状态界面
  • manager-jmx :允许通过JMX代理管理和查看服务器状态界面
  • manager-status:只允许查看服务器状态界面

(二)授权用户manager-gui角色

vim /etc/tomcat/tomcat-users.xml 



service tomcat restart

红框中的为三个管理工具页面的连接,从上之下依次为:服务器状态, 管理应用,虚拟主机管理

20171106 Tomcat(一)_第7张图片

网络应用管理页面

20171106 Tomcat(一)_第8张图片

服务器状态管理页面

20171106 Tomcat(一)_第9张图片

(三)授权用户admin-gui角色

vim /etc/tomcat/tomcat-users.xml 
service tomcat restart


     // 用户hellopeiyang同时拥有manager-gui和admin-gui角色

虚拟主机管理页面

20171106 Tomcat(一)_第10张图片

五、Tomcat的反向代理

(一)nginx反向代理至tomcat

  • 转发过程:client (http) --> nginx (reverse proxy)(http) --> tomcat (http connector)
vim /etc/nginx/nginx.conf
server {
        listen       80 default_server;
        index        index.jsp index.html;
        root         /usr/share/tomcat/webapps/ROOT;
        location ~* \.(jsp|do)$  {
                proxy_pass http://127.0.0.1:8080;
        }
    }

nginx -t
nginx -s reload

直接登录192.168.136.230,通过80端口成功访问tomcat服务器

20171106 Tomcat(一)_第11张图片

(二)httpd通过http协议反向代理至tomcat

  • 转发过程:client (http) --> httpd (proxy_http_module)(http) --> tomcat (http connector)
vim /etc/httpd/conf.d/tomcat.conf

        ServerName node1.hellopeiyang.com
        ProxyRequests Off
        ProxyVia On
        ProxyPreserveHost On
        
                Require all granted
        
        ProxyPass / http://127.0.0.1:8080/
        ProxyPassReverse / http://127.0.0.1:8080/
        
                Require all granted
        

httpd -t
systemctl restart httpd

直接登录192.168.136.230,通过80端口成功访问tomcat服务器

(三)httpd通过ajp协议反向代理至tomcat

  • 转发过程:client (http) --> httpd (proxy_ajp_module)(ajp) --> tomcat (ajp connector)
cp /etc/httpd/conf.d/tomcat.conf /etc/httpd/conf.d/ajp-tomcat.conf
mv /etc/httpd/conf.d/tomcat.conf /etc/httpd/conf.d/tomcat.conf.bak
vim /etc/httpd/conf.d/ajp-tomcat.conf 

        ServerName node1.hellopeiyang.com
        ProxyRequests Off
        ProxyVia On
        ProxyPreserveHost On
        
                Require all granted
        
        ProxyPass / ajp://127.0.0.1:8009/
        ProxyPassReverse / ajp://127.0.0.1:8009/
        
                Require all granted
        

systemctl restart httpd

直接登录192.168.136.230,通过80端口成功访问tomcat服务器。
进入Server Status管理页面,可以看到此时ajp协议开始工作,证明现在通过ajp协议转发

你可能感兴趣的:(20171106 Tomcat(一))