http://xtony.blog.51cto.com/3964396/988706/ http://blog.sina.com.cn/s/blog_a0e7e34c01015nes.html http://blog.csdn.net/u010066934/article/details/51669043 http://www.cnblogs.com/doit8791/archive/2012/10/27/2742768.html
tomcat是SUN公司的JSWDK(JavaServer Web DEvelopmentKit,是SUN公司推出的小型Servlet/JSP调试工具 )的基础上发展出来的一个优秀的彻底由Java语言编写的Servlet容器; Servlet,顾名思义,是一种运行在服务器上的小插件。Servlet最多见的用途就是扩展Web服务器的功能,可做为很是安全的、可移植的、易于使用的CGI代替品。Servlet具备如下特色: 提供了可被服务器动态加载并执行的程序代码,为客服端的请求提供相应服务; Servlet彻底用Java语言编写,所以要求运行Servlet的服务器必须支持Java语言; Servlet彻底运行在服务器端,所以它不依赖于浏览器。无论浏览器是否支持Java语言,都能请求访问服务器端的Servlet;
Tomcat做为独立的Web服务器来单独运行,Servlet容器组件做为Web服务器中的一部分而存在,这是Tomcat的默认工做模式。在这种模式下,Tomcat是一个独立运行Java程序,须要启动一个Java虚拟机(JVM)进程来运行Tomcat;html
在这种模式下,Tomcat分别为Web服务器插件和Servlet容器组件两部分。Web服务器插件在其余的Web服务器进程内部地址空间启动一个Java虚拟机,Servlet容器组件在此Java虚拟机中运行。若有客户端发出调用Serlvet请求,Web服务器插件得到对此请求的控制并转发给Servlet容器组件(使用JNI通信机制,即Java本地调用接口)。前端
在这种模式下,Tomcat分为Web服务器插件和Serlvet容器组件两部分。Web服务器插件在其余的Web服务器进程外部地址空间启动一个Java虚拟机,Servlet容器组件在此Java虚拟机中运行。若有客户端发出调用Serlvet请求,Web服务器插件得到对此请求的控制并转发给Servlet容器组件(采用IPC通信机制,即进程间通讯的一种机制)。java
一、从Base仓库安装java开发工具包:OpenJDK;linux
注:tomcat对java1.7的兼容性较好nginx
yum install java-1.7.0-openjdk-devel.x86_64web
二、查看JDK是否正常安装;apache
java -versionvim
三、查看java的环境配置信息;浏览器
type javatomcat
能够看出/usr/bin/java以及/etc/alternatives/java均为连接文件; java支持多版本同时运行,能够经过alternatives命令修改默认版本,或者修改/etc/alternatives/java连接文件指向要设定的默认版本的路径便可;
一、从官网下载tomcat二进制安装包(http://tomcat.apache.org/)
wget http://mirrors.tuna.tsinghua....
tar xf apache-tomcat-8.5.11.tar.gz -C /usr/local/
查看解压后的目录;
ll /usr/local/ | grep tomcat
二、为方便管理,建立软连接;
ln -s /usr/local/apache-tomcat-8.5.11/ /usr/local/tomcat
三、建立环境配置脚本;
vim /etc/profile.d/tomcat.sh
赋予执行权限;
chmod +x /etc/profile.d/tomcat.sh
加载环境配置;
source /etc/profile.d/tomcat.sh
四、启动tomcat
/usr/local/tomcat/bin/catalina.sh start 或 #catalina.sh start
查看tomcat是否正常启动
ss –tnl
五、测试本地8080端口是否正常监听
curl -I 127.0.0.1:8080
六、经过浏览器访问测试(需指定8080端口),注意selinux与iptables策略;
到此tomcat安装成功;
一、Tomcat组件
Tomcat自己由一系列可配置的组件构成,其核心组件是Servlet容器组件,即运行在服务器上的小插件。每一个tomcat组件在server.xml文件中对应一种配置元素:
每个组件都由一个Java"类"实现,这些组件大致能够分为如下几个类型:
顶级组件:Server;
服务类组件:Service;
链接器组件:http,https,ajp;
容器类组件:Engine,Host,Context;
嵌套类组件:valve,logger,realm,loader,manger,. . . ;
集群类组件:listener,cluster,. . . ;
二、tomcat目录结构
bin:脚本及启动时用到的类
conf:配置文件目录
lib:库文件,java库,jar
logs:日志文件目录
temp:临时文件目录
webapps:webapps的默认目录
work:工做目录
若是为rpm包安装:
配置文件目录:/etc/tomcat
webapps存放位置:/var/lib/tomcat/webapps
环境配置文件:/etc/sysconfig/tomcat
三、tomcat的主要配置文件;
serverxml.xml:主要配置文件
web.xml每一个webapp只有"部署"后才能被访问,它的部署方式一般由web.xml进行定义,其存放位置为WEB-INF/目录中,此文件为全部的webapp提供默认配置;
context.xml:每一个web均可以专用的配置文件,它一般由专用的配置文件context.xml来定义,其存放位置为WEB-INF/目录中,此文件为全部的webapp提供默认配置;
tomcat-users.xml:用户认证的帐号和密码文件;
catalina.policy:当使用-security选项启动tomcat时,会附加加载该安全配置文件,用于为tomcat设置安全策略;
catalima.properties:Java属性的定义文件,因为设定类加载器路径,以及一些与JVM调优相关参数;
logging.properties:日志系统相关的配置;
四、catalina.sh脚本参数详解;
catalina.sh –help
一、JSP WebAPP的组织结构
/:webapps的根目录 index.jsp:主页; WEB-INF/:当前webapp的私有资源路径,一般用于存储当前的webapp的web.xml和context.xml配置文件; META-INF/:相似于WEB-INF/; classes/:类文件,当前webapp所提供的类; lib/:库文件,当前webapp所提供的库文件,被打包为jar;
二、webapp归档格式:
经常使用的归档格式有4种:*.war(webapp)、*.jar(EJB的类打包文件)、*.rar(资源适配器类打包文件)、*.ear(企业级webapp);若是使用的是*.war时,默认会自动展开;
三、部署(deploy)webapp的相关操做
eploy:将webapp的源文件放置于目标目录(网页程序文件存放目录),配置tomcat服务器可以基于web.xml和context.xml文件中定义的路径来访问此webapp,将其特有的类和依赖的类经过class loader装载至JVM; 部署方式分为自动部署(auto deploy)和手动部署两种方式: 自动部署只需将webapp展开到tomcat/下的webapps/目录便可; 手动部署又分为冷部署和热部署:冷部署,及把webapp复制到指定的位置,然后才启动tomcat;热部署,则是在不中止tomcat的前提下进行部署,须要借助于manager、ant脚本、tcd(tomcat client deployer)等部署工具,tcd可用于远程部署; undeploy:反部署,中止webapp,并将webapp从tomcat实例上卸载; start:启动处于中止状态的webapp; stop:中止webapp,再也不向用户提供服务,其类依然在jvm上; redeploy:从新部署;
四、简单冷部署一测试类应用:
mkdir -pv /usr/local/tomcat/webapps/test/{classes,lib,WEB-INF}
建立文件/usr/local/tomcat/webapps/test/index.jsp内容以下:
<%@ page language="java" %> <%@ page import="java.util.*" %> <html> <head> <title>Test Page</title> </head> <body> <% out.println("hello world"); %> </body> </html>
调试测试页面:
curl 127.0.0.1:8080/test/index.jsp
能够看出,响应内容为编译后的页面代码;
一、顶层组件Server
Server表明tomcat instance(实例),即表现出的一个Java进程;监听在8005端口上,只接收"SHUTDOWN"。各server监听的端口不能相同,所以,在一物理主机启动多个实例时,须要修改其监听端口为不一样的端口; 【经常使用属性】 Adderss:监听shutdown命令的地址,默认为localhost; port:监听shutdown命令的端口,默认为8005。设置为-1,则禁止经过端口关闭Tomcat; shutdown:设置基于端口关闭Tomcat所需的字符串参数,默认为"SHUTDOWN"
二、服务类组件Service
Service用于建一个或多个Connector(链接器组件)关联至一个Engine组件;
三、链接器组件Connector
Connector负责接收请求,常见的有三种类http、https、ajp; 进入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:接收http请求的端口,默认8080; protocol:使用协议,默认HTTP/1.1 redirectPort:接收https请求的端口,默认8443; connectionTimeout:每一个请求最长链接时间,单位毫秒,默认20000; address:监听的IP地址;默认为本机全部可用地址; maxThreads:最大并发链接数,默认为150; enableLookups:是否启用DNS查询功能; acceptCount:等待队列的最大长度; secure:安全设置 sslProtocol:SSL协议
四、容器类组件Engine
Engine组件:Servlet实例,即servlet引擎,每一个Servlet只能包含一个Engine,其内部能够一个或多个host组件来定义站点;一般须要经过defaultHost来定义默认的虚拟主机; 【经常使用属性】: name:Engine名称 defaultHost:默认Host jvmRoute:Tomcat集群节点路由标示,用于区分不一样tomcat;
五、容器类组件Host
Host组件位于engine内部用于接收请求并进行相应处理的主机或虚拟主机,示例: <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> </Host> 【经常使用属性】: appBase:此Host的webapps的默认存放目录,指存放非归档的web应用程序的目录或归档的WAR文件目录路径;可使用基于$CATALINA_BASE变量所定义的路径的相对路径; autoDeploy:在Tomcat处于运行状态时,将某webapp放置于appBase所定义的目录中时,是否自动将其部署至tomcat; startStopThreads:线程池内的线程数量 示例: <Host name="tc1.magedu.com" appBase="/appdata/webapps" unpackWARs="true" autoDeploy="true"> </Host> 简单示例:
# mkdir -pv /appdata/webapps # mkdir -pv /appdata/webapps/ROOT/{lib,classes,WEB-INF} # vim /usr/local/tomcat/webapps/ROOT/index.jsp 建立一个测试页测试便可(参照第四章节,第4小节);
六、容器类组件Context
每一个Context表明一个运行在虚拟主机上的Web应用,一个Host上能够有多个Context; 【经常使用属性】 path:该Web项目的URL入口;path设置为"",输入http://localhost:8080便可访问Webapp;path设置为"/test",输入http://localhost:8080/test才能访问Webapp docBas:webapps的路径,相对或绝对路径均可以; reloadable:自动部署配置,设置为true时,当Web项目的/WEB-INF/classes/和/WEB-INF/lib发生变化时,tomcat会自动从新部署Web项目。reloadable默认值为false。 示例:
<Context path="/PATH" docBase="/PATH/TO/SOMEDIR" reloadable=""/>
七、嵌套类组件Valve
Valve组件经常使用于Tomcat的日志、权限等控制,可嵌在Engine、Host、Context内; 【经常使用属性】 className: 定义访问日志:org.apache.catalina.valves.AccessLogValve 定义访问控制:org.apache.catalina.valves.RemoteAddrValve、org.apache.catalina.valves.RemoteHostValve 【日志配置】 className:必须为org.apache.catalina.valves.AccessLogValve directory:日志文件目录,默认为logs(相对于$CATALINA_HOME); prefix:日志前缀,默认为localhost_access_log; suffix:日志后缀,默认为.txt; pattern:日志记录格式;具体见后面附表; 示例:
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> 【基于IP访问控制】 className:必须为org.apache.catalina.valves.RemoteAddrValve allow:容许名单;匹配模式:能够基于IP、IP段,IP分隔符"."须要加"\"转义,可用".*"通配 deny:拒绝名单;匹配模式同allow; 示例:
<Valve className="org.apache.catalina.valves.RemoteAddrValve" deny="172.16.0..*"/>