学习apache模块开发已经快两个星期了,感觉搞apache模块开发挺有意思的,下面来讲讲apache模块开发的helloworld,非常简单。
Apache 模块开发主要采用挂钩子的方法来实现模块开发的,这和linux内核模块开发有点像,说白了就是加一个回调函数。下面我们来讲 这个例子吧。
首先来介绍下apache的一个工具apxs。apxs是一个为Apache HTTP服务器编译和安装扩展模块的工具,用于编译一个或多个源程序或目标代码文件为动态共享对象,使之可以用由mod_so提供的LoadModule指令在运行时加载到Apache服务器中。
1.apxs -g -n helloworld
上面的命令可以帮助我们产生一个模块名字为helloworld的模板。
上面的命令会产生以下代码
#include "httpd.h"
#include "http_config.h"
#include "http_protocol.h"
#include "ap_config.h"
/* The sample content handler */
static int helloworld_handler(request_rec *r)
{
if (strcmp(r->handler, "helloworld")) {
return DECLINED;
}
r->content_type = "text/html";
if (!r->header_only)
ap_rputs("The sample page from mod_helloworld.c\n", r);
return OK;
}
static void helloworld_register_hooks(apr_pool_t *p)
{
ap_hook_handler(helloworld_handler, NULL, NULL, APR_HOOK_MIDDLE);
}
/* Dispatch list for API hooks */
module AP_MODULE_DECLARE_DATA helloworld_module = {
STANDARD20_MODULE_STUFF, //用于编译后的模块产生版本信息
NULL, /* 创建目录配置结构*/
NULL, /* 合并目录配置结构 */
NULL, /* 创建主机配置结构 */
NULL, /* 合并主机配置结构 */
NULL, /* 为模块配置相关指令 */
helloworld_register_hooks /* 注册模块的钩子函数 */
};
我们来看下helloworld_module这个结构体,它没个成员的具体作用请看注释。
它最关键的参数为最后一个,这个参数是一个注册钩子函数指针,也就是说当我们把模块加入到apache里面去的时候,他会执行这个注册函数。在这个函数里面我们将会注册我们所要添加的钩子。
本例子中我们用的是
ap_hook_handler(helloworld_handler, NULL, NULL, APR_HOOK_MIDDLE);
这个处理函数,这个处理函数注册了helloworld_handler这个函数。这个函数用于处理我们的请求。
我们来讲下执行的顺序,模块加载-》执行helloworld_register_hooks函数-》注册helloworld_handler这个函数到钩子上去。
这样一来:当一个http请求来的时候,我们就会自动去执行helloworld_handler这个函数。本例子是一个非常简单的内容生成器。
if (strcmp(r->handler, "helloworld")) {//判断是否是这个helloworld handler
return DECLINED;//
}
r->content_type = "text/html";
if (!r->header_only)
ap_rputs("The sample page from mod_helloworld.c\n", r);//内容生成
return OK;
下面我们将来进行编译
执行:apxs -c mod_helloworld.c
执行成功以后我们可以发现在.libs下面会出现mod_helloworld.so这个模块文件。这就是我们所需要的,对于apache一些自带的模块一般都放在安装目录的modules/下面。
下面我们来对其进行配置
打开httpd.conf文件,添加以下信息
LoadModule helloworld_module *****// 指定.so文件的路径。
<Location /helloworld>
setHandler helloworld
</Location>
Ok ,重启apache 然后输入 http://loacalhost/helloworld 就可以看到
The sample page from mod_helloworld.c
当然这里这里只是输出一句话,我们也可以打印很多html信息,就类似于servlet一样。
这样一来一个简单的apache内容生成器模块已经开发好了,当然应用比较广泛的是过滤器模块的开发,最近项目主要也是用过滤器来实现的。
apache 可以开发出一些功能非常强大的模块来,可以为我们定制更好的apache,比如容器中应用的流量统计,cpu统计等。
才学不久,还不怎么懂,欢迎大家交流。
分享到:
相关推荐
《Apache模块开发实例.doc》可能是系列教程的第一步,它可能包含了一些基本的模块开发示例,比如如何创建一个简单的"Hello, World!"模块,通过这个实例,读者可以了解模块的基本结构和工作原理。 《指南.doc》可能...
《 Maven入门:从 HelloWorld 开始 》 在Java开发领域,Maven是一个不可或缺的构建工具,它极大地简化了项目的构建、依赖管理和部署过程。本文将深入讲解如何使用Maven,并通过一个基础的“Hello World”项目来演示...
apache扩展模块开发工具,可以在Windows平台下生成并编译模块文件(*.so)。将文件放在apache的bin目录下。 生成一个模块文件命令语法: apxs -g -n helloworld。 该命令会自动生成一个文件夹helloworld,并含有mod_...
首先,理解Apache模块开发的基础知识是至关重要的。Apache模块分为核心模块、标准模块和第三方模块,它们在Apache启动时被加载,提供各种功能,如URL处理、身份验证、日志记录等。模块通常通过Apache的API接口与...
### Apache 2.0 MOD 模块开发:处理 .hello 请求 #### 一、概述 本文将详细介绍如何为Apache 2.0开发一个名为 `mod_hello` 的自定义模块,该模块的功能是读取配置文件中的特定设置,并针对URL路径中以 `.hello` ...
### Django之Apache mod_python安装及HelloWorld #### 一、理解Django与Apache mod_python集成 **Django**是一款开源的、基于Python的Web框架,它遵循MVC(Model-View-Controller)设计模式,旨在简化网站开发过程...
**Mina入门:Mina版之HelloWorld** Apache Mina是一个开源项目,它提供了一个高度模块化、高性能的网络通信框架。Mina旨在简化网络应用的开发,支持多种传输协议,如TCP、UDP、HTTP、FTP等。在这个“Mina入门:Mina...
这个"Struts2 HelloWorld 例子"是初学者学习Struts2框架的基础教程,通过MyEclipse集成开发环境来运行。下面我们将深入探讨Struts2的核心概念和在这个HelloWorld示例中的应用。 首先,Struts2框架是Apache软件基金...
记得刚开始的时候想进行apache模块开发的时候找了好多资料,不过大都是英文文档,几乎没有做系统讲解的。国内的图书更是没有这方面的,在Amozon搜索了下,找到了《Writing Apache Modules with Perl and C》和《The ...
本书不仅是一本技术指南,更是一本实践手册,它不仅提供了丰富的理论知识,还通过大量的示例代码和实践案例帮助读者深入理解Apache模块开发的核心概念和技术细节。无论是对于初学者还是有一定经验的开发者来说,这...
这个“Struts2--HelloWorld”示例将引导我们深入理解Struts2的基础知识和核心概念。 在Java web开发中,Struts2框架提供了一个灵活的请求处理机制,它简化了业务逻辑与表现层的集成。通过使用Action类,我们可以...
这只是一个基础入门,Spring MVC的强大之处在于其灵活的配置、丰富的注解以及对其他Spring模块的无缝集成,可以满足复杂Web应用的需求。在实际开发中,你可以进一步学习`@RequestParam`、`@PathVariable`等注解以...
总的来说,"OSGi -- Helloworld 学习记录一"这篇博文对于初学者来说是一个很好的起点,它引导读者逐步踏入OSGi的世界,通过实际操作理解这个强大的模块化系统的运作机制。通过深入研究和实践,开发者可以更好地掌握...
标题 "springMvc helloworld及springMvc多种视图" 暗示了我们将探讨Spring MVC的基础概念,以及如何在实际应用中实现一个简单的“Hello World”示例,同时也会涉及Spring MVC支持的不同视图技术。 首先,Spring MVC...
**IntelliJ IDEA OSGI HelloWorld程序详解** OSGi(Open Service Gateway Initiative)是一个Java模块化系统和标准,它允许开发人员将应用程序分解为独立的模块,这些模块可以在运行时动态地安装、卸载和升级,而不...
本主题聚焦于“java接口自动化”,通过一个名为“helloworld20191029.zip”的压缩包文件,我们可以看到一个全流程的接口自动化代码实现,涉及到的关键技术包括httpClient、Spring Boot、MyBatis以及Swagger等多个...
标题 "spring mybatis helloworld" 暗示我们要探讨的是如何在Java环境下使用Spring和MyBatis框架构建一个基础的Hello World应用。Spring是一个全面的、模块化的应用程序框架,而MyBatis则是一个轻量级的持久层框架,...
在本教程中,我们将深入探讨如何使用Apache CXF 3.0与Spring 3.2框架构建一个简单的"Hello World" Web服务实例。这个过程涵盖了关键的技术组件、配置步骤以及可能遇到的问题解决策略。 首先,Apache CXF是一个开源...
Spring MVC 是一款强大的 Web 开发框架,它的 "Hello, World!" 程序只是一个简单的起点。随着对框架的深入学习,你可以利用其各种功能来构建复杂的 Web 应用。通过注解驱动的编程模型,Spring MVC 使得代码更简洁,...
在本文中,我们将深入探讨如何使用Spring MVC框架创建一个简单的"Hello, World!"应用程序,并结合Eclipse集成开发环境(IDE)进行开发。Spring MVC是Spring框架的一个模块,它专门用于构建Web应用程序,提供了模型-...