tomcat基础简介与示例

tomcat基础简介与示例


Tomcat服务器是一个免费的开放源代码的Web应用服务器。Tomcat是Apache软件基金会
的Jakarta项目中的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发而成。
由于有了Sun的参与和支持,最新的Servlet 和JSP规范总是能在Tomcat中得到体现,
Tomcat 5支持最新的Servlet 2.4和JSP 2.0规范。因为Tomcat技术先进、性能稳定,
而且免费,因而深受Java爱好者的喜爱并得到了部分软件开发商的认可,是目前比较流行的Web应用服务器。
Tomcat软件是java所编写的,所以要运行tomcat程序需要java编译环境。
准备Java环境,yum安装(此文档使用的是openJDK1.8.0),:
java-VERSION-openjdk: java程序运行环境
java-VERSION-openjdk-devel:java程序开发工具
也可以获取相应版本的rpm包,注意rpm包安装需要配置环境变量:
jdk-VERSION-OS-ARCH.rpm
例如:jdk-1.8.0_25-linux-x64.rpm
安装完成后,要配置JAVA_HOME环境变量,指向java的安装路径;
OpenJDK:
JAVA_HOME=/usr
Oracle JDK:
JAVA_HOME=/usr/java/jdk_VERSION
注意:多版本并存时,可使用 alternatives命令设定默认使用的版本

安装tomcat
	Yum安装tomcat, tomcat-admin-webapps, tomcat-webapps, tomcat-docs-webapp

获取压缩包直接部署:

# tar xf apache-tomcat-VERSION.tar.gz  -C /usr/local/
# cd /usr/local
# ln -sv apache-tomcat-VERSION  tomcat
压缩包部署需新建/etc/profile.d/tomcat.sh,添加以下指令,为tomcat添加环境变量 

export CATALINA_BASE=/usr/local/tomcat
export PATH=$CATALINA_BASE/bin:$PATH

tomcat目录结构:
tomcat基础简介与示例_第1张图片

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

Tomcat的核心组件:server.xml配置结构

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

Catalina:与开始/关闭shell脚本交互的主类,因此如果要研究启动和关闭的过程,就从这个类开始看起。
Server:是整个Tomcat组件的容器,包含一个或多个Service。
Service:Service是包含Connector和Container的集合,Service用适当的Connector接收用户的请求,再发给相应的Container来处理。
Connector:实现某一协议的连接器,如默认的有实现HTTP、HTTPS、AJP协议的。
Container:可以理解为处理某类型请求的容器,处理的方式一般为把处理请求的处理器包装为Valve对象,并按一定顺序放入类型为Pipeline的管道里。Container有多种子类型:Engine、Host、Context和Wrapper,这几种子类型Container依次包含,处理不同粒度的请求。另外Container里包含一些基础服务,如Loader、Manager和Realm。
Engine:Engine包含Host和Context,接到请求后仍给相应的Host在相应的Context里处理。
Host:就是我们所理解的虚拟主机。
Context:就是我们所部属的具体Web应用的上下文,每个请求都在是相应的上下文里处理的。
Wrapper:Wrapper是针对每个Servlet的Container,每个Servlet都有相应的Wrapper来管理。可以看出Server、Service、Connector、Container、Engine、Host、Context和Wrapper这些核心组件的作用范围是逐层递减,并逐层包含。
下面就是些被Container所用的基础组件:
	Loader:是被Container用来载入各种所需的Class。
	Manager:是被Container用来管理Session池。
	Realm:是用来处理安全里授权与认证。

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

部署(deploy)webapp的相关操作:
deploy:将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;
	start:启动处于停止状态的webapp;
	stop:停止webapp,不再向用户提供服务;其类依然在jvm上;
	redeploy:重新部署;
手动提供一测试类应用,并冷部署:
# mkidr  -pv  /var/lib/tomcat/webapps/test/{classes,lib,WEB-INF}

/etc/tomcat/server.xml使用默认配置不做修改,创建文件/var/lib/tomcat/webapps/test/index.jsp。添加以下内容:

			<%@ page language="java" %>
			<%@ page import="java.util.*" %>
			
				
					Test Page
				
				
					<% out.println("hello world");
					%>
				
					

tomcat stop—>tomcat start:启动服务
编译过程:.jsp -->jasper–> .java --> javac --> .class --> jvm
tomcat基础简介与示例_第2张图片
默认页:
tomcat基础简介与示例_第3张图片
测试页:
tomcat基础简介与示例_第4张图片

tomcat的常用组件配置:
Server:代表tomcat instance,即表现出的一个java进程;监听在8005端口,只接收“SHUTDOWN”。
各server监听的端口不能相同,因此,在同一物理主机启动多个实例时,需要修改其监听端口为不同的端口; 
Service:用于实现将一个或多个connector组件关联至一个engine组件;
Connector组件:负责接收请求,常见的有三类http/https/ajp;
	常用属性:port="8080" 监听的端口
			protocol="HTTP/1.1" 通信协议
			connectionTimeout="20000" 连接超时时长
			address:监听的IP地址;默认为本机所有可用地址;
			maxThreads:最大并发连接数,默认为200;
			enableLookups:是否启用DNS查询功能;
			acceptCount:等待队列的最大长度;
Engine组件:Servlet实例,即servlet引擎,其内部可以一个或多个host组件来定义站点; 通常需要通过defaultHost来定义默认的虚拟主机;
	常用属性:name= 引擎名称,一个server内有多个service,引擎名称要具有唯一性
			defaultHost="www.stu44.com"
Host组件:位于engine内部用于接收请求并进行相应处理的主机或虚拟主机,
示例:
 
			
常用属性:name :指定host域名
			appBase: Host的webapps的默认存放目录,程序默认为:/var/lib/tomcat/webapps下,可使用绝对路径,使用相对路径时是基于$CATALINA_BASE变量所定义的路径的相对路径;
			autoDeploy:在Tomcat处于运行状态时,将某webapp放置于appBase所定义的目录中时,是否自动将其部署至tomcat;
			unpackWARs:设置为true,将放置在appBase目录中的Web应用程序作为Web应用程序归档(WAR)文件自动解压缩到相应的磁盘目录结构中,否则直接从WAR文件运行此类Web应用程序。
示例:
 
			
		# mkdir -pv /appdata/webapps
		# mkdir -pv /appdata/webapps/ROOT/{lib,classes,WEB-INF}
			提供一个测试页.jsp即可;
Context组件: host组件的应用上下文,每个请求都在是相应的上下文里处理的
	示例: 可以理解docBase的路径是path路径的别名:
Valve组件: 
	Valve存在多种类型:
		定义访问日志:org.apache.catalina.valves.AccessLogValve
		定义访问控制:org.apache.catalina.valves.RemoteAddrValve 

示例1:测试一个电子商务网站,获取shopxx-v3.0-Beta电子商务网站程序包
放在定义的站点目录下/tomcat_web_apps/目录下,做软连接:
tomcat基础简介与示例_第5张图片
Server.xml文件编写如下:
tomcat基础简介与示例_第6张图片

Tomcat stop 停止服务,tomcat start启动服务。
或者直接systemctl restart tomcat
重启后可ss –tnl查看对应端口是否处于监听状态,如果没有监听说明配置有问题,成功重启后,浏览器测试:
根据配置提示,设置好数据库,

tomcat基础简介与示例_第7张图片
/etc/locale.conf:zn_CN.UTF-8和
这里写图片描述
修改字符集
示例2:一台nginx反代,一台tomcat后端:
Nginx主机设置:
tomcat基础简介与示例_第8张图片
注意,要在测试PC添加解析信息,
C:\Windows\System32\drivers\etc\hosts添加IP FQDN,
在www.stu45.com主机添加解析信息,/etc/hosts添加IP FQDN,只要是使用FQDN就需要做解析,切记,以下不再赘述。
Tomcat主机设置
tomcat基础简介与示例_第9张图片
tomcat基础简介与示例_第10张图片

示例3:一台nginx反代www.stu44.com,一台httpd+tomcat后端www.stu45.com:
tomcat基础简介与示例_第11张图片
Nginx反代设置:
tomcat基础简介与示例_第12张图片
只加一条代理指令,动静全部代理到后端:
Httpd+tomcat设置:
tomcat基础简介与示例_第13张图片
Httpd与tomcat同一主机上,80端口接收到请求直接发送给8080端口。
Tomcat使用默认设置,
tomcat基础简介与示例_第14张图片

示例4:前端一台nginx主机做负载均衡,后端两台httpd+tomcat主机做RS
修改/etc/tomcat/server.xml(两台RS相同)
这里写图片描述

RS2-httpd:

    ServerName www.stu40.com
    DocumentRoot "/web/wy/a/"
    ProxyRequests Off 
    ProxyVia On
    ProxyPreserveHost On
    
        Options None
        AllowOverride None
        Require all granted
    
    
        Require all granted
    
    
        Require all granted
    
    ProxyPass "/" "http://www.stu40.com:8080/"
    ProxyPassReverse "/" "http://www.stu40.com:8080/"

RS2-tomcat主页:

<%@ page language="java" %>

    TomcatB
    
    

Tomcat2

<% session.setAttribute("stu45.com","stu45.com"); %>
Session ID<%= session.getId() %>
Created on <%= session.getCreationTime() %>

在/etc/hosts添加:当前主机ip www.stu40.com
完成后,重启httpd与tomcat服务
RS1- httpd:


    ServerName www.stu40.com
    DocumentRoot "/web/wy/b/"
    ProxyRequests Off 
    ProxyVia On
    ProxyPreserveHost On
    
        Options None
        AllowOverride None
        Require all granted
    
    
        Require all granted
    
    
        Require all granted
    
    ProxyPass "/" "http://www.stu40.com:8080/"
    ProxyPassReverse "/" "http://www.stu40.com:8080/"

RS1-tomcat:

<%@ page language="java" %>

    TomcatA
    
    

Tomcat1

<% session.setAttribute("stu44.com","stu44.com"); %>
Session ID<%= session.getId() %>
Created on <%= session.getCreationTime() %>

在/etc/hosts添加:当前主机ip www.stu40.com
完成后,重启httpd与tomcat服务

nginx主机配置如下:

upstream mytcrs {
    server 172.16.252.140;
    server 172.16.253.190;
}
server {
    listen 80; 
    server_name www.stu40.com;
    location / { 
        proxy_pass http://mytcrs;
        proxy_set_header Host  $host;
        proxy_set_header X-Forwarded-For  $remote_addr;
        add_header X-Via  $server_addr;
        add_header X-Accel $server_name;
    }   
}

在/etc/hosts添加:当前主机ip www.stu40.com
测试主机的hosts文件要添加调度器的IP:FQDN
重启nginx服务
浏览器测试:
tomcat基础简介与示例_第15张图片
tomcat基础简介与示例_第16张图片
Curl命令测试
tomcat基础简介与示例_第17张图片
前端nginx反代负载均衡,后端httpd+tomcat,实验ok!
架构模型:
tomcat基础简介与示例_第18张图片
示例5:基于示例4做两台RS Tomcat Session Replication Cluster
配置启用集群,将下列配置放置于或中;


	
	
	
	
	
		
		
		
		
		
		
		
		
		
		

官方配置示例有语法问题,倒数2,3行行尾>前没有“/”符号,添加即可
http://tomcat.apache.org/tomcat-7.0-doc/cluster-howto.html
配置webapps:将/etc/tomcat/WEB-INF/web.xml(tomcat yum安装路径)
拷贝到当前使用的根目录下的WEB-INF下,
编辑在元素;
以上内容两台RS-tomcat配置相同,区别在与Receiver className下的address的ip需写RS本机地址。
重启tomcat服务,测试:

tomcat基础简介与示例_第19张图片
架构模型:
tomcat基础简介与示例_第20张图片

你可能感兴趣的:(linux系统运维,linux)