准备工作
- java 环境变量(tomcat8.5 需要jdk1.5)
- 下载tomcat并上传到服务器(https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.41/bin/apache-tomcat-8.5.41.tar.gz)
安装
- 解压tomcat
tar zxvf apache-tomcat-8.5.41.tar.gz
- 启动tomcat
解压后tomcat文件在apache-tomcat-8.5.41目录下。tomcat目录结构如下:
├─ bin // 命令:sh,exe,bat等
│ ├─startup.sh // 启动命令
│ ├─shutdown.sh //管理命令
├─ config //配置文件
│ ├─context.xml //权限和许可证限制
│ ├─server.xml //如何启动Tomcat
│ ├─web.xml //web容器配置
├─ lib //tomcat 依赖jar
├─ logs //日志文件
├─ temp //
├─ webapps //存放web应用
│ ├─docs //tomcat文档项目
│ ├─example //示例项目
│ ├─host-manager //
│ ├─manager // 管理项目
├─ work
....
将war导入到webapps目录下,执行命令:
1. cd bin //进入bin目录
2. sh startup.sh //执行启动命令
项目将webapps的war和已经存在项目(docs,example)等一起启动;在无其他配置的情况下,根据ip+项目名访问项目。如:
- docs 访问路径 http://localhost:8080/docs/index.html
- manager 访问路径 http://localhost:8080/manager/html
- test.war 访问路径 http://localhost:8080/test/…
http://localhost:8080 默认跳转到manager项目
配置
server.xml
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
protocol :
HTTP/1.1协议负责建立HTTP连接
AJP/1.3 协议负责和其他HTTP服务器建立连接,比如tomcat和apache集成时需要用到这个连接器(搭建集群等)。
协议有三种实现方式:
bio:HTTP1.1 基于JAVA的HTTP/1.1连接器,效率最低
nio:org.apache.coyote.http11.Http11NioProtocol, 非阻塞i/o操作。使用少了线程处理大量求情
apr:Apache Portable Runtime/Apache可移植运行时
redirectPort:连接器不支持SSL请求,如收到SSL请求,Catalina容器将会自动重定向指定的端口号
<Engine name="Catalina" defaultHost="localhost">
请求入口,将请求交给匹配的Host主机匹配,默认为localhost
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
每个的元素定义了一个虚拟主机.它包含了一个或多个Web应用
<Context path="imgs" docBase="../myapps/imgs" debug="0" reloadable="false"/>
对应于一个Web App
Tomcat Server处理一个http请求的过程
请求为:http://localhost:8080/wsota/wsota_index.jsp
- 请求被发送到本机端口8080,被在那里侦听的Coyote HTTP/1.1 Connector获得
- Connector把该请求交给它所在的Service的Engine来处理,并等待来自Engine的回应
- Engine获得请求localhost/wsota/wsota_index.jsp,匹配它所拥有的所有虚拟主机Host
- Engine匹配到名为localhost的Host(即使匹配不到也把请求交给该Host处理,因为该Host被定义为该Engine的默认主机)
- localhost Host获得请求/wsota/wsota_index.jsp,匹配它所拥有的所有Context
- Host匹配到路径为/wsota的Context(如果匹配不到就把该请求交给路径名为""的Context去处理)
- path="/wsota"的Context获得请求/wsota_index.jsp,在它的mapping table中寻找对应的servlet
- 后续过程省略…
tomcat-user.xml
给tomcat角色设置账号和密码,示例如下:
<role rolename ="manager-gui"/>
<user username ="tomcat" password ="tomcat" roles ="manager-gui"/>
- manager-gui
允许访问html接口(即URL路径为/manager/html/*) - manager-script
允许访问纯文本接口(即URL路径为/manager/text/*) - manager-jmx
允许访问JMX代理接口(即URL路径为/manager/jmxproxy/*) - manager-status
允许访问Tomcat只读状态页面(即URL路径为/manager/status/*)
web.xml
配置servlet 规范
图片服务器配置
在webapps同级目录新建文件夹myapps,在myappss文件夹下新建imgs文件夹,host配置如下:
<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 "%r" %s %b" />
<Context path="imgs" docBase="../myapps/imgs" debug="0" reloadable="false"/>
</Host>
使用manager管理项目
默认情况下,如果想新增项目,需要将war导入到webapps目录下,然后关闭,启动tomcat。这样存在很多问题:
- tomcat需要重启
- tomcat下所有项目都需要重启,每次启动时会影响其他所有项目
为提高效率我们可以使用tomcat自带的manager对项目进行管理。
配置用户(tomcat-user.xml)
tomcat默认没有配置任何用户,在tomcat-user中添加以下代码:
<!--username password 自定义-->
<role rolename ="manager-gui"/>
<user username ="tomcat" password ="tomcat" roles ="manager-gui"/>
ip权限配置
tomcat manager默认只能在127下访问,这样有一定安全性,但也带来了不便,如果需要配置允许请求的ip,可以在context.xml中配置
系统默认配置
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
允许任意ip
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|\d+\.\d+\.\d+\.\d+" />
管理项目
http://localhost:8080/manager/html
首次进行需要输入账号密码,验证成功后看到tomcat程序列表。
按钮说明:
- stop 停止项目和
- reload 重新启动项目
- undeploy 卸载项目