`
andrew913
  • 浏览: 188826 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

apache模块开发之helloworld

阅读更多
学习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统计等。

才学不久,还不怎么懂,欢迎大家交流。

4
0
分享到:
评论
9 楼 andrew913 2009-06-02  
anry513 写道

www.loveopensource.com上有些apache module的开发文章,你可以看看,希望对你有帮助

非常感谢
8 楼 andrew913 2009-06-02  
annoation可以不可以看出hook?
rrsy23 写道

看了哈 不错;不过 很有感触;其实我们开发servlet也一样;只是apache通过hook,servlet通过xml配置文件;还有annoation可以不可以看出hook?

工作层次不一样,apache模块开发主要应用于一些服务器端开发,比如 流量限制,监控等,我也是最近才开始接触,这边要做一个类似于goole app的东西,所以需要开发一些apache模块。
7 楼 rrsy23 2009-06-02  
看了哈 不错;

不过 很有感触;

其实我们开发servlet也一样;

只是apache通过hook,servlet通过xml配置文件;

还有annoation可以不可以看出hook?
6 楼 anry513 2009-06-01  
www.loveopensource.com上有些apache module的开发文章,你可以看看,希望对你有帮助
5 楼 buluzhai 2009-05-31  
google_fans 写道

有一本叫apache 模块开发指南的书,我现在在看。这东西主要靠自己去琢磨。

谢谢,有空找来看一下
4 楼 jindw 2009-05-31  
看上去真的不错,呵呵,学习了
3 楼 google_fans 2009-05-31  
有一本叫apache 模块开发指南的书,我现在在看。
这东西主要靠自己去琢磨。
2 楼 buluzhai 2009-05-30  
请问在哪儿可以找到apache 核心机制的文章呢
1 楼 lmxbitihero 2009-05-30  
挺有意思。

相关推荐

    apache模块开发入门级资料

    《Apache模块开发实例.doc》可能是系列教程的第一步,它可能包含了一些基本的模块开发示例,比如如何创建一个简单的"Hello, World!"模块,通过这个实例,读者可以了解模块的基本结构和工作原理。 《指南.doc》可能...

    helloworld.rar

    《 Maven入门:从 HelloWorld 开始 》 在Java开发领域,Maven是一个不可或缺的构建工具,它极大地简化了项目的构建、依赖管理和部署过程。本文将深入讲解如何使用Maven,并通过一个基础的“Hello World”项目来演示...

    apache扩展模块开发工具apxs

    apache扩展模块开发工具,可以在Windows平台下生成并编译模块文件(*.so)。将文件放在apache的bin目录下。 生成一个模块文件命令语法: apxs -g -n helloworld。 该命令会自动生成一个文件夹helloworld,并含有mod_...

    C语言-apache mod(模块开发)-采用VS2017开发范例

    首先,理解Apache模块开发的基础知识是至关重要的。Apache模块分为核心模块、标准模块和第三方模块,它们在Apache启动时被加载,提供各种功能,如URL处理、身份验证、日志记录等。模块通常通过Apache的API接口与...

    APACHE2.0_MOD_模块开发(C语言)

    ### Apache 2.0 MOD 模块开发:处理 .hello 请求 #### 一、概述 本文将详细介绍如何为Apache 2.0开发一个名为 `mod_hello` 的自定义模块,该模块的功能是读取配置文件中的特定设置,并针对URL路径中以 `.hello` ...

    Django之Apache mod_python安装及HelloWorld.docx

    ### Django之Apache mod_python安装及HelloWorld #### 一、理解Django与Apache mod_python集成 **Django**是一款开源的、基于Python的Web框架,它遵循MVC(Model-View-Controller)设计模式,旨在简化网站开发过程...

    Mina入门:mina版之HelloWorld

    **Mina入门:Mina版之HelloWorld** Apache Mina是一个开源项目,它提供了一个高度模块化、高性能的网络通信框架。Mina旨在简化网络应用的开发,支持多种传输协议,如TCP、UDP、HTTP、FTP等。在这个“Mina入门:Mina...

    Struts2 HelloWorld 例子

    这个"Struts2 HelloWorld 例子"是初学者学习Struts2框架的基础教程,通过MyEclipse集成开发环境来运行。下面我们将深入探讨Struts2的核心概念和在这个HelloWorld示例中的应用。 首先,Struts2框架是Apache软件基金...

    The Apache Modules Book Application Development with Apache

    记得刚开始的时候想进行apache模块开发的时候找了好多资料,不过大都是英文文档,几乎没有做系统讲解的。国内的图书更是没有这方面的,在Amozon搜索了下,找到了《Writing Apache Modules with Perl and C》和《The ...

    Writing Apache Modules with Perl and C

    本书不仅是一本技术指南,更是一本实践手册,它不仅提供了丰富的理论知识,还通过大量的示例代码和实践案例帮助读者深入理解Apache模块开发的核心概念和技术细节。无论是对于初学者还是有一定经验的开发者来说,这...

    Struts2--HelloWorld

    这个“Struts2--HelloWorld”示例将引导我们深入理解Struts2的基础知识和核心概念。 在Java web开发中,Struts2框架提供了一个灵活的请求处理机制,它简化了业务逻辑与表现层的集成。通过使用Action类,我们可以...

    spring3.0 mvc 注解实现helloworld输出

    这只是一个基础入门,Spring MVC的强大之处在于其灵活的配置、丰富的注解以及对其他Spring模块的无缝集成,可以满足复杂Web应用的需求。在实际开发中,你可以进一步学习`@RequestParam`、`@PathVariable`等注解以...

    OSGi -- Helloworld 学习记录一

    总的来说,"OSGi -- Helloworld 学习记录一"这篇博文对于初学者来说是一个很好的起点,它引导读者逐步踏入OSGi的世界,通过实际操作理解这个强大的模块化系统的运作机制。通过深入研究和实践,开发者可以更好地掌握...

    springMvc helloworld及springMvc多种视图

    标题 "springMvc helloworld及springMvc多种视图" 暗示了我们将探讨Spring MVC的基础概念,以及如何在实际应用中实现一个简单的“Hello World”示例,同时也会涉及Spring MVC支持的不同视图技术。 首先,Spring MVC...

    IntelliJ IDEA OSGI helloworld

    **IntelliJ IDEA OSGI HelloWorld程序详解** OSGi(Open Service Gateway Initiative)是一个Java模块化系统和标准,它允许开发人员将应用程序分解为独立的模块,这些模块可以在运行时动态地安装、卸载和升级,而不...

    helloworld20191029.zip

    本主题聚焦于“java接口自动化”,通过一个名为“helloworld20191029.zip”的压缩包文件,我们可以看到一个全流程的接口自动化代码实现,涉及到的关键技术包括httpClient、Spring Boot、MyBatis以及Swagger等多个...

    spring mybatis helloworld

    标题 "spring mybatis helloworld" 暗示我们要探讨的是如何在Java环境下使用Spring和MyBatis框架构建一个基础的Hello World应用。Spring是一个全面的、模块化的应用程序框架,而MyBatis则是一个轻量级的持久层框架,...

    CXF3.0+Spring3.2 HelloWorld实例

    在本教程中,我们将深入探讨如何使用Apache CXF 3.0与Spring 3.2框架构建一个简单的"Hello World" Web服务实例。这个过程涵盖了关键的技术组件、配置步骤以及可能遇到的问题解决策略。 首先,Apache CXF是一个开源...

    SpringMvc HelloWorld

    Spring MVC 是一款强大的 Web 开发框架,它的 "Hello, World!" 程序只是一个简单的起点。随着对框架的深入学习,你可以利用其各种功能来构建复杂的 Web 应用。通过注解驱动的编程模型,Spring MVC 使得代码更简洁,...

    使用springmvc框架编写helloworld,使用eclispe开发工具

    在本文中,我们将深入探讨如何使用Spring MVC框架创建一个简单的"Hello, World!"应用程序,并结合Eclipse集成开发环境(IDE)进行开发。Spring MVC是Spring框架的一个模块,它专门用于构建Web应用程序,提供了模型-...

Global site tag (gtag.js) - Google Analytics