一 。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.
目前讀取輸入數據尚未實現,等完善了我再提供下載文件。