有了上面几篇文章的基础,大家自己再下点功夫,应该可以去写一些简单的模块了,下面贴出一个很简单的apache module,大家一起分析一下。
$ cd /usr/local/apache2.2.4
$ vi mod_c.c
#include
#include
#include “apr.h”
#include “apr_lib.h”
#include “apr_strings.h”
#define APR_WANT_STRFUNC
#include “apr_want.h”
#include “httpd.h”
#include “http_config.h”
#include “http_core.h”
#include “http_request.h”
module AP_MODULE_DECLARE_DATA c_module;
static int c_handler(request_rec *r)
{
r->content_type=”text/plain”;
ap_rprintf(r,”handler:%s\n”,r->handler);
ap_rprintf(r,”query string:%s\n”,r->args);
ap_rprintf(r,”filename:%s\n”,r->filename);
return OK;
}
static void register_hooks(apr_pool_t *p)
{
ap_hook_handler(c_handler, NULL, NULL, APR_HOOK_MIDDLE);
}
module AP_MODULE_DECLARE_DATA c_module = {
STANDARD20_MODULE_STUFF,
NULL,
NULL,
NULL,
NULL,
NULL,
register_hooks
};
编译并安装这个模块(apache提供的apxs非常好):
$ ./bin/apxs -c ./mod_c.c
$ ./bin/apxs -a -i -n c mod_c.la
这时apxs会自动帮我们把编译好的mod_c.so安装到modules/目录中,而且httpd.conf中已经把这个module load进去了:
[root@cn-weblog apache2.2.4]# grep mod_c conf/httpd.conf
LoadModule c_module modules/mod_c.so
测试这个模块:
$ ./bin/apachectl stop
$ ./bin/apachectl start
在IE中访问http://myhostname/index.html?query=yy
IE中会出现:
handler:text/html
query string:query=yy
filename:/usr/local/apache2.2.4/htdocs/index.html
说明该module运行成功。
把上面的module简单解释一下。
所有的apache module都必须是这个结构体,里面要定义各个内容。
module AP_MODULE_DECLARE_DATA c_module = {
STANDARD20_MODULE_STUFF,
NULL,
NULL,
NULL,
NULL,
//上面4项都是定义httpd.conf中命令的作用的
NULL, //定义在httpd.conf中添加的命令,和各命令的处理函数
register_hooks //hooks,定义什么时候执行我们这个module的相关函数
};
ap_hook_handler(c_handler, NULL, NULL, APR_HOOK_MIDDLE);
表示在处理内容请求时调用我们函数–c_handler
同样的状态还有
OK : 成功请求
DECLINED :忽略
HTTP_METHOD_NOT_ALLOWED :错误处理
http://httpd.apache.org/docs/2.2/developer/
提供了非常不错的文档,可以参考一下。
分享到:
相关推荐
http://tomcat.apache.org/download-70.cgi http://tomcat.apache.org/download-70.cgi
该jar包解决报错java.lang.NoClassDefFoundError: org/apache/james/mime4j/MimeException,亲测可用。
at org.apache.axis.message.SOAPFaultBuilder.endElement(SOAPFaultBuilder. java:169) at org.apache.axis.encoding.DeserializationContextImpl.endElement(Deseri alizationContextImpl.java:1015) at ...
json-lib-2.2.3-jdk15.jar commons-beanutils-1.7.0.jar commons-httpclient-3.1.jar ...要在java里使用json用到的jar包怎么导入?把包粘贴到WebRootWEB-INFlib目录下就行了 不用自己单独建立libs目录
Apache模块开发指南
Apache的开发人员认识到Apache 最初的架构具有局限性,比较粗糙,于是在2000年开始建立新的代码仓库(codebase)主分支,并在此代码仓库的基础上于2002年4月创建了Apache2.0的第一个发布版本。Apache 2包括以下优良...
今天在使用IDEA创建Maven的webapp时遇见这样一个不叫问题的问题: Downloading from central: https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-archetype-plugin/maven-metadata.xml 很奇怪,我的...
apache可以通过扩展它的模块来实现自定义功能,apache 模块开发的例子,欢迎交流。
《LAMP技术精品书廊•Apache模块开发指南》主要介绍了Apache模块开发的全过程。全面细致、深入浅出,主要内容包括Apache相关背景、APR的基础知识,以及利用Apache模块开发的全过程,适合广大在Apache环境下的模块...
json-lib-2.2.3-jdk15.jar commons-beanutils-1.7.0.jar commons-httpclient-3.1.jar commons-lang-2.3.jar commons-logging-1.1.1.jar ...java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
apache模块开发指南,汉语版,很辛苦找到的。
json-lib-2.2.3-jdk15.jar commons-beanutils-1.7.0.jar commons-httpclient-3.1.jar commons-lang-2.3.jar commons-logging-1.1.1.jar ...java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
自己在项目开发中用到的apache模块开发工具apxs,重要的是这个工具在windows环境下的安装方法和使用方法,非常珍贵,泣血推荐
apache下载This is a binary package release of the Apache httpd server. Version : 2.4.6 License : http://www.apache.org/licenses/LICENSE-2.0.txt built by : G. Knauf <fuankg@apache.org> Requirements :...
学习apache模块开发的基础学习文档,非常好用。
C语言-apache mod(模块开发)-采用VS2017开发范例
commons-lang3.3.1.jar、Apache Commons包中的一个,包含了一些数据类型工具类,是java.lang.*的扩展。必须使用的jar包。为JRE5.0+的更好的版本所提供 Jar文件包含的类: META-INF/MANIFEST.MFMETA-INF/LICENSE....
Apache Maven What is it? ----------- Maven is a software project management and comprehension tool. Based on the concept of a Project Object Model (POM), Maven can manage a project's build, ...
写一个APACHE2.0的MOD模块,读取配置,并对所有后缀为.hello的请求进行处理。
安装apache mysql php 手册 开发apache扩展模块方法, php扩展模块方法