[转]谈谈我对apache+tomcat+jk2整合的理解

整合 的目的(完全臆想)
------------------------------------------------------------------------------
apache tomcat 都可以做为独立的WEB服务器来用, apache 功能强大、高效,但并不能支持JSP及serlet,而 tomcat 正相反,所以要把它们结合起来。
通过在
apache 中加载 整合 模块和进行设置, apache 就能够根据url,把不属于自己的请求转给 tomcat .

版本的选择的相关性:
------------------------------------------------------------------------------
1.Apache
httpd2.0.x,对于与
apache 1.3.x等版本有什么区别不知道,应该有个飞跃吧,连名字都改成httpd了。而我们选择了用JK2 整合 ,JK2是针对 apache 2.0的思想开发的(英语太差,见原文:JK2 has been developed with Apache 2.0 in mind),所以选择用httpd2.0.x。

2.
整合 方式-JK2
为什么选择JK2呢?(JK is a replacement to the elderly mod_jserv. It was a completely new Tomcat-Apache plug-in that handles the communication between Tomcat and Apache.The newest JK2 is a refactoring of JK . The native part has been completly restructured and the configuration has been simplified a lot.)我只看重了最后一句话,呵呵。在JK的文档中有关于以前的
整合 模块及JK、JK2功能的详细描述。

3.Tomcat5.0、J2SDK1.4.x
能够支持JAVA,JSP,及Servlet的较新标准吧?它们之间应该有一定的关联,据说
tomcat 5及JDK1.4对中文的支持方式改变了不少,现在不用进行复杂的设置了就可以很好的使用中文,但对于针对以前JSP标准开发的页子的中文兼容性不太好。

编译安装过程中的注意事项:
-------------------------------------------------------------------------------
1.Apache
必须编译成允许动态加载模块的方式,即在configure时要加 --enable-so选项,因为将来要加载mod_jk2这个
整合 模块。
假设
apache 的安装目录为PathofApache,则编译的模块在PathofApache/modules下,配置文件在PathofApache/conf下。

2.
tomcat
只会用编译好的版本。解压、释放包就行了。(听说
tomcat 是JAVA写的,不知道用那个ANT编译有什么优势也没试成功过),假设 tomcat 安装目录为PathOfTomcat。

3.JDK
我用的是二进制版本,直接运行,自己解压释放包。(如果用那个RPM包我不知道JAVA_HOME怎么设,呵呵)设置JAVA_HOME和CLASSPATH环境变量。JAVA_HOME也可以不设置而在PathOfTomcat/bin/catalina.sh中赋值,CLASSPATH目前我还没设置,也许在JSP中要用到JAVA标准类的时候要用到。

4。JK2模块编译
假设JK2包释放后目录改名为PathOfJK2,且当前目录为PathOfJK2(
参考JK文档,注意关于编译的部分在JK部分有说明,而默置要看JK2部分,因为不同的整合方式有很大的不同。http://jakarta.apache.org/tomcat/tomcat-4.1-doc/jk2/


cd jk/native2

chmod +755 buildconf.sh
./buildconf.sh (因为buildconf.sh没有执行权,所以要改,但“零二年的夏天”告诉我只要 sh buildconf.sh就可以执行了)

./configure --with-apxs2=PathOfApache/bin/apxs
这个apxs在
apache的安装目录的bin下,所以要先装apache。据说只有编译安装的apache才有这个文件,rpm包安装的没有这个文件,如果要给rpm包安装的apache编译整合模块,要找一个相同版本的编译一下用然后再删掉,版本号要完全相同,否则编译出来的模块不能用。
还有两个参数我没有,英文的说明也没看太懂,就在JK的文档中有说明:
--with-
apache=DIR,DIR is the path where apache sources are located. The apache sources should have been configured before configuring mod_jk. DIR is something like: /home/apache/apache_1.3.19 It builds a static Apache module.
--enable-EAPI,This parameter is needed when using Apache-1.3 and mod_ssl, otherwise you will get the error message: "this module might crash under EAPI!" when loading mod_jk.so in httpd. Not needed when --with-apxs has been used

另外,我在执行configure的时候提示有错误,好像是关于路径的,我就先启动了
tomcat,执行通过。(也许是我没有设置关于tomcat目录的环境变量的原因)
make
make install

所有的文档都说如果发布不成功,那么要手工发布,我也是手工发布的:
cp PathOfJK2/build/jk2/
apache2/mod_jk2.so PathOfApache/modules/

配置文件的修改
-------------------------------------------------------------------------------
JK2所用的配置文件有2个:
jk2.properties,默认要放在PathOfTomcat/conf中
workers2.properties默认要放在PathOfApache/conf中

这两个文件的作用真的不明白,jk2.properties可能是定义
tomcatapache的通讯端口等,workers2.properties可能是告诉apache有哪些目录是tomcat支持的。

1.在PathOfTomcat/conf中有
tomcat的主配置文件server.xml和JK2的配置文件jk2.properties。
    实际上我对这两个文件没有做任何修改,而jk2.properties缺省就是空的。看了看在server.xml中起作用的可能就是在第一个后面紧挨着的对于
整合在起作用吧,没有应该加上。
<!-- Define a Coyote/JK2 AJP 1.3 Connector on port 8009 -->
<Connector port="8009" enableLookups="false"  redirectPort="8443" debug="0"
protocol="AJP/1.3" />

2.在PathOfApache/conf中有
apache的配置文件httpd.conf,及JK2配置文件workers2.properties
修改httpd.conf,只加入:LoadModule jk2_module modules/mod_jk2.so
关于workers2.properties,引用JK文档例子中最小配置如下:
# Define the communication channel
[channel.socket:localhost:8009]
info=Ajp13 forwarding over socket
tomcatId=localhost:8009

# Map the Tomcat examples webapp to the Web server uri space
[uri:/examples/*]
info=Map the whole webapp

这个/examples应该是
tomcat下的路径而不是apache的,但在这里做了映射,这个URL就能被apache接受并转给tomcat,而不用加tomcat的端口号了。
这样就完成了一种
整合方式,这可能是最简单但很少用的配置方法吧
——————————————————————————

还有一种配置的方法很实用,但有一点地方不明白,适合做虚拟主机。

1.把
apachetomcat都做虚拟主机,并且相同的主机指向相同的根目录
2,默认情况下:jk2.properties可为空,workers2.properties不用做地址映射(?)
3.除了做虚拟主机,还要做如下修改
http.conf的修改
在虚拟主机之前加入
<Directory ~ "/WEB-INF/">
Order allow,deny
Deny from all
</Directory>
#因为
apachetomcat指向相同的目录,所在要禁止对WEB-INF的访问。

在虚拟主机的配置中
<Location ~ "/*.jsp|/*/servlet/*">
JkUriSet worker ajp13:localhost:8009
</Location>
#这可能是做映射,将目录中的jsp和servlet由
tomcat解析。

server.xml的修改

在虚拟主机的host中加入
<Context path="" docBase="" debug="1"/>
(这个
tomcat很奇怪,不像apache只要指定DocumentRoot,那么网站的逻辑根目录就是DocumentRoot指定的了,而tomcat用appBase指定的应该叫什么呢?要用上面的一句将appBase指定的目录声明为根目录,appBase下其它目录默认情况下就是网站逻辑子目录)

关于虚拟主机
整合的配置,JK文档的例子说得很清楚,或看本版的一篇精华。
------------------------
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用 JavaScript 来实现用户输入一串数字,并在每个数字之间插入两个随机字母的功能。以下是一个示例代码: ```javascript // 获取用户输入的数字串 const userInput = prompt("请输入数字串:"); // 将数字串换成字符数组 const numArr = userInput.split(""); // 生成随机字母的函数 function generateRandomLetter() { const letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; const randomIndex = Math.floor(Math.random() * letters.length); return letters[randomIndex]; } // 插入随机字母的函数 function insertRandomLetters(str) { // 将字符串换成字符数组 const arr = str.split(""); // 遍历字符数组,在每个数字之间插入两个随机字母 for (let i = 1; i < arr.length; i += 2) { arr.splice(i, 0, generateRandomLetter(), generateRandomLetter()); } // 将字符数组换成字符串并返回 return arr.join(""); } // 调用函数插入随机字母并输出结果 console.log(insertRandomLetters(numArr.join(""))); ``` 以上代码中,首先通过 `prompt` 方法获取用户输入的数字串,并使用 `split` 方法将其换成一个字符数组。然后定义了一个 `generateRandomLetter` 函数,用于生成一个随机字母。该函数将随机生成一个小写或大写字母,并返回。 接下来定义了一个 `insertRandomLetters` 函数,该函数接收一个字符串作为参数,并在每个数字之间插入两个随机字母。具体实现是先将字符串换成一个字符数组,然后使用 `splice` 方法在每个数字后面插入两个随机字母。最后将字符数组换成字符串并返回。 最后调用 `insertRandomLetters` 函数,并将结果输出到控制台。 ### 回答2: 要实现在每个数字之间插入两个随机字母,并输出整个字符串,可以使用JavaScript编写以下代码: ```javascript function insertRandomLetters(numString) { var result = ""; for (var i = 0; i < numString.length; i++) { result += numString[i]; if (i < numString.length - 1) { result += getRandomLetters(2); } } return result; } function getRandomLetters(num) { var letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; var randomLetters = ""; for (var i = 0; i < num; i++) { randomLetters += letters.charAt(Math.floor(Math.random() * letters.length)); } return randomLetters; } var userInput = "17921yu7gk9jk2"; var output = insertRandomLetters(userInput); console.log(output); ``` 运行代码后,将会输出类似于`1792ab1yu7gk9jk2cd`这样的字符串,其中每个数字之间都插入了两个随机字母。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值