Tomcat体系架构深入理解(3)

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属性即可,点击按钮也会出现提示画面

wKioL1kATfGitcCAAAErfkcZtq8898.png

wKiom1kATfHhDN1fAABrTPn7pCk054.png

修改内容为: 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

wKioL1kATgjSkWPiAADHO40ZzBk265.png

此时在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 &quot;%r&quot; %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

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/19cd3b0ad42b02b0df859ea128ccac41.html