3、tomcat常用组件
每个组件几乎都是通过特有的类来实现,而且有的组件还不止一种实现方式
Server:tomcat实例,即运行的一个jvm进程;监听于8005端口接收“SHUTDOWN”。各server监听的端口不能相同,因此,一个物理主机上启动多个server实例应该使用不同的端口;
service:用于实现将一个或多个connector关联至一个engine;
connector组件:
进入tomcat的请求可分为两类: tomcat做为独立的应用程序服务器:standalone,此时,请求将来自于浏览器; http, https tomcat做为应用程序服务器:请求将来自于前面反代主机; httpd: http, https, ajp nginx: http, https 属性: address:监听的IP地址; maxThreads:最大并发连接数,默认为150; port:监听的端口; protocol:连接器使用的协议,一般为HTTP/1.1或AJP/1.3; redirecPort: connectionTimeout:连接的超时时长,单位为毫秒,默认为60000; enableLookups: acceptCount:定义等待队列的长度; scheme: debug: secure: clinetAuth: sslProtocol: Engine:Servlet的一个实例,即servlet引擎,其内部可以有一个或多个Host组件来定义站点;通常需要通过defaultHost的属性定义默认虚拟主机; 属性: name= defaultHost= jvmRoute=Host组件:
位于Engine容器中用于接收请求并进行相应处理的主机或虚拟主机
常用属性说明: 1) appBase:此Host的webapps目录,即存放非归档的web应用程序的目录或归档后的WAR文件的目录路径;可以使用基于$CATALINA_HOME的相对路径; 2) autoDeploy:在Tomcat处于运行状态时放置于appBase目录中的应用程序文件是否自动进行deploy;默认为true; 3) unpackWars:在启用此webapps时是否对WAR格式的归档文件先进行展开;默认为true;
示例: - 服务器端 修改server.xml,添加Host主机 ~]# cd /usr/local/tomcat/conf/ conf]# vim server.xml <Host name="node2" appBase="/data/webapps" unpackWARs="true" autoDeploy="true"> </Host> conf]# mkdir -pv /data/webapps/ROOT mkdir: 已创建目录 "/data" mkdir: 已创建目录 "/data/webapps" mkdir: 已创建目录 "/data/webapps/ROOT" conf]# cp ../webapps/myapp/index.jsp /data/webapps/ROOT/ conf]# mkdir /data/webapps/ROOT/{classes,lib,WEB-INF,META-INF} 修改index.jsp内容,方便后续辨认是哪个主机 conf]# vim /data/webapps/ROOT/index.jsp <%@ page language="java" %> <%@ page import="java.util.*" %> <html> <head> <title>JSP Test Page</title> </head> <body> <% out.println("hello world from /data/webapps"); %> </body> </html> catalina重启 catalina.sh stop catalina.sh configtest catalina.sh start -客户端 首先要保证客户端可以解析node这个主机 ~]# ping node2 PING node2 (192.168.150.138) 56(84) bytes of data. 64 bytes from node2 (192.168.150.138): icmp_seq=1 ttl=64 time=1.69 ms 访问测试: ~]# curl :8080 此时访问的是node2的目录 <html> <head> <title>JSP Test Page</title> </head> <body> hello world from /data/webapps </body> </html> [root@localhost ~]# curl :8080 访问ip时还是访问原目录 <!DOCTYPE html> <html lang="en"> <head> <title>Apache Tomcat/7.0.55</title> <link href="favicon.ico" rel="icon" type="image/x-icon" /> <link href="favicon.ico" rel="shortcut icon" type="image/x-icon" /> <link href="tomcat.css" rel="stylesheet" type="text/css" /> </head>tomcat自带Host Manager配置
配置方法和Manager App相同,我只要在刚才manager app配置中添加Host Manager属性即可,点击按钮也会出现提示画面 修改内容为: conf]# vim tomcat-users.xml <tomcat-users> <role rolename="manager-gui"/> <role rolename="admin-gui"/> <user username="tomcat" password="tomcat" roles="manager-gui,admin-gui"/> 修改后重启catalina catalina.sh stop catalina.sh configtest catalina.sh start此时在Host Manager界面可以看到我刚才添加的HOST主机
Context组件:
示例: - 服务器端 conf]# vim server.xml 在原Host内容中添加Context内容 <Host name="node2" appBase="/data/webapps" unpackWARs="true" autoDeploy="true"> <Context path="/test" docBase="testapp" reloadable="true"> </Context> </Host> 创建testapp测试页面 conf]# cp /data/webapps/ROOT/ /data/webapps/testapp -r conf]# vim /data/webapps/testapp/index.jsp <%@ page language="java" %> <%@ page import="java.util.*" %> <html> <head> <title>JSP Test Page for Context</title> </head> <body> <% out.println("hello world from /data/webapps/testapp"); %> </body> </html> catalina重启 catalina.sh stop catalina.sh configtest catalina.sh start -客户端访问测试: 访问node2 [root@localhost conf]# curl :8080 <html> <head> <title>JSP Test Page</title> </head> <body> hello world from /data/webapps </body> </html> 访问Conext目录 [root@localhost conf]# curl :8080/test/ <html> <head> <title>JSP Test Page for Context</title> </head> <body> hello world from /data/webapps/testapp </body> </html>Value组件:
示例: 继续在刚才的测试示例中添加Value组件: - 服务器端 制定日志格式,设定testapp的访问控制(192.168.150.139为客户端主机) conf]# vim server.xml <Host name="node2" appBase="/data/webapps" unpackWARs="true" autoDeploy="true"> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="node2_access_log." suffix=".log" pattern="%h %l %u %t "%r" %s %b" /> <Context path="/test" docBase="testapp" reloadable="true"> <Valve className="org.apache.catalina.valves.RemoteAddrValve" deny="192\.168\.150\.139" /> </Context> </Host> 重启catalina - 客户端访问 conf]# curl :8080 访问node2是正常的 <html> <head> <title>JSP Test Page</title> </head> <body> hello world from /data/webapps </body> </html>conf]# curl :8080/test/ 访问test被forbidden
HTTP Status 403 -type Status report
message
description Access to the specified resource has been forbidden.
Apache Tomcat/7.0.55 - 服务器端日志 [root@localhost logs]# pwd /usr/local/tomcat/logs [root@localhost logs]# ls catalina.2017-04-26.log localhost.2017-04-26.log node2_access_log.2017-04-26.log catalina.out localhost_access_log.2017-04-26.txt host-manager.2017-04-26.log manager.2017-04-26.log logs]# cat node2_access_log.2017-04-26.log 192.168.150.139 - - [26/Apr/2017:15:03:37 +0800] "GET / HTTP/1.1" 200 116 192.168.150.139 - - [26/Apr/2017:15:03:50 +0800] "GET /test/ HTTP/1.1" 403 961