一 。Apache Java Module是什么?
Apache Java Module是一个Apache2.2 Server下的一个模块,这个模块可以嵌入一个JVM,可以无缝地跟Apache整合在一块,从而便于发布高性能的基于Java的HTTP解决方案。
二。为什么要这么做
1)首先,Apache是HTTP服务器市场的领头羊
2)处于性能的考量。
3)Servlet API有它本身的局限性,例如连接相关的信息基本是被隐藏起来了,这样当你想要异步推数据给客户端时,只能去求助Comet了。
4)只要愿意,我可以同时跑Apache和Tomcat,并在一个进程内同时为两个端口服务。
三。示例
目前初步实现了基本框架,一个Hellow,world的例子见下:
首先配置Apache,在conf文件里加上:
LoadModule java_module modules/mod_java.so
<mod_java org.apache.catalina.startup.Bootstrap>
JVMLibrary D:\jdk1.6\jre\bin\server\jvm.dll
CurDir D:\apache-tomcat-6.0.10
ADDJVMOpt -Djava.class.path=D:\apache-tomcat-6.0.10\bin\bootstrap.jar;D:\cspace\mod_java\mod_java.jar
ADDJVMOpt -Djava.library.path=D:\apache-tomcat-6.0.10\bin
ADDJVMOpt -Dcatalina.home=D:\apache-tomcat-6.0.10
ADDJVMOpt -Duser.dir=D:\apache-tomcat-6.0.10
ADDJVMParam start
ADDJVMStopParam stop
ADDJavaHandler javatest com.yovn.apache.modj.HelloWorld
</mod_java>
<Location /javatest>
SetHandler javatest
</Location>
这段配置脚本,同时会启动一个Tomcat在一个新的线程。
并且,当你请求/javatest/*时,自动会执行
com.yovn.apache.modj.HelloWorld来满足这个请求,下面看
这个示例程序:
/**
*
*/
package com.yovn.apache.modj;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintStream;
/**
* @author yovn
*
*/
public class HelloWorld implements RequestHandler {
/**
*
*/
public HelloWorld() {
// TODO Auto-generated constructor stub
}
/* (non-Javadoc)
* @see com.yovn.apache.modj.RequestHandler#processRequest(java.lang.String, int, long, long, java.io.InputStream, java.io.OutputStream)
*/
@Override
public void processRequest(String url, int method, long req, long conn,
InputStream in, OutputStream out) throws IOException,
ModJavaException {
//ApacheModule.setHeader(req, "X-Server", "mod_java");
out.write("<html><head><title>Hello,World</title></head><body><h1>Hello,World</h1></body></html>".getBytes());
out.close();
}
}
这是个很简单的程序,当你在浏览器输入http://host:apache_port/javatest/时,显示Hello,World.
目前读取输入数据尚未实现,等完善了我再提供下载文件。