在许多生产环境中,具备部署新Web应用程序或取消部署现有Web应用程序的功能很是有用,而无需关闭并从新启动整个容器。另外,即便您还没有声明它reloadable
在Tomcat服务器配置文件中,也能够请求现有应用程序从新加载自身。html
为了支持这些功能,Tomcat包含一个Web应用程序(默认状况下安装在上下文路径中/manager
),该应用程序支持如下功能:java
/WEB-INF/classes
或更改内容/WEB-INF/lib
。<ResourceLink>
嵌套在<Context>
部署描述中的元素的部署工具。默认的Tomcat安装包括Manager。要将Manager Web应用程序的实例添加Context
到新主机,请在manager.xml
文件$CATALINA_BASE/conf/[enginename]/[hostname]
夹中安装 上下文配置文件 。这里是一个例子:web
<Context privileged="true" antiResourceLocking="false" docBase="${catalina.home}/webapps/manager"> <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127\.0\.0\.1" /> </Context>
若是您将Tomcat配置为支持多个虚拟主机(网站),则须要为每一个虚拟主机配置一个管理器。sql
有三种方法可使用Manager Web应用程序。数据库
localhost
用您的网站主机名替换: http://localhost:8080/manager/html
。下面的描述使用变量名$ CATALINA_BASE来引用基本目录,大多数相对路径被解析。若是您还没有经过设置CATALINA_BASE目录将Tomcat配置为多个实例,则$ CATALINA_BASE将被设置为$ CATALINA_HOME(您已安装Tomcat的目录)的值。apache
使用容许互联网上的任何人执行服务器上的Manager应用程序的默认设置来运送Tomcat是至关不安全的。所以,Manager应用程序随附的要求是,任未尝试使用它的用户都必须使用具备与其关联的manager-xxx角色之一(角色名称取决于所需功能)的用户名和密码进行身份验证。此外,$CATALINA_BASE/conf/tomcat-users.xml
分配给这些角色的默认用户文件()中没有用户名。所以,默认状况下彻底禁用对Manager应用程序的访问。浏览器
您能够web.xml
在Manager Web应用程序的文件中找到角色名称。可用的角色是:tomcat
HTML接口受到CSRF(跨站点请求伪造)攻击的保护,但文本和JMX接口没法受到保护。这意味着容许访问文本和JMX界面的用户在使用Web浏览器访问Manager应用程序时必须谨慎行事。为了保持CSRF保护:安全
请注意,JMX代理接口其实是Tomcat的低级别根类管理接口。若是他知道要调用哪些命令,能够作不少事情。启用manager-jmx角色时应谨慎 。服务器
要容许访问Manager Web应用程序,您必须建立一个新的用户名/密码组合,并将其中一个manager-xxx角色与其关联 ,或者将manager-xxx角色添加 到某个现有用户名/密码组合。因为本文档的大部分描述了使用文本界面,本示例将使用角色名称管理器脚本。具体如何配置用户名/密码取决于 您使用的Realm实施方式:
$CATALINA_BASE/conf/server.xml
。MemoryUserDatabase和MemoryRealm都默认读取一个XML格式的文件 $CATALINA_BASE/conf/tomcat-users.xml
,这个文件能够用任何文本编辑器编辑。该文件包含<user>
每一个用户的XML ,可能以下所示: <user username="craigmcc" password="secret" roles="standard,manager-script" />它定义了这我的用来登陆的用户名和密码,以及他或她所关联的角色名称。您能够将manager-script角色添加到
roles
一个或多个现有用户的逗号分隔 属性,和/或使用该指定角色建立新用户。当您第一次尝试发布下一节中介绍的管理员命令之一时,您将面临使用BASIC认证登陆的挑战。您输入的用户名和密码可有可无,只要它们标识拥有角色管理器脚本的用户数据库中的有效用户便可。
除了密码限制以外,还能够经过添加或来限制远程IP地址或主机对Manager Web应用程序的访问权限。详情请参阅阀门文档 。如下是经过IP地址限制对本地主机的访问的示例:RemoteAddrValve
RemoteHostValve
<Context privileged="true"> <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127\.0\.0\.1"/> </Context>
Manager Web应用程序的用户友好HTML界面位于
http://{host}:{port}/manager/html
如上所述,您须要 容许manager-gui角色访问它。有一个单独的文档提供了有关此界面的帮助。看到:
HTML接口受到CSRF(跨站点请求伪造)攻击的保护。每次访问HTML页面都会生成一个随机令牌,该令牌存储在会话中并包含在页面上的全部连接中。若是您的下一个操做没有正确的令牌值,则操做将被拒绝。若是令牌已过时,则能够从管理器的主页面或列表应用程序页面从新开始 。
Manager应用程序知道如何处理的全部命令都在单个请求URI中指定,以下所示:
http://{host}:{port}/manager/text/{command}?{parameters}
其中{host}
和{port}
表示是Tomcat运行的主机名和端口号,{command}
表示要执行经理命令, {parameters}
表明特定于该命令的查询参数。在下面的插图中,为您的安装适当地自定义主机和端口。
这些命令一般由HTTP GET请求执行。该 /deploy
命令具备由HTTP PUT请求执行的表单。
大多数命令接受一个或多个如下查询参数:
/deploy
命令,而且是于该命令的惟一可接受的格式。每一个命令都将返回一个text/plain
格式的响应(即纯HTML没有HTML标记),令人和程序均可以轻松读取)。响应的第一行将以OK
或者开始 FAIL
,指示请求的命令是否成功。在失败的状况下,第一行的其他部分将包含遇到的问题的描述。某些命令包含以下所述的其余行信息。
国际化注意事项 - Manager应用程序在资源包中查找其消息字符串,所以可能为您的平台翻译了字符串。如下示例显示了这些消息的英文版本。
http://localhost:8080/manager/text/deploy?path=/foo
上传在此HTTP PUT请求中指定为请求数据的Web应用程序存档(WAR)文件,将其安装到appBase
咱们对应的虚拟主机的目录中,而后启动,为appBase
从指定路径添加的WAR文件派生名称。稍后可使用该/undeploy
命令取消部署该应用程序(并删除相应的WAR文件)。
该命令由HTTP PUT请求执行。
.WAR文件可能包含Tomcat特定的部署配置,其中包含一个Context配置XML文件 /META-INF/context.xml
。
网址参数包括:
update
:若是设置为true,则任何现有更新都将首先取消部署。默认值设置为false。tag
:指定标签名称,这容许将部署的webapp与标签或标签相关联。若是Web应用程序未部署,则能够稍后在仅使用标记的状况下从新部署。注 - 该命令与命令的逻辑相反/undeploy
。
若是安装和启动成功,您将收到以下响应:
OK - Deployed application at context path /foo
不然,响应将以开始FAIL
并包含错误消息。问题的可能缘由包括:
全部当前运行的Web应用程序的上下文路径必须是惟一的。所以,您必须使用此上下文路径取消部署现有的Web应用程序,或者为新的Web应用程序选择不一样的上下文路径。该update
参数能够指定为URL上的参数,其值为true
避免此错误。在这种状况下,将在执行部署以前在现有应用程序上执行取消部署。
尝试启动新的Web应用程序时遇到异常。查看Tomcat日志以获取详细信息,但可能的解释包括解析/WEB-INF/web.xml
文件时遇到的问题,或初始化应用程序事件侦听器和过滤器时遇到的类丢失。
部署并启动一个新的Web应用程序,并附加到指定的上下文中 path
(不能由任何其余Web应用程序使用)。该命令与命令的逻辑相反/undeploy
。
该命令由HTTP GET请求执行。可使用部署命令的多种不一样方式。
http://localhost:8080/manager/text/deploy?path=/footoo&tag=footag
这可用于部署之前部署的Web应用程序,该应用程序已使用该tag
属性进行了部署。请注意,Manager webapp的工做目录将包含先前部署的WAR; 删除它会致使部署失败。
部署位于Tomcat服务器上的Web应用程序目录或“.war”文件。若是path
指定no ,则路径和版本将从目录名称或war文件名称派生。该war
参数指定file:
目录或Web应用程序归档(WAR)文件的URL(包括方案)。在Javadocs页面上描述了引用WAR文件的URL的支持语法 java.net.JarURLConnection
。仅使用引用整个WAR文件的URL。
在此示例中,位于/path/to/foo
Tomcat服务器目录 中的Web应用程序部署为名为的Web应用程序上下文/footoo
。
http://localhost:8080/manager/text/deploy?path=/footoo&war=file:/path/to/foo
在本例中,/path/to/bar.war
Tomcat服务器上的“.war”文件被部署为名为的Web应用程序上下文 /bar
。请注意,没有path
参数,所以上下文路径默认为不带“.war”扩展名的Web应用程序归档文件的名称。
http://localhost:8080/manager/text/deploy?war=file:/path/to/bar.war
部署位于您的Host appBase目录中的Web应用程序目录或“.war”文件。路径和可选版本源自目录或war文件名。
在此示例中,位于 foo
Tomcat服务器的Host appBase目录中的子目录中的Web应用程序将部署为名为的Web应用程序上下文/foo
。请注意,使用的上下文路径是Web应用程序目录的名称。
http://localhost:8080/manager/text/deploy?war=foo
在这个例子中,bar.war
位于Tomcat服务器的Host appBase目录中的“.war”文件被部署为名为的Web应用程序上下文/bar
。
http://localhost:8080/manager/text/deploy?war=bar.war
若是Host deployXML标志设置为true,则可使用Context配置“.xml”文件和可选的“.war”文件或Web应用程序目录来部署Web应用程序。上下文path
使用上下文“.XML”配置文件部署Web应用程序时不被使用。
上下文配置“.xml”文件能够包含Web应用程序上下文的有效XML,就像它在Tomcat server.xml
配置文件中配置同样。这里是一个例子:
<Context path="/foobar" docBase="/path/to/application/foobar"> </Context>
当可选war
参数设置为Web应用程序“.war”文件或目录的URL时,它将覆盖上下文配置“.xml”文件中配置的任何docBase。
如下是使用Context配置“.xml”文件部署应用程序的示例。
http://localhost:8080/manager/text/deploy?config=file:/path/context.xml
如下是使用位于服务器上的Context配置“.xml”文件和Web应用程序“.war”文件部署应用程序的示例。
http://localhost:8080/manager/text/deploy ?config=file:/path/context.xml&war=file:/path/bar.war
若是主机配置了unpackWARs = true而且您部署了一个war文件,则该war将被解压到您的主机appBase目录中的一个目录中。
若是应用程序战争或目录安装在您的主机appBase目录中,而且主机配置了autoDeploy = true,或者上下文路径必须与不带“.war”扩展名的目录名或war文件名匹配。
为了确保不受信任的用户能够管理Web应用程序的安全性,能够将Host deployXML标志设置为false。这能够防止不受信任的用户使用配置XML文件部署Web应用程序,并防止他们部署位于其主机应用程序库外部的应用程序目录或“.war”文件。
若是安装和启动成功,您将收到以下响应:
OK - Deployed application at context path /foo
不然,响应将以开始FAIL
并包含错误消息。问题的可能缘由包括:
全部当前运行的Web应用程序的上下文路径必须是惟一的。所以,您必须使用此上下文路径取消部署现有的Web应用程序,或者为新的Web应用程序选择不一样的上下文路径。该update
参数能够指定为URL上的参数,其值为true
避免此错误。在这种状况下,将在执行部署以前在现有应用程序上执行取消部署。
war
参数指定的URL 必须标识此服务器上包含Web应用程序的“解包”版本的目录,或包含此应用程序的Web应用程序存档(WAR)文件的绝对URL。更正war
参数指定的值。
尝试启动新的Web应用程序时遇到异常。查看Tomcat日志以获取详细信息,但可能的解释包括解析/WEB-INF/web.xml
文件时遇到的问题,或初始化应用程序事件侦听器和过滤器时遇到的类丢失。
您指定的目录或Web应用程序的URL无效。这些URL必须file:
以WAR 开头,而且URL文件必须以“.war”结尾。
上下文路径必须以斜杠字符开头。要引用ROOT Web应用程序,请使用“/”。
若是应用程序战争或目录安装在主机appBase目录中,而且主机配置了autoDeploy = true,则上下文路径必须与不带“.war”扩展名的目录名称或war文件名称匹配。
若是Host deployXML标志设置为false,则若是尝试在Host AppBase目录以外部署Web应用程序目录或“.war”文件,则会发生此错误。
http://localhost:8080/manager/text/list
列出全部当前部署的Web应用程序的上下文路径,当前状态(running
或 stopped
)以及活动会话的数量。启动Tomcat后当即进行的典型响应可能以下所示:
OK - Listed applications for virtual host localhost /webdav:running:0:webdav /examples:running:0:examples /manager:running:0:manager /:running:0:ROOT /test:running:0:test##2 /test:running:0:test##1
http://localhost:8080/manager/text/reload?path=/examples
指示现有应用程序关闭并从新加载。若是Web应用程序上下文不可从新载入,而且已经更新了/WEB-INF/classes
目录中的类或属性文件,或者在目录中添加或更新了jar文件时,这会很是有用/WEB-INF/lib
。
若是此命令成功,您将看到以下的响应:
OK - Reloaded application at context path /examples
不然,响应将以开始FAIL
并包含错误消息。问题的可能缘由包括:
尝试从新启动Web应用程序时遇到异常。查看Tomcat日志以获取详细信息。
上下文路径必须以斜杠字符开头。要引用ROOT Web应用程序,请使用“/”。
您指定的上下文路径上没有部署的应用程序。
该path
参数是必需的。
目前,web.xml
当Web应用程序直接从WAR文件进行部署时,不支持应用程序从新加载(以获取对类或文件的更改 )。它仅适用于从解压目录中部署Web应用程序的状况。若是您正在使用WAR文件,那么应该undeploy
再次deploy
或者 deploy
经过update
参数使应用程序再次选择您的更改。
http://localhost:8080/manager/text/serverinfo
列出有关Tomcat版本,操做系统和JVM属性的信息。
若是发生错误,响应将从头开始FAIL
并包含错误消息。问题的可能缘由包括:
尝试枚举系统属性时遇到异常。查看Tomcat日志以获取详细信息。
http://localhost:8080/manager/text/resources[?type=xxxxx]
列出可用于上下文配置文件资源连接的全局JNDI资源。若是指定了type
请求参数,则该值必须是您感兴趣的资源类型的彻底限定Java类名称(例如,您将指定javax.sql.DataSource
获取全部可用JDBC数据源的名称)。若是您不指定type
请求参数,则会返回全部类型的资源。
根据type
请求参数是否被指定,正常响应的第一行将是:
OK - Listed global resources of all types
要么
OK - Listed global resources of type xxxxx
以后每一个资源一行。每行由由冒号字符(“:”)分隔的字段组成,以下所示:
global
属性中使用 <ResourceLink>
。若是发生错误,响应将从头开始FAIL
并包含错误消息。问题的可能缘由包括:
尝试枚举全局JNDI资源时遇到异常。查看Tomcat日志以获取详细信息。
您正在运行的Tomcat服务器已配置为不具备全局JNDI资源。
http://localhost:8080/manager/text/sessions?path=/examples
显示Web应用程序的默认会话超时以及落在其实际超时时间的一分钟范围内的当前活动会话的数量。例如,在从新启动Tomcat,而后在/examples
Web应用程序中执行一个JSP示例以后,您可能会获得以下所示的内容:
OK - Session information for application at context path /examples Default maximum session inactive interval 30 minutes <1 minutes: 1 sessions 1 - <2 minutes: 1 sessions
http://localhost:8080/manager/text/expire?path=/examples&idle=num
显示会话统计信息(如上述/sessions
命令)并使空闲时间超过num
几分钟的会话过时。要过时全部会话,请使用&idle=0
。
OK - Session information for application at context path /examples Default maximum session inactive interval 30 minutes 1 - <2 minutes: 1 sessions 3 - <4 minutes: 1 sessions >0 minutes: 2 sessions were expired
其实/sessions
和/expire
是相同的命令同义词。区别在于idle
参数的存在。
http://localhost:8080/manager/text/start?path=/examples
指示中止的应用程序从新启动,并使其本身再次可用。例如,若是应用程序所需的数据库暂时不可用,则中止和启动颇有用。中止依赖此数据库的Web应用程序一般会更好,而不是让用户不断遇到数据库异常。
若是此命令成功,您将看到以下的响应:
OK - Started application at context path /examples
不然,响应将以开始FAIL
并包含错误消息。问题的可能缘由包括:
尝试启动Web应用程序时遇到异常。查看Tomcat日志以获取详细信息。
上下文路径必须以斜杠字符开头。要引用ROOT Web应用程序,请使用“/”。
您指定的上下文路径上没有部署的应用程序。
该path
参数是必需的。
http://localhost:8080/manager/text/stop?path=/examples
指示现有应用程序使其不可用,但保留它的部署状态。在应用程序中止时进入的任何请求都将看到HTTP错误404,而且此应用程序将在列表应用程序命令中显示为“已中止”。
若是此命令成功,您将看到以下的响应:
OK - Stopped application at context path /examples
不然,响应将以开始FAIL
并包含错误消息。问题的可能缘由包括:
尝试中止Web应用程序时遇到异常。查看Tomcat日志以获取详细信息。
上下文路径必须以斜杠字符开头。要引用ROOT Web应用程序,请使用“/”。
您指定的上下文路径上没有部署的应用程序。
path
参数是必需的。http://localhost:8080/manager/text/undeploy?path=/examples
警告 - 该命令将删除appBase
该虚拟主机的目录内存在的任何Web应用程序工件(一般为“webapps”)。这将删除应用程序.WAR(若是有的话),从应用程序目录中以解压缩的形式部署或从.WAR扩展部署获得的应用程序目录,以及从$CATALINA_BASE/conf/[enginename]/[hostname]/
目录的XML上下文定义 。若是您只是想让应用程序中止服务,则应该使用该/stop
命令。
指示现有的应用程序正常关闭,并将其从Tomcat中移除(这也使得此上下文路径可供稍后重用)。另外,若是该文档根目录存在于appBase
该虚拟主机的目录(一般是“webapps”)中,则该目录将被删除。该命令与命令的逻辑相反 /deploy
。
若是此命令成功,您将看到以下的响应:
OK - Undeployed application at context path /examples
不然,响应将以开始FAIL
并包含错误消息。问题的可能缘由包括:
尝试取消部署Web应用程序时遇到异常。查看Tomcat日志以获取详细信息。
上下文路径必须以斜杠字符开头。要引用ROOT Web应用程序,请使用“/”。
没有您指定的名称的已部署应用程序。
path
参数是必需的。http://localhost:8080/manager/text/findleaks[?statusLine=[true|false]]
查找泄漏诊断触发完整的垃圾回收。在生产系统中应该很是当心地使用它。
查找泄漏诊断尝试识别在中止,从新加载或取消部署时致使内存泄漏的Web应用程序。结果应该始终使用分析器进行确认。诊断使用StandardHost实现提供的附加功能。若是使用不扩展StandardHost的自定义主机,它将不起做用。
记录显式触发Java代码的完整垃圾收集是不可靠的。此外,根据使用的JVM,能够选择禁用显式GC触发,例如-XX:+DisableExplicitGC
。若是您想确保诊断程序成功运行完整的GC,则须要使用GC日志记录,JConsole或相似工具进行检查。
若是此命令成功,您将看到以下的响应:
/leaking-webapp
若是您但愿查看响应中包含的状态行statusLine
,请将请求中的查询参数包含在 值中 true
。
中止,从新加载或取消部署的Web应用程序的每一个上下文路径,但以前运行的哪些类仍然加载到内存中,从而致使内存泄漏,将在新行中列出。若是应用程序已屡次从新加载,则可能会屡次列出。
若是该命令不成功,则响应将以 FAIL
包含错误消息的开始。
http://localhost:8080/manager/text/sslConnectorCiphers
SSL链接器/密码诊断程序列出了当前为每一个链接器配置的SSL / TLS密码。对于NIO和NIO2,列出了各个密码套件的名称。对于APR,返回SSLCipherSuite的值。
答案看起来像这样:
OK - Connector / SSL Cipher information Connector[HTTP/1.1-8080] SSL is not enabled for this connector Connector[HTTP/1.1-8443] TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA TLS_DHE_RSA_WITH_AES_128_CBC_SHA TLS_ECDH_RSA_WITH_AES_128_CBC_SHA TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA ...
http://localhost:8080/manager/text/threaddump
编写一个JVM线程转储。
答案看起来像这样:
OK - JVM thread dump 2014-12-08 07:24:40.080 Full thread dump Java HotSpot(TM) Client VM (25.25-b02 mixed mode): "http-nio-8080-exec-2" Id=26 cpu=46800300 ns usr=46800300 ns blocked 0 for -1 ms waited 0 for -1 ms java.lang.Thread.State: RUNNABLE locks java.util.concurrent.ThreadPoolExecutor$Worker@1738ad4 at sun.management.ThreadImpl.dumpThreads0(Native Method) at sun.management.ThreadImpl.dumpAllThreads(ThreadImpl.java:446) at org.apache.tomcat.util.Diagnostics.getThreadDump(Diagnostics.java:440) at org.apache.tomcat.util.Diagnostics.getThreadDump(Diagnostics.java:409) at org.apache.catalina.manager.ManagerServlet.threadDump(ManagerServlet.java:557) at org.apache.catalina.manager.ManagerServlet.doGet(ManagerServlet.java:371) at javax.servlet.http.HttpServlet.service(HttpServlet.java:618) at javax.servlet.http.HttpServlet.service(HttpServlet.java:725) ...
http://localhost:8080/manager/text/vminfo
编写一些关于Java虚拟机的诊断信息。
答案看起来像这样:
OK - VM info 2014-12-08 07:27:32.578 Runtime information: vmName: Java HotSpot(TM) Client VM vmVersion: 25.25-b02 vmVendor: Oracle Corporation specName: Java Virtual Machine Specification specVersion: 1.8 specVendor: Oracle Corporation managementSpecVersion: 1.2 name: ... startTime: 1418012458849 uptime: 393855 isBootClassPathSupported: true OS information: ...
http://localhost:8080/manager/text/save
若是未指定任何参数,则此命令将服务器的当前配置保存到server.xml。若是须要,现有文件将被重命名为备份。
若是使用与path
部署的Web应用程序的路径相匹配的参数指定,则该Web应用程序的配置将被保存到xmlBase
当前主机中适当命名的context.xml文件中。
要使用该命令,StoreConfig MBean必须存在。一般这是使用StoreConfigLifecycleListener配置的。
若是该命令不成功,则响应将以 FAIL
包含错误消息的开始。
从如下连接能够查看关于服务器的状态信息。任何一个manager-xxx角色都容许访问此页面。
http://localhost:8080/manager/status http://localhost:8080/manager/status/all
以HTML格式显示服务器状态信息。
http://localhost:8080/manager/status?XML=true http://localhost:8080/manager/status/all?XML=true
以XML格式显示服务器状态信息。
首先,您有服务器和JVM版本号,JVM提供程序,操做系统名称和编号,而后是架构类型。
其次,有关于JVM的内存使用状况的信息。
而后,有关于Tomcat AJP和HTTP链接器的信息。他们都有相同的信息:
线程信息:最大线程数,最小和最大备用线程数,当前线程数和当前线程繁忙。
请求信息:最大处理时间和处理时间,请求和错误计数,接收和发送的字节数。
显示阶段,时间,字节发送,字节接收,客户端,VHost和请求的表格。表中列出了全部现有的线程。如下是可能的线程阶段列表:
“解析和准备请求”:正在解析请求标头或正在进行读取请求正文(若是已指定传输编码)的必要准备。
“服务”:线程正在处理请求并生成响应。此阶段遵循“解析和准备请求”阶段,并在“完成”阶段以前。在这个阶段老是有至少一个线程(服务器状态页面)。
“完成”:请求处理结束。任何剩余的响应仍在输出缓冲区中发送到客户端。若是适合保持链接处于活动状态,或者“保持活动”不合适,则该阶段后面跟随“Keep-Alive”。
“Keep-Alive”:在客户端发送另外一个请求的状况下,线程保持链接对客户端开放。若是收到另外一个请求,下一阶段将是“解析和准备请求”。若是在保持活动超时以前没有收到请求,链接将被关闭,下一阶段将为“就绪”。
“就绪”:线程处于静止状态,可使用。
若是您使用的是/status/all
命令,则每一个部署的Web应用程序的其余信息都将可用。
JMX代理Servlet是一个轻量级代理,用于获取和设置tomcat内部。(或者任何经过MBean暴露的类)它的用法不是很是用户友好,可是UI对于集成命令行脚原本监视和更改tomcat的内部很是有用。你能够用代理作两件事:获取信息和设置信息。为了您真正理解JMX代理Servlet,您应该对JMX有一个大致的了解。若是你不知道JMX是什么,那么准备好会感到困惑。
这采起的形式是:
http://webserver/manager/jmxproxy/?qry=STUFF
STUFF
您但愿执行的JMX查询在哪里?例如,如下是您可能但愿运行的一些查询:
qry=*%3Atype%3DRequestProcessor%2C* --> type=RequestProcessor
这将找到全部能够处理请求并报告其状态的工做人员。qry=*%3Aj2eeType=Servlet%2c* --> j2eeType=Servlet
它返回全部加载的servlet。qry=Catalina%3Atype%3DEnvironment%2Cresourcetype%3DGlobal%2Cname%3DsimpleValue --> Catalina:type=Environment,resourcetype=Global,name=simpleValue
它以给定名称查找特定的MBean。您须要试验以真正理解其功能若是您不提供qry
参数,则将显示全部MBean。咱们建议您查看tomcat源代码并理解JMX规范,以更好地理解您可能运行的全部查询。
JXMProxyServlet还支持一个“get”命令,您可使用该命令来获取特定MBean属性的值。该get
命令的通常形式是:
http://webserver/manager/jmxproxy/?get=BEANNAME&att=MYATTRIBUTE&key=MYKEY
您必须提供如下参数:
get
:完整的bean名称att
:您想要获取的属性key
:(可选)成为CompositeData MBean属性的键若是一切顺利,那么它会说OK,不然会显示错误消息。例如,假设咱们但愿获取当前的堆内存数据:
http://webserver/manager/jmxproxy/?get=java.lang:type=Memory&att=HeapMemoryUsage
或者,若是您只须要“已用”键:
http://webserver/manager/jmxproxy/ ?get=java.lang:type=Memory&att=HeapMemoryUsage&key=used
既然您能够查询MBean,那么就可使用Tomcat的内部工具了!set命令的通常形式是:
http://webserver/manager/jmxproxy/?set=BEANNAME&att=MYATTRIBUTE&val=NEWVALUE
因此你须要提供3个请求参数:
set
:完整的bean名称att
:你想改变的属性val
:新的价值若是一切正常,那么它会说OK,不然会显示错误消息。例如,让咱们说咱们但愿打开调试的动态 ErrorReportValve
。如下将把调试设置为10。
http://localhost:8080/manager/jmxproxy/ ?set=Catalina%3Atype%3DValve%2Cname%3DErrorReportValve%2Chost%3Dlocalhost &att=debug&val=10
个人结果是(YMMV):
Result: ok
这是我看到的,若是我经过了一个很差的价值。这里是我使用的URL,我尝试设置调试等于'牛':
http://localhost:8080/manager/jmxproxy/ ?set=Catalina%3Atype%3DValve%2Cname%3DErrorReportValve%2Chost%3Dlocalhost &att=debug&val=cow
当我尝试时,个人结果是
Error: java.lang.NumberFormatException: For input string: "cow"
该invoke
命令容许在MBean上调用方法。该命令的通常形式是:
http://webserver/manager/jmxproxy/ ?invoke=BEANNAME&op=METHODNAME&ps=COMMASEPARATEDPARAMETERS
例如,要调用Service的使用findConnectors()
方法 :
http://localhost:8080/manager/jmxproxy/ ?invoke=Catalina%3Atype%3DService&op=findConnectors&ps=
如上文所述,除了可以经过HTTP请求执行管理器命令外,Tomcat还包括一组适用于Ant(版本1.4或更高版本)构建工具的任务定义。为了使用这些命令,您必须执行如下设置操做:
$ANT_HOME/bin
目录添加到您的PATH
环境变量。manager-script
角色的Tomcat用户数据库中至少配置一个用户名/密码组合。要在Ant中使用自定义任务,必须首先使用<import>
元素声明它们 。所以,你的build.xml
文件可能看起来像这样:
<project name="My Application" default="compile" basedir="."> <!-- Configure the directory into which the web application is built --> <property name="build" value="${basedir}/build"/> <!-- Configure the context path for this application --> <property name="path" value="/myapp"/> <!-- Configure properties to access the Manager application --> <property name="url" value="http://localhost:8080/manager/text"/> <property name="username" value="myusername"/> <property name="password" value="mypassword"/> <!-- Configure the path to the Tomcat installation --> <property name="catalina.home" value="/usr/local/apache-tomcat"/> <!-- Configure the custom Ant tasks for the Manager application --> <import file="${catalina.home}/bin/catalina-tasks.xml"/> <!-- Executable Targets --> <target name="compile" description="Compile web application"> <!-- ... construct web application in ${build} subdirectory, and generated a ${path}.war ... --> </target> <target name="deploy" description="Install web application" depends="compile"> <deploy url="${url}" username="${username}" password="${password}" path="${path}" war="file:${build}${path}.war"/> </target> <target name="reload" description="Reload web application" depends="compile"> <reload url="${url}" username="${username}" password="${password}" path="${path}"/> </target> <target name="undeploy" description="Remove web application"> <undeploy url="${url}" username="${username}" password="${password}" path="${path}"/> </target> </project>
注意:经过上述导入定义资源任务将覆盖Ant 1.7中添加的资源数据类型。若是您但愿使用资源数据类型,则须要使用Ant的名称空间支持进行修改, catalina-tasks.xml
以将Tomcat任务分配给其本身的名称空间。
如今,您能够执行命令ant deploy
来将应用程序部署到正在运行的Tomcat实例,或者ant reload
告诉Tomcat从新加载它。还要注意,该build.xml
文件中的大部分有趣值都被定义为可替换的属性,所以您能够从命令行覆盖它们的值。例如,您可能认为将真实管理员密码包含在build.xml
文件源代码中存在安全风险 。为了不这种状况,省略密码属性,并从命令行指定它:
ant -Dpassword=secret deploy
使用Ant版本1.6.2或更高版本,Catalina任务提供了在属性或外部文件中捕获其输出的选项。它们直接支持<redirector>
类型属性的如下子集 :
属性 | 描述 | 须要 |
---|---|---|
产量 | 要写入输出的文件的名称。若是错误流不是也被重定向到文件或属性,它将出如今这个输出中。 | 没有 |
错误 | 应将命令的标准错误重定向到的文件。 | 没有 |
LOGERROR | 当你但愿在Ant的日志中看到错误输出,并将输出重定向到文件/属性时,使用该属性。错误输出将不会包含在输出文件/属性中。若是您使用错误或errorProperty 属性重定向错误,则这将不起做用。 | 没有 |
附加 | 输出文件和错误文件是否应附加到或覆盖。默认为false 。 |
没有 |
createemptyfiles | 输出和错误文件是否应该在空时建立。默认为true 。 |
没有 |
outputproperty | 应该存储命令输出的属性的名称。除非错误流被重定向到单独的文件或流,不然此属性将包含错误输出。 | 没有 |
errorproperty | 应存储命令的标准错误的属性的名称。 | 没有 |
还能够指定几个附加属性:
属性 | 描述 | 须要 |
---|---|---|
alwaysLog | 当你但愿看到你正在捕获的输出时,使用这个属性,这个属性也出如今Ant的日志中。除非您捕获任务输出,不然不得使用它。默认为false 。 该属性将<redirector> 在Ant 1.6.3中直接支持 |
没有 |
failonerror | 当您但愿避免任何管理器命令处理错误终止蚂蚁执行时使用此属性。默认为true 。false 若是要捕获错误输出,则必须将其设置为,不然在捕获任何内容以前执行将终止。 该属性只对管理命令执行起做用,任何错误或缺乏的命令属性仍将致使Ant执行终止。 |
没有 |
它们还支持嵌入<redirector>
在其中您能够指定其完整的属性集元素,可是input
,inputstring
而且 inputencoding
,即便接受,不使用,由于他们在这方面没有任何意义。有关元素属性的详细信息, 请参阅ant手册<redirector>
。
这是一个示例构建文件提取,它显示了如何使用此输出重定向支持:
<target name="manager.deploy" depends="context.status" if="context.notInstalled"> <deploy url="${mgr.url}" username="${mgr.username}" password="${mgr.password}" path="${mgr.context.path}" config="${mgr.context.descriptor}"/> </target> <target name="manager.deploy.war" depends="context.status" if="context.deployable"> <deploy url="${mgr.url}" username="${mgr.username}" password="${mgr.password}" update="${mgr.update}" path="${mgr.context.path}" war="${mgr.war.file}"/> </target> <target name="context.status"> <property name="running" value="${mgr.context.path}:running"/> <property name="stopped" value="${mgr.context.path}:stopped"/> <list url="${mgr.url}" outputproperty="ctx.status" username="${mgr.username}" password="${mgr.password}"> </list> <condition property="context.running"> <contains string="${ctx.status}" substring="${running}"/> </condition> <condition property="context.stopped"> <contains string="${ctx.status}" substring="${stopped}"/> </condition> <condition property="context.notInstalled"> <and> <isfalse value="${context.running}"/> <isfalse value="${context.stopped}"/> </and> </condition> <condition property="context.deployable"> <or> <istrue value="${context.notInstalled}"/> <and> <istrue value="${context.running}"/> <istrue value="${mgr.update}"/> </and> <and> <istrue value="${context.stopped}"/> <istrue value="${mgr.update}"/> </and> </or> </condition> <condition property="context.undeployable"> <or> <istrue value="${context.running}"/> <istrue value="${context.stopped}"/> </or> </condition> </target>
警告:即便它没有多少意义,而且老是一个坏主意,不止一次调用Catalina任务,严重地设置Ant任务依赖链可能致使在同一Ant运行中屡次调用一个任务,甚至若是没有打算。当您捕获该任务的输出时应该谨慎行事,由于这可能会致使意想不到的结果:
append="true"
,在这种状况下,您会看到每一个任务调用的输出附加到文件中。注意:本评论部分收集您关于改进Apache Tomcat文档的建议。
若是您遇到问题并须要帮助,请阅读 查找帮助页面,并在tomcat-users 邮件列表上提出您的问题 。这里不要问这样的问题。这不是问答部分。
Apache评论系统在这里解释。评论可能会被咱们的版主删除,若是它们被执行或被认为是无效的/脱离主题。
目前,此页面的评论功能已被禁用。