关键字: startup.bat
闲来无事,平常容器多使用tomcat,所以今天就想打开tomcat启动脚本看看。都说tomcat是纯Java的,这东西只有自己打开看看才能知道。呵呵!
说来tomcat的脚本确实不难,启动脚本更是没有几行,以下是我解释的tomcat startup.bat脚本。
rem Guess CATALINA_HOME if not defined 确定该命令(脚本)是否在tomcat目录里
set CURRENT_DIR=%cd% 设定 CURRENT_DIR 为当前目录
if not "%CATALINA_HOME%" == "" goto gotHome 如果 CATALINA_HOME 不为空,跳转到 gotHome 位置
set CATALINA_HOME=%CURRENT_DIR% 如果为空,CATALINA_HOME设成 CURRENT_DIR(即当前目录)
if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome 如果存在catalina.bat, 就去 gotHome
cd .. 否则返回上级目录 (你可以尝试把startup.bat拷贝到上级目录,它一样可以启动)
set CATALINA_HOME=%cd% 把CATALINA_HOME 重新设为当前目录。(应该是tomcat\)
cd %CURRENT_DIR% 转到 CURRENT_DIR目录,即 tomcat\bin\下
:gotHome gotHome 位置
if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome 如果存在catalina.bat,就去 okHome
echo The CATALINA_HOME environment variable is not defined correctly 否则输出下面两行,并终结
echo This environment variable is needed to run this program
goto end
:okHome
set EXECUTABLE=%CATALINA_HOME%\bin\catalina.bat 为EXECUTABLE变量设定值
rem Check that target executable exists 查询catalina.bat 命令是否存在
if exist "%EXECUTABLE%" goto okExec 查看 catalina.bat 是否存在,如果存在,就去okExec位置
echo Cannot find %EXECUTABLE% 否则输出下面两行,并终结
echo This file is needed to run this program
goto end
:okExec
rem Get remaining unshifted command line arguments and save them in the 将命令参数存入变量里
set CMD_LINE_ARGS=
:setArgs 前面两行是注释,这里是setArgs 位置的返回点
if ""%1""=="""" goto doneSetArgs 如果没有参数,转到doneSetArgs位置
set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1 如果有参数,将参数放入CMD_LINE_ARGS里,加在CMD_LINE_ARGS变量的后面
shift 把变量%2 里移到%1
goto setArgs 返回setArgs位置,进行循环
:doneSetArgs
call "%EXECUTABLE%" start %CMD_LINE_ARGS% 如果一切顺利调用 "%EXECUTABLE%" start 并加上 结尾参数
:end
从上文的分析中我们可以看见,startup.bat脚本实际上并没有做什么实际的工作,主要是查看当前命令所在目录。看是否在tomcat\或tomcat\bin\目录下。以及查看将调用该命令的参数传递给catalina.bat。最后调用catalina.bat start命令。与tomcat书中说startup.bat与catalina.bat start功能一样,相吻合。即startup.bat的主要作用是调用catalina.bat start命令。
我之后,会在另一篇文章上对catalina.bat 脚本进行解析!
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/roland101/archive/2008/04/13/2289229.aspx
if "%OS%" == "Windows_NT" setlocal //判断当前系统是否是window系统
rem --------------------------------------------------------------------------- //rem 是注释(下同)
rem Start script for the CATALINA Server
rem
rem $Id: startup.bat 302918 2004-05-27 18:25:11Z yoavs $
rem ---------------------------------------------------------------------------
rem Guess CATALINA_HOME if not defined
set CURRENT_DIR=%cd% //设置当前目录
if not "%CATALINA_HOME%" == "" goto gotHome //如果设置了CATALINA_HOME环境变量 ,就直接到下面的gotHome处
set CATALINA_HOME=%CURRENT_DIR% //如果没有设置CATALINA_HOME,就设置CATALINA_HOME为当前目录(其实这里她假设你进入tomcat的安装目录)
if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome//判断一下catalina.bat是否找到了,找到了就直接到下面的gotHome处
cd .. //这里他是假设你开始已经进入到了tomcat的bin目录,所以就退到上一级目录
set CATALINA_HOME=%cd%//现在再设置CATALINA_HOME为tomcat的安装目录
cd %CURRENT_DIR% //这里是进入dos的当前目录
:gotHome
if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome //再次判断catalina.bat是否找到了,找到了就直接到下面的okHome处,没有的话,就只能提示你啦!
echo The CATALINA_HOME environment variable is not defined correctly
echo This environment variable is needed to run this program
goto end
:okHome
set EXECUTABLE=%CATALINA_HOME%\bin\catalina.bat //设置要执行的文件
rem Check that target executable exists
if exist "%EXECUTABLE%" goto okExec //再次判断catalina.bat是否找到了,找到了就直接到下面的okExec处,没有的话,就提示。
echo Cannot find %EXECUTABLE%
echo This file is needed to run this program
goto end
:okExec
rem Get remaining unshifted command line arguments and save them in the
set CMD_LINE_ARGS= //这里是设置参数
:setArgs
if ""%1""=="""" goto doneSetArgs //判断参数是否加入完成
set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1 //将参数组成一行,接在后面
shift
goto setArgs
:doneSetArgs
call "%EXECUTABLE%" start %CMD_LINE_ARGS% //执行catalina.bat,最好将这行改为:echo "%EXECUTABLE%" start %CMD_LINE_ARGS% 以便阅读、理解本文件的作用
:end
//这个批处理文件,主要是正确的找到catalina.bat,并且执行。
整合 Apache Http Server 和 Tomcat 可以提升对静态文件的处理性能、利用 Web
服务器来做负载均衡以及容错、无缝的升级应用程序。本文介绍了三种整合 Apache 和 Tomcat 的方式。
首先我们先介绍一下为什么要让 Apache 与 Tomcat 之间进行连接。事实上 Tomcat 本身已经提供了 HTTP
服务,该服务默认的端口是 8080,装好 tomcat 后通过 8080 端口可以直接使用 Tomcat
所运行的应用程序,你也可以将该端口改为 80。
既然 Tomcat 本身已经可以提供这样的服务,我们为什么还要引入 Apache 或者其他的一些专门的 HTTP
服务器呢?原因有下面几个:
1. 提升对静态文件的处理性能
2. 利用 Web 服务器来做负载均衡以及容错
3. 无缝的升级应用程序
这三点对一个 web 网站来说是非常之重要的,我们希望我们的网站不仅是速度快,而且要稳定,不能因为某个 Tomcat
宕机或者是升级程序导致用户访问不了,而能完成这几个功能的、最好的 HTTP 服务器也就只有 apache 的 http server
了,它跟 tomcat 的结合是最紧密和可靠的。
接下来我们介绍三种方法将 apache 和 tomcat 整合在一起。
JK
这是最常见的方式,你可以在网上找到很多关于配置JK的网页,当然最全的还是其官方所提供的文档。JK 本身有两个版本分别是 1 和 2,目前
1 最新的版本是 1.2.19,而版本 2 早已经废弃了,以后不再有新版本的推出了,所以建议你采用版本 1。
JK 是通过 AJP 协议与 Tomcat 服务器进行通讯的,Tomcat 默认的 AJP Connector 的端口是 8009。JK
本身提供了一个监控以及管理的页面 jkstatus,通过 jkstatus 可以监控 JK 目前的工作状态以及对到 tomcat
的连接进行设置,如下图所示:
图 1:监控以及管理的页面 jkstatus
在这个图中我们可以看到当前JK配了两个连接分别到 8109 和 8209 端口上,目前 s2 这个连接是停止状态,而 s1
这个连接自上次重启后已经处理了 47 万多个请求,流量达到 6.2 个 G,最大的并发数有 13 等等。我们也可以利用 jkstatus
的管理功能来切换 JK 到不同的 Tomcat 上,例如将 s2 启用,并停用
s1,这个在更新应用程序的时候非常有用,而且整个切换过程对用户来说是透明的,也就达到了无缝升级的目的。关于 JK
的配置文章网上已经非常多了,这里我们不再详细的介绍整个配置过程,但我要讲一下配置的思路,只要明白了配置的思路,JK
就是一个非常灵活的组件。
JK 的配置最关键的有三个文件,分别是
httpd.conf
Apache 服务器的配置文件,用来加载 JK 模块以及指定 JK 配置文件信息
workers.properties
到 Tomcat 服务器的连接定义文件
uriworkermap.properties
URI 映射文件,用来指定哪些 URL 由 Tomcat 处理,你也可以直接在 httpd.conf 中配置这些
URI,但是独立这些配置的好处是 JK 模块会定期更新该文件的内容,使得我们修改配置的时候无需重新启动 Apache 服务器。
其中第二、三个配置文件名都可以自定义。下面是一个典型的 httpd.conf 对 JK 的配置
# (httpd.conf)
# 加载 mod_jk 模块
LoadModule jk_module modules/mod_jk.so
#
# Configure mod_jk
#
JkWorkersFile conf/workers.properties
JkMountFile conf/uriworkermap.properties
JkLogFile logs/mod_jk.log
JkLogLevel warn
接下来我们在 Apache 的 conf 目录下新建两个文件分别是
workers.properties、uriworkermap.properties。这两个文件的内容大概如下
#
# workers.properties
#
# list the workers by name
worker.list=DLOG4J, status
# localhost server 1
# ------------------------
worker.s1.port=8109
worker.s1.host=localhost
worker.s1.type=ajp13
# localhost server 2
# ------------------------
worker.s2.port=8209
worker.s2.host=localhost
worker.s2.type=ajp13
worker.s2.stopped=1
worker.DLOG4J.type=lb
worker.retries=3
worker.DLOG4J.balanced_workers=s1, s2
worker.DLOG4J.sticky_session=1
worker.status.type=status
以上的 workers.properties 配置就是我们前面那个屏幕抓图的页面所用的配置。首先我们配置了两个类型为 ajp13 的
worker 分别是 s1 和 s2,它们指向同一台服务器上运行在两个不同端口 8109 和 8209 的 Tomcat
上。接下来我们配置了一个类型为 lb(也就是负载均衡的意思)的 worker,它的名字是 DLOG4J,这是一个逻辑的
worker,它用来管理前面配置的两个物理连接 s1 和 s2。最后还配置了一个类型为 status 的 worker,这是用来监控
JK 本身的模块。有了这三个 worker 还不够,我们还需要告诉 JK,哪些 worker 是可用的,所以就有 worker.list
= DLOG4J, status 这行配置。
接下来便是 URI 的映射配置了,我们需要指定哪些链接是由 Tomcat 处理的,哪些是由 Apache
直接处理的,看看下面这个文件你就能明白其中配置的意义
/*=DLOG4J
/jkstatus=status
!/*.gif=DLOG4J
!/*.jpg=DLOG4J
!/*.png=DLOG4J
!/*.css=DLOG4J
!/*.js=DLOG4J
!/*.htm=DLOG4J
!/*.html=DLOG4J
相信你已经明白了一大半了:所有的请求都由 DLOG4J 这个 worker 进行处理,但是有几个例外,/jkstatus 请求由
status 这个 worker 处理。另外这个配置中每一行数据前面的感叹号是什么意思呢?感叹号表示接下来的 URI 不要由 JK
进行处理,也就是 Apache 直接处理所有的图片、css 文件、js 文件以及静态 html 文本文件。
通过对 workers.properties 和 uriworkermap.properties
的配置,可以有各种各样的组合来满足我们前面提出对一个 web 网站的要求。您不妨动手试试!
http_proxy
这是利用 Apache 自带的 mod_proxy 模块使用代理技术来连接 Tomcat。在配置之前请确保是否使用的是 2.2.x
版本的 Apache 服务器。因为 2.2.x 版本对这个模块进行了重写,大大的增强了其功能和稳定性。
http_proxy 模式是基于 HTTP 协议的代理,因此它要求 Tomcat 必须提供 HTTP 服务,也就是说必须启用
Tomcat 的 HTTP Connector。一个最简单的配置如下
ProxyPass /images !
ProxyPass /css !
ProxyPass /js !
ProxyPass / http://localhost:8080/
在这个配置中,我们把所有 http://localhost 的请求代理到 http://localhost:8080/ ,这也就是
Tomcat 的访问地址,除了 images、css、js 几个目录除外。我们同样可以利用 mod_proxy
来做负载均衡,再看看下面这个配置
ProxyPass /images !
ProxyPass /css !
ProxyPass /js !
ProxyPass / balancer://example/
<Proxy balancer://example/>
BalancerMember http://server1:8080/
BalancerMember http://server2:8080/
BalancerMember http://server3:8080/
</Proxy>
配置比 JK 简单多了,而且它也可以通过一个页面来监控集群运行的状态,并做一些简单的维护设置。
图 2:监控集群运行状态
ajp_proxy
ajp_proxy 连接方式其实跟 http_proxy 方式一样,都是由 mod_proxy 所提供的功能。配置也是一样,只需要把
http:// 换成 ajp:// ,同时连接的是 Tomcat 的 AJP Connector 所在的端口。上面例子的配置可以改为:
ProxyPass /images !
ProxyPass /css !
ProxyPass /js !
ProxyPass / balancer://example/
<Proxy balancer://example/>
BalancerMember ajp://server1:8080/
BalancerMember ajp://server2:8080/
BalancerMember ajp://server3:8080/
</Proxy>
采用 proxy 的连接方式,需要在 Apache 上加载所需的模块,mod_proxy 相关的模块有
mod_proxy.so、mod_proxy_connect.so、mod_proxy_http.so、mod_proxy_ftp.so、mod_proxy_ajp.so,
其中 mod_proxy_ajp.so 只在 Apache 2.2.x 中才有。如果是采用 http_proxy 方式则需要加载
mod_proxy.so 和 mod_proxy_http.so;如果是 ajp_proxy 则需要加载 mod_proxy.so 和
mod_proxy_ajp.so这两个模块。
三者比较
相对于 JK 的连接方式,后两种在配置上是比较简单的,灵活性方面也一点都不逊色。但就稳定性而言就不像 JK 这样久经考验,毕竟
Apache 2.2.3 推出的时间并不长,采用这种连接方式的网站还不多,因此,如果是应用于关键的互联网网站,还是建议采用 JK
的连接方式。
Tomcat配置多虚拟主机:
第一步:修改%Tomcat_Home%\conf\server.xml:
添加一组Host元素,
<Host name="test" debug="0" appBase="D:\Proj\test"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<Context path="" docBase="." debug="0" privileged="true" reloadable="true"/>
</Host>
第二步:修改文件%windir%\system32\drivers\etc\hosts,在文件中找到
127.0.0.1 localhost
新启一行,添加:
127.0.0.1 test
保存,重启Tomcat即可.
注意:第二步的文件要找对,win2k是Winnt目录下,winxp是在Windows目录下.
若未修改Tomcat的端口,现在启动Tomcat,在ie的地址栏输入
即可看到你配置的新应用了.与此同时,还可以输入
1、准备,下载需要的文件。这里假定你已经正确安装配置好了JDK。 httpd-2.2.0.tar.gz 其中httpd和jakarta-tomcat-connectors为源码包,apache-tomcat为二进制包。
# cd httpd-2.2.0 # ./configure --prefix=/usr/local/apache2 --enable-so # make # make install
# cd /usr/local # tar xzvf apache-tomcat-5.5.12.tar.gz # ln -s apache-tomcat-5.5.12 tomcat
# cd jakarta-tomcat-connectors-1.2.15-src/jk/native # ./configure --with-apxs=/usr/local/apache2/bin/apxs # make # cp ./apache-2.0/mod_jk.so /usr/local/apache2/modules/
JkWorkersFile /usr/local/apache2/conf/workers.properties
JkLogFile /usr/local/apache2/logs/mod_jk.log
JkLogLevel info
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
JkRequestLogFormat "%w %V %T"
JkMount /servlet/* worker1 JkMount /*.jsp worker1
worker.list=worker1
worker.worker1.type=ajp13 worker.worker1.host=localhost worker.worker1.port=8009 worker.worker1.lbfactor=50 worker.worker1.cachesize=10 worker.worker1.cache_timeout=600 worker.worker1.socket_keepalive=1 worker.worker1.socket_timeout=300 DocumentRoot "/var/wwwroot" 增加关于加载mod_jk的语句:
Include /usr/local/apache2/conf/mod_jk.conf
<Context path="" docBase="/var/wwwroot" debug="0" reloadable="true" crossContext="true"/> 在/var/wwwroot下建立一个index.jsp,启动Apache和Tomcat,用浏览器访问http://localhost/,应该可以看到正确的页面了。 查考文章:http://hi.baidu.com/8495138/blog/item/0942243423f05d3a5bb5f5b1.html 转载 |
以下适合各个版本的tomcat(注意启动时8080端口要确保未被占用)
今天搭一个Tomcat服务器,为了方便决定将解压版(非windows的安装方式)的tomcat添加为一个windows服务。
环境:
JDK 1.5.0_06
Tomcat-5.5.20
Windows2003
瑞星防火墙
步骤:
1.把JDK解压放到C:\jdk1.5.0_06下,把Tomcat解压放到C:\Tomcat-5.5.20-WEB下
2.添加系统环境变量:
JAVA_HOME=C:\jdk1.5.0_06
CLASSPATH=.;%JAVA_HOME%\LIB
TOMCAT_HOME=C:\Tomcat-5.5.20-WEB
修改系统环境变量PATH,在它的最前面加入:
%JAVA_HOME%\BIN;
注:放在最前面是预防有其它的JDK或JRE路径占先,如你装了Oracle就会有一个低版本的JRE。
3.在"开始"菜单运行CMD进入DOS窗口,执行cd c:\Tomcat-5.5.20-WEB\bin命令进入执行文件的目录。执行如下命令(是从DOS直接COPY出来的,含提示信息):
C:\Tomcat-5.5.20-WEB\bin>service install tomcat
Installing the service 'tomcat' ...
Using CATALINA_HOME: C:\Tomcat-5.5.20-WEB
Using CATALINA_BASE: C:\Tomcat-5.5.20-WEB
Using JAVA_HOME: C:\jdk1.5.0_06
Using JVM: C:\jdk1.5.0_06\jre\bin\server\jvm.dll
The service 'tomcat' has been installed.
C:\Tomcat-5.5.20-WEB\bin>net start tomcat
Apache Tomcat tomcat 服务正在启动 ..
Apache Tomcat tomcat 服务已经启动成功。
4.这时你可以打开IE,放问http://localhost:8080测试了(注意你自己指的端口)。
注:为什么我在环境那声明瑞星防火墙,是因为防火运行时老装不成功,退出防火墙后才可以.重启防火墙后它才会问你是否允许Tomcat运行并打开端口,所以大家注意了.
修改server.xml中的端口为空闲端口:
(1) 修改http访问端口(默认为8080端口)
(2) 修改Shutdown端口(默认为8005端口)
(3) 修改JVM启动端口(默认为8009端口)
修改catalina.bat中的dt_socket端口:
可以在启动tomcat查看当前的端口,第一句信息就是:
Listening for transport dt_socket at address: 2005
评论