浏览 3317 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-07-19
车东文章),
基于反向代理的动态页面缓存技术(参见落实到穷人的解决方案之一就是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的配置确实麻烦。但总算实现了预期目标。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |