ASF Tomcat(在本文中简称为Tomcat )是由Apache Software Foundation(ASF)开发的开源Web服务器和servlet容器。 Tomcat具有出色的性能,并且已经与来自世界各地的顶尖开发人员合作。 与以前的版本相比,Tomcat V7实现了Servlet 3.0和Java™Server Pages(JSP)2.2规范,并为包括IBM i在内的大多数操作系统提供了许多增强功能。 几年前,IBM i实际上在IBM i中包括了Tomcat。 IBM发行的最后一个版本是版本3.2.4。 本文所涵盖的不是这种支持。 不将Tomcat包含在IBM i中的主要原因之一是,Tomcat是纯Java应用程序,可以轻松,轻松地在IBM i上下载并启动,就像您将在本文中看到的那样。
IBM HTTP Server for i是一个Web服务器实现,它基于Apache Software Foundation提供的开源服务器代码,并且针对IBM i环境进行了优化。 适用于IBM i 7.1的i上的HTTP Server基于Apache 2.2.11,并且所有与HTTP Server相关的安全漏洞(称为常见漏洞和披露[CVE])均已通过HTTP Server程序临时修订(PTF)进行了修补,以确保PCI合规性。 很长时间以来,IBM i团队一直在使用IBM i版本的Apache HTTP服务器。 由于HTTP服务器建立在C之上,因此需要特别为IBM i创建二进制文件,以利用IBM i OS带来的优势。 自2000年以来,此支持已成为DG1产品的一部分。
将Tomcat和HTTP Server for i两种技术结合在一起,以充分利用它们在IBM i平台边缘的优势,是一个很好的解决方案。 本文以IBM i 7.1和Tomcat 7.0.28为例。 在IBM i 6.1上,同样的支持也将同样运行。 您只需要替换正确的IBM i 6.1实体即可。
Tomcat服务器可以连接到IBM i上的本地或远程HTTP Server。 图1和图2分别说明了不同的情况。
图1.同一IBM i系统上的i的Tomcat和HTTP Server(本地模式)
图2.不同IBM i系统上的i的Tomcat和HTTP Server(远程模式)
软件先决条件
上一节提供了针对i的Tomcat和HTTP Server的基本介绍。 为了使您的Web应用程序在Tomcat上成功运行,需要以下许可程序,PTF和软件。
- 许可程序
Tomcat V7可以在Java Development Kit(JDK)1.6 32位或JDK 1.6 64位上运行。 本文以JDK 1.6 32位为例。- 5770-SS1选项30 QSH
- 5770-DG1 *适用于i的BASE IBM HTTP Server
- 5761-JV1 * BASE Java Java开发人员工具包
- 5761-JV1选项11 Java SE 6 32位
- 所需的PTF
- 适用于5770DG1的最新PTF组(最低SF99368-14级)
- Java的最新PTF组(最低SF99572-10级)
- 非授权软件
- Tomcat不是IBM i上的许可程序。 二进制映像可以从Apache网站下载。
- 发行的Tomcat V7.0.28
在IBM i上安装Tomcat V7
在准备好所有软件之后,执行以下步骤以在IBM i上安装Tomcat V7.0.28。
- 将Tomcat V7.0.28发行版上载到IBM i,并将其放置在集成文件系统目录中,例如/ home / download。
- 在Qshell中提取Tomcat分发文件。
cd / home /下载
jar -xvf apache-tomcat-7.0.28.zip - 设置JAVA_HOME环境变量。 为了启动和运行Tomcat,它需要知道Java虚拟机(JVM)的位置。 该信息需要添加到Tomcat配置文件中。 编辑Tomcat配置文件: /home/download/apache-tomcat-7.0.28/bin/setclasspath.sh。 将Java主目录信息添加到文件中。 以下是Java主页信息。 导出-s JAVA_HOME = / QOpenSys / QIBM / ProdData / JavaVM / jdk60 / 32bit /
图3.在IBM i上导出JAVA_HOME
- 在IBM i上启动Tomcat V7。
- 验证Tomcat使用的端口的可用性。 Tomcat默认使用8005、8080和8009,其中8080是默认的HTTP端口。 输入命令NETSTAT OPTION(* CNN)以验证端口是否正在使用。 如果端口8009和8080被占用,请编辑配置文件/home/download/apache-tomcat-7.0.28/conf/server.xml,将默认端口8005、8009和8080更改为其他未使用的端口。 如果在此IBM i上运行多个Tomcat服务器,则将需要对这些值使用不同的端口。
图4.编辑Tomcat默认端口
- 更新应用程序Tomcat Web应用程序管理器应用程序的配置。 以Tomcat默认Web应用程序Tomcat Web Application Manager为例,以验证Tomcat服务器在IBM i上是否正常工作。 因此,我们需要在启动Tomcat之前更新应用程序的配置。
- 编辑/home/download/apache-tomcat-7.0.28/conf/tomcat-users.xml以确保可访问示例应用程序。
- 在所有现有角色元素之后添加<role rolename =“ manager-gui” />。
- 在所有现有用户元素之后添加<user username =“ admin” password =“ admin” role =“ manager-gui” />。
图5.编辑Tomcat用户文件
- 启动Tomcat。 Tomcat已成功安装和配置。 现在可以开始通过Qshell中的脚本开始了。 切换到Tomcat bin目录,在此示例中为/home/download/apache-tomcat-7.0.28/bin。 此目录中有几个有用的脚本,例如:startup.sh,shutdown.sh,setClasspath.sh,Catalina.sh等。 在Qshell中运行startup.sh脚本以启动Tomcat服务器。
/startup.sh
图6.使用shell脚本启动Tomcat
- 验证Tomcat已在IBM i上启动。 通过输入CL命令
WRKACTJOB
验证Tomcat服务器是否正在运行。 在QINTER子系统中查找QP0ZSPWT作业,并确保其状态为TIMW
。 Tomcat Server可以在用户定义的子系统中运行。 计划在将来发布的文章介绍了如何在专门的子系统中运行Tomcat以及其他高级主题。图7. IBM i上的Tomcat作业
- 验证Tomcat在IBM i上是否可以正常工作。
- 打开Web浏览器,然后输入URL http://your.server.name:8080/manager。
- 出现提示时,输入默认的用户ID和密码(admin / admin)。 显示管理器应用程序,如下图所示:
图8. Tomcat Web应用程序管理器主页
现在,Tomcat已成功安装在IBM i上。 如果要停止Tomcat,请在Qshell中运行/home/download/apache-tomcat-7.0.28/bin/shutdown.sh脚本。
图9.在QSH中停止Tomcat
- 验证Tomcat使用的端口的可用性。 Tomcat默认使用8005、8080和8009,其中8080是默认的HTTP端口。 输入命令NETSTAT OPTION(* CNN)以验证端口是否正在使用。 如果端口8009和8080被占用,请编辑配置文件/home/download/apache-tomcat-7.0.28/conf/server.xml,将默认端口8005、8009和8080更改为其他未使用的端口。 如果在此IBM i上运行多个Tomcat服务器,则将需要对这些值使用不同的端口。
下一节介绍如何将HTTP Server for i与Tomcat关联以在IBM i上创建完整的生产Web环境。
将i的HTTP Server与Tomcat关联
执行以下步骤,将i的HTTP Server与Tomcat关联。
- 为i创建一个HTTP Server实例。
在将HTTP Server与Tomcat关联之前,必须存在用于我的HTTP Sever实例。 IBM Web Administration for i(http://your.server.name:2001/HTTPAdmin)可以帮助为i创建HTTP服务器实例。 请参阅IBM i信息中心,以获取有关为i创建HTTP Server实例的更多详细信息。 本文以实例httpserver(根目录:/ www / httpserver,端口:5555)为例,以演示如何在IBM i上配置i的HTTP Server并将其与Tomcat关联。 - 为i配置HTTP服务器。
为了将HTTP Server for i与Tomcat关联,需要使用Tomcat插件模块作为HTTP Server和Tomcat之间的连接器,以将来自HTTP Server for i的请求路由到Tomcat,并将响应从Tomcat返回到HTTP Server。 。 5770DG1许可证程序包含的默认Tomcat插件服务程序是QHTTPSVR / QZTCJK。
- 将server.xml从Tomcat复制到HTTP Server for i。
如果Tomcat和i的HTTP Server位于同一IBM i服务器上,请将server.xml从/home/download/apache-tomcat-7.0.28/conf目录直接复制到/ www / httpserver / conf目录。 如果Tomcat和HTTP Server for i安装在不同的IBM i服务器上,请将server.xml从Tomcat所在的服务器复制到HTTP Server所在的服务器。 - 生成worker.properties。
在/ www / httpserver / conf目录中创建worker.properties文件。 将以下代码行添加到worker.properties文件中:worker.list=worker1 worker.worker1.type=ajp13 worker.worker1.port=8009 worker.worker1.host=f4p04.cn.ibm.com
图10.使用Programming Development Manager(PDM)编辑worker.properties
属性文件的描述:
- worker.list = worker1
Tomcat worker的名称worker1用作默认名称。 - worker.worker1.type = ajp13
默认情况下,用于在HTTP Server for i和Tomcat之间交换数据的协议ajp13。 - worker.worker1.port = 8009
默认情况下,使用HTTP Server for i和Tomcat之间的通信端口8009。 - worker.worker1.host
Tomcat运行所在的服务器的IP地址或主机名。 如果Tomcat和HTTP Server位于不同的服务器上,则该值表示Tomcat所在的服务器。
- worker.list = worker1
- 编辑配置文件。
编辑/www/httpserver/conf/httpd.conf文件。 将Tomcat插件相关的指令添加到httpd.conf。LoadModule jk_module /QSYS.LIB/QHTTPSVR.LIB/QZTCJK.SRVPGM JkWorkersFile /www/ct/conf/workers.properties JkLogFile /www/ct/logs/jk.log JkLogLevel debug JKMount /manager/* worker1
图11.将Tomcat插件相关的指令添加到httpd.conf
- LoadModule jk_module /QSYS.LIB/QHTTPSVR.LIB/QZTCJK.SRVPGM:伪指令指定HTTP服务器为i与Tomcat服务器通信而由HTTP服务器加载的Tomcat插件模块。 它必须是配置文件中的第一项。
- JkWorkersFile /www/httpserver/conf/workers.properties:该指令指定Tomcat Servlet容器的工作文件的名称。 它只能在配置文件中使用一次,并且必须放入全局配置区域。
- JkLogFile /www/httpserver/logs/jk.log:该指令指定Tomcat插件的日志文件的完整路径名。
- JkLogLevel调试:伪指令指定由JkLogFile定义的日志文件的日志级别。)
- JKMount / manager / * worker1:该指令指定从上下文到Tomcat worker的安装点。 它可以在配置文件中多次使用,并且可以在全局配置和VirtualHost区域中指定。
- 将server.xml从Tomcat复制到HTTP Server for i。
- 验证Tomcat和i的HTTP Server之间的关联。
使用STRTCPSVR SERVER(* HTTP)HTTPSVR(httpserver)CL命令为i启动HTTP Server。 打开Web浏览器,然后输入URL: http:// IP地址或主机名:port / manager / 。 通过HTTP Server主机名和端口显示的页面应与通过Tomcat主机名和端口(8080)显示的页面完全相同。 参见图8。
注意:如果Tomcat和i的HTTP Server位于不同的服务器上,请用运行i的HTTP Server的服务器的IP或主机名替换IP地址或主机名 。
在Tomcat上部署IBM i Web应用程序
现在,用于i和Tomcat的HTTP Server已在IBM i和Tomcat示例应用程序Tomcat Application Manager上关联在一起,可以通过用于i的HTTP服务器进行访问。 本部分介绍如何在Tomcat上部署IBM i Web应用程序。 提供了一个示例应用程序(TomcatTestServlets),以使用IBM Toolbox和本机IBMDB2®JDBC驱动程序测试数据库查询的时间(请参阅附件1和2以获取.war文件和源代码)。
- 此样本使用数据源,您需要编辑配置文件以将数据源添加到Tomcat配置文件和您的应用程序中。 如果您的应用程序不需要数据源,则可以忽略此步骤。
- 编辑/home/download/apache-tomcat-7.0.28/conf/server.xml配置文件。 在
<GlobalNamingResources>
节点中插入以下行以添加数据源:Resource auth="Container" driverClassName="com.ibm.db2.jcc.DB2Driver" name="jdbc/TEST" username="test" password="test" type="javax.sql.DataSource" url="jdbc:db2://ip | hostname:port/DBName" maxActive="8" maxIdle="4" maxWait="10000"/>
新的配置文件server.xml如下所示:
图12.在server.xml文件中添加数据源
资源属性说明:
- auth:数据源的身份验证类型。 该值必须为Application或Container 。 默认值为Container 。
- driverClassName:要使用的JDBC驱动程序的标准Java类名称。
- name:数据源的合格名称。
- username:要传递给JDBC驱动程序的数据库用户名
- password:要传递给JDBC驱动程序的数据库密码。
- 类型: Web应用程序对此资源执行查找时期望的合格Java类名称。
- url:要传递给JDBC驱动程序的连接URL。
- initialSize:池初始化期间将在池中创建的初始连接。 默认值:0
- maxActive:可以同时从该池分配的最大连接数。 默认值:8。
- minIdle:同时处于空闲状态的最小连接数。 默认值:0
- maxIdle:可以同时处于空闲状态的最大连接数。 默认值:8
- maxWait:池等待返回连接的最大持续时间(以毫秒为单位)。 默认值:-1(无限)
- 编辑/home/download/apache-tomcat-7.0.28/conf/context.xml配置文件。 将以下行插入<context />节点中。 此项指定到server.xml中定义的数据源的链接:
- 编辑TomcatTestServlets / WebContent / WEB-INF / web.xml配置文件。 将以下行添加到该文件的末尾。 这些行指定对server.xml中定义的数据源的引用:
- name:指向server.xml中定义的数据源的链接的限定名称。
- global:全局Java命名和目录接口(JNDI)上下文中链接的全局资源的名称。
- 类型: Web应用程序对此资源执行查找时期望的合格Java类名称
图13.在context.xml中添加到数据源的链接
- res-ref-name:数据源链接或数据源本身的限定名称。 该值必须与context.xml中定义的资源链接的名称相同。
- res-type: Web应用程序对此资源执行查找时需要的合格Java类名称。
- res-auth:数据源的身份验证类型。 该值必须是Application或Container。 默认值:容器。
-
编辑配置文件:TomcatTestServlets / WebContent / WEB-INF / web.xml。 将以下行添加到文件的末尾。 这些行指定对server.xml中定义的数据源的引用:
resource-ref res-ref-name /jdbc/TEST /res-ref-name res-type javax.sql.DataSource res-type res-auth Container res-auth /resource-ref
新的配置文件web.xml出现,如图14所示。
图14.在web.xml中添加对数据源的引用
- 编辑/home/download/apache-tomcat-7.0.28/conf/server.xml配置文件。 在
- 将TomcatTestServlets.war复制到IBM i上的/home/download/apache-tomcat-7.0.28/webapps目录中。
- 编辑/www/httpserver/conf/httpd.conf配置文件。 从示例应用程序Web根(TomcatTestServlets)向httpd.conf中的 Tomcat worker(worker1)添加新的安装点。
JKMount / TomcatTestServlets / * worker1
新的配置文件httpd.conf如图15所示。图15.通过HTTP Server for i查看应用程序
- 重新启动Tomcat和HTTP Server for i。 输入URL: http : //192.168.0.101 : 5555/TomcatTestServlets/DBTimerServlet来验证应用程序。 进入如图16所示页面。
图16.通过HTTP Server for i查看应用程序
附件
- TomcatTestServlets.war:
( 注意:要下载代码,请右键单击链接,然后选择另存为或将链接另存为 。)
- TomcatTestServlets-源代码:
摘要
今天,许多客户希望在IBM i上使用Tomcat,因为IBM i是运行任何高度多线程工作负载(例如Tomcat)的绝佳平台。 但是,当前IBM i上的IBM许可程序不包含Tomcat。 本文为您提供了一个可行的解决方案,说明了如何在IBM i上部署和定制Tomcat,将Tomcat与i的HTTP Server关联以及如何在全面生产的Web环境中运行Web解决方案。 此外,计划在将来发布的文章将重点介绍一些高级主题,例如运行在IBM i上安装Tomcat V7部分中提到的运行Tomcat指定的子系统,在IBM i上对Tomcat和HTTP Server的性能进行调整,等等。 享受您在IBM i!上使用Tomcat的经验。
翻译自: https://www.ibm.com/developerworks/ibmi/library/i-websolution-asf-tomcat/index.html