Apache2.2.4 + Tomcat5.0整合手记

基于反向代理的动态页面缓存技术(参见车东文章 ),
落实到穷人的解决方案之一就是Apache+tomcat的整合,整合应当达到以下几方面效果:
1.Apache负责静态文件的处理
2.涉及jsp,servlet的动态请求交给tomcat处理
3.通过自定义错误响应404,当Apache找不到静态页面时,应当重定向给tomcat处理
4.在负责处理第3种情况tomcat的servlet或者jsp中,能够获得重定向之前的URL等信息。

看了网上的文章,需要在apache2.2自带ajp或者mod_jk之间做出选择。
先试试ajp吧,大家都说配置简单。
搜了一下,以这篇文章 讲得最为清楚。
按照作者指引,很快来到了第4步。在httpd-vhosts.conf中加入一行
    ErrorDocument 404 /rp/test.jsp
其中test.jsp是统一的404错误入口,将来调用模板和数据生成请求的静态页面。
测试代码如下:
<%@ page contentType="text/html;charset=gb2312" import="java.util.*"%>
<%out.println("

Hello World!jsp

");%>
<%
Object redir_url = request.getAttribute("REDIRECT_URL");
out.println(redir_url);
%>

结果404错误重定向到该页面后,确无法获得原始的URL。
在网上搜索,也有难友遇到同样的问题,即ajp没有提供类似mod_jk的JkEnvVar机制,
以将错误重定向的环境变量传递给servlet的request.getAttribute
关于apache的自定义错误处理参见www.kingmx.com/Manual/ApacheMenu/custom-error.html
没奈何只好悻悻作罢。
后来想了想,有一个曲折的解决办法就是,将ErrorDocument重定向到apache下的一个html,再由此html在browser端
利用js调用tomcat的servlet并将原始URL传递进去。
关键代码行如下:

document.location="http://localhost/batcal/test.jsp?ru="+document.URL;
这个办法的缺点是效率较低,与服务端重定向相比较,多了一次http交互.

改用mod_jk好了
根据以下链接http://blog.sina.com.cn/u/4c592ecf010009dz
指引,同样顺利来到第4步。

在httpd.conf中加入一行
JkEnvVar REDIRECT_URL NULL
再次调用test.jsp,结果通过request.getAttribute("REDIRECT_URL");获得了原始URL,搞定。

与采用ajp相比,mod_jk的配置确实麻烦。但总算实现了预期目标。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值