Apache2.2.4 + Tomcat5.0调整手记

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的配置确实麻烦。但总算实现了预期目标。

Apache2.2.4 + Tomcat5.0调整手记

相关文章:

你感兴趣的文章:

标签云: