- 浏览: 3519182 次
- 性别:
- 来自: 北京
-
文章分类
最新评论
-
wanglf1207:
EJB的确是个不错的产品,只是因为用起来有点门槛,招来太多人吐 ...
weblogic-ejb-jar.xml的元素解析 -
qwfys200:
总结的不错。
Spring Web Flow 2.0 入门 -
u011577913:
u011577913 写道也能给我发一份翻译文档? 邮件437 ...
Hazelcast 参考文档-4 -
u011577913:
也能给我发一份翻译文档?
Hazelcast 参考文档-4 -
songzj001:
DbUnit入门实战
自Apache2.0以来Apache就是一个开放的平台,开发人员可以轻松的为Apache编写模块。我下面要讲的例子是摘自Apache Modules Book一书。
mod_helloworld是一个内容生成模块(content
generator),它及其简单,但是他却可以反映编写Apache模块的基本概念。在以后的博文中,我会扩展这个helloworld模块,让它可以
像简单的CGI一样访问request header、环境变量、处理表单数据等等。不过现在让我们尽快的开始我们的helloworld吧。
安装Apache
要编写Apache模块首先肯定要按照Aapche,这里选择从源码安装,笔者在写这篇文章时Apache的版本是2.2.10。
解压
tar zvxf httpd-2.2.10.tar.gz
配置
./configure --prefix=/usr/local/apache2 --enable-so --enable-mods-shared=most
编译安装
make
make install
(超级用户)
功能
当用户在浏览器中输入http://www.xxx.com/hellworld/时,helloworld模块会在浏览器上显示一个大大的Hello Apache module的字样。
编写模块
好了,我们现在已经有环境了,bin目录下有个对开发人员最重要的工具apxs,它其实是个脚本,用来方便我们编译安装apache模块。
模块框架
所有Apache模块都要将它的module数据结构导出(exporting),对Apache2.x模块来说,导出module的形式如下:
module AP_MODULE_DECLARE_DATA some_module = {
STANDARD20_MODULE_STUFF,
some_dir_cfg, /* create per-directory config struct */
some_dir_merge, /* merge per-directory config struct */
some_svr_cfg, /* create per-host config struct */
some_svr_merge, /* merge per-host config struct */
some_cmds, /* configuration directives for this module */
some_hooks /* register module's hooks/etc. with the core */
};
STANDARD20_MODULE_STUFF宏展开,它提供了模块的版本信息。在这里我们不对他做深入的研究,有兴趣了解的可以阅读Apache的源代码。
对于helloworld模块,我们这里只考虑模块的最后一个字段,他注册模块个钩子(hooks)。helloworld模块的module结构如下:
module AP_MODULE_DECLARE_DATA helloworld_module = {
STANDARD20_MODULE_STUFF,
NULL,
NULL,
NULL,
NULL,
NULL,
helloworld_hooks
};
现在我们来写钩子注册函数,它会在Apache服务启动时调用。它的用途是把我们的处理函数注册给服务器核心(server
core),这样模块的函数就会在适当的时机得到调用。对于helloworld来说,我们这样仅仅注册一个”内容生成“类型的钩子(Apache有很多
类型的钩子)
static void helloworld_hooks(apr_pool_t *pool)
{
ap_hook_handler(helloworld_handler, NULL, NULL, APR_HOOK_MIDDLE);
}
最后当然是实现处理函数helloworld_handler啦。它是一个回调函数,他会在Apache处理HTTP请求的适当时机调用。处理函数可以选择处理或是忽略这个请求。
static int helloworld_handler(request_rec *r)
{
if (!r->handler || strcmp(r->handler, "helloworld")) {
return DECLINED;
}
if (r->method_number != M_GET) {
return HTTP_METHOD_NOT_ALLOWED;
}
ap_set_content_type(r, "text/html;charset=ascii");
ap_rputs("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\">\n", r);
ap_rputs("<html><head><title>Hello Apache Module</title></head>", r);
ap_rputs("<body><h1>Hello Apache Module</h1>", r);
ap_rputs("</body></html>", r);
return OK;
}
我们开始做一些检查,来决定模块是处理这个请求还是忽略它。返回DECLINED表示忽略,OK表示成功处理,也可返回HTTP状态代码(HTTP status code)表示错误处理。
全部放在一起
/* The simplest HelloWorld module */
#include <httpd.h>
#include <http_protocol.h>
#include <http_config.h>
static int helloworld_handler(request_rec *r)
{
if (!r->handler || strcmp(r->handler, "helloworld")) {
return DECLINED;
}
if (r->method_number != M_GET) {
return HTTP_METHOD_NOT_ALLOWED;
}
ap_set_content_type(r, "text/html;charset=ascii");
ap_rputs("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\">\n", r);
ap_rputs("<html><head><title>Hello Apache Module</title></head>", r);
ap_rputs("<body><h1>Hello Apache Module</h1>", r);
ap_rputs("</body></html>", r);
return OK;
}
static void helloworld_hooks(apr_pool_t *pool)
{
ap_hook_handler(helloworld_handler, NULL, NULL, APR_HOOK_MIDDLE);
}
module AP_MODULE_DECLARE_DATA helloworld_module = {
STANDARD20_MODULE_STUFF,
NULL,
NULL,
NULL,
NULL,
NULL,
helloworld_hooks
};
注意:helloworld_hooks和helloworld_handler都是static的。一般来说,只有模块结构被导出,其他的都是模块自己私有的。这是一个好的实践。
编译安装
apxs -c mod_helloworld.c (编译)
apxs -i mod_helloworld.la (安装)
这样我们的modules目录中就多了一个mod_helloworld.so的文件
运行
要运行我们还要修改配置文件httpd.conf
在最后添加
LoadModule helloworld_module modules/mod_helloworld.so
<Location /helloworld>
SetHandler helloworld
</Location>
第一行是让Apache动态的载入这个模块。
第二行设置浏览器的请求url的路径。
SetHandler helloworld其实是设置r->handler的值。
别忘了重启Apache哦!
最后在浏览器中敲入http://localhost/hellworld,就可以看到令人兴奋的效果了。
发表评论
-
使用iconv进行内码转换(Big5->GB2312)
2012-02-26 00:56 3564i conv 是一个通过unicode 作为中间码 ... -
关于IObjectSafety和ActiveX组件的脚本安全
2011-11-17 19:19 3143都说ActiveX 危险,那么 ... -
在此页上的 ActiveX 控件和本页上的其它部份的交互可能不安全。你想允许这种交互
2011-11-17 19:09 14873如果采用VC++开发的ActiveX,那么第一次运行的时候,I ... -
如何编写 INF 文件
2011-11-16 14:31 2208INF文件全称Information File文件,是Wino ... -
MINGW GCC 4.3.0 安装与配置(解决CREATEPROCESS问题)
2011-07-28 23:53 4730首先,下载Mingw TDM 4.3.0版本http:// ... -
“没有找到MSVCP90D.dll”的解决办法
2011-04-02 00:21 4742出现这个bug的缘故是 ... -
DSO开发指南晋级(APACHE2.0 MOD 模块开发)
2010-09-23 04:23 2393APACHE2.0 MOD 模块开发 STEP ... -
ubuntu 7.10里装apxs2
2010-09-23 03:43 2003install apache2-prefork-dev ... -
codeblocks中plugin的实现
2010-02-16 00:47 3342快乐虾 http://blog.csdn.net/lig ... -
Ubuntu 下安装 Code::Blocks
2010-02-15 23:41 12064在Linux环境下,就不同 ... -
C/C++ IDE Code::Blocks安装过程
2010-02-15 23:27 55801.简介 Code::Blocks,有时 ... -
CodeLite可以媲美Code::Blocks
2010-02-15 21:27 41717CodeLite简单就是为wxWidgets/wxFormBu ... -
APR中的单元测试框架:深入分析内部实现
2010-01-02 17:19 1895APR单元测试框架实现的实在简单,除了断言集之外ABTS只向外 ... -
APR中的单元测试框架:初步分析及使用
2010-01-02 17:19 1927我所了解的C的单元测试框架很少,至少我google了一把没有发 ... -
使用apr-util中的DBD API
2010-01-02 17:15 30731. 简介 在Apache2.1版本中引入了DBD ... -
gsoap 的教程和使用
2009-07-09 13:03 310021.1.1 gSOAP 1.1.1 ... -
C++ dlopen mini HOWTO 中译版
2009-06-27 16:09 2501C++ dlopen mini HOWTO 作者 ... -
BEA Tuxedo
2009-04-02 13:44 3154参数纠错 Tuxedo(Transaction for U ...
相关推荐
- **ProxyModule:** 利用Apache的Proxy模块将请求转发至Zope服务器。 - **RewriteModule:** 通过重写规则将特定URL路径下的请求重定向至Zope服务器处理。 - **配置示例:** - 在Apache配置文件`httpd.conf`中,...
echo "Hello, World!"; ?> ``` **2. 剖析最简单的PHP程序** - `<?php ... ?>`:PHP脚本的开始和结束标签。 - `echo`:PHP的输出函数,用于打印字符串到标准输出。 - `"`:双引号字符串,可以包含变量和表达式。 *...
内容概要:本文详细介绍了香蕉成熟度分类的YOLO格式目标检测数据集,涵盖数据集结构、标签格式、数据集划分及其在目标检测中的应用。数据集包含18074张图像,分为训练集、验证集和测试集。标签文件采用YOLO格式,记录了每个目标物体的类别ID、中心坐标和宽高。文中还提供了Python代码示例,展示了如何读取和解析标签文件、进行数据集划分、加载和可视化数据,以及使用YOLOv8进行模型训练和推理。此外,讨论了数据增强、类别不平衡等问题的解决方案,强调了数据质量和模型优化的重要性。 适合人群:从事计算机视觉研究和技术开发的专业人士,尤其是对目标检测感兴趣的开发者。 使用场景及目标:适用于需要进行目标检测特别是香蕉成熟度分类的研究项目。主要目标是帮助研究人员更好地理解和利用YOLO格式数据集,提高模型训练效率和准确性。 其他说明:文中提供的代码片段和配置文件示例有助于读者快速上手实践,同时提醒了一些常见问题和注意事项,如数据集类别ID的连续性和样本不均衡处理等。
浙江大学第二弹:DeepSeek模型解读
内容概要:本文详细介绍了如何利用MATLAB构建齿轮-轴-轴承系统的含间隙非线性动力学模型,并对其动态特性进行了深入分析。首先,通过牛顿第二定律和修正Capone模型的雷诺方程建立了系统的非线性动力学方程。接着,展示了具体的MATLAB代码实现,包括参数设定、微分方程求解以及图像绘制。通过对不同转速下的位移-速度图像的观察,揭示了系统的混沌特性和动态响应。此外,文章还探讨了齿轮啮合的非线性刚度和轴承油膜力的影响,强调了这些因素对系统稳定性的重要作用。 适合人群:机械工程领域的研究人员和技术人员,尤其是那些对非线性动力学感兴趣的学者。 使用场景及目标:适用于研究齿轮-轴-轴承系统的动态特性,特别是用于分析系统在不同工况下的稳定性、响应速度和混沌现象。目标是通过数值模拟和理论分析相结合的方式,优化机械系统的设计。 其他说明:文中提供了详细的MATLAB代码示例,便于读者理解和实践。同时,文章还讨论了一些实用的调试技巧和注意事项,有助于提高仿真的效率和准确性。
【案例】浅谈电商运营模型及会员体系(15页 PPT)
内容概要:本文详细探讨了基于图神经网络(GNN)的Few-Shot小样本学习的实现方法及其在图像识别领域的应用。文章首先介绍了图形模型的构成,解释了如何将输入图像转化为图结构,并通过图神经网络进行信息传递和特征提取。接着,文章深入解析了图神经网络的具体结构和实现代码,包括图构建、消息传递层以及门控机制等关键技术。此外,文中还讨论了该模型的强大扩展性和适应性,如应用于半监督学习和主动学习场景,并展示了其在miniImageNet等数据集上的优异性能。最后,文章分享了一些实用技巧,如数据增强方法和优化策略,进一步提升了模型的表现。 适合人群:对机器学习特别是小样本学习感兴趣的科研人员和技术开发者。 使用场景及目标:适用于需要处理少量标注数据的任务,如快速识别新类别物体、跨域迁移学习等。目标是提高模型在小样本条件下的泛化能力和准确性。 其他说明:文章提供了详细的代码示例和实验结果,有助于读者理解和复现相关工作。同时,强调了图神经网络在捕捉数据间关系方面的独特优势,为解决小样本学习问题提供了新的思路。
# 基于Vue.js框架的商品管理系统 ## 项目简介 本项目是一个基于Vue.js框架搭建的商品管理系统,整合了商品分类、参数、列表管理,权限管理,订单管理以及数据统计等核心功能。项目采用模块化设计理念,代码结构清晰,便于后续维护与扩展。 ## 项目的主要特性和功能 1. 登录与权限管理 实现用户登录功能,验证用户信息,登录成功后存储token至客户端sessionStorage,确保项目其他接口在登录状态下可访问。 具备路由导航守卫,控制路由导航权限,防止未登录用户访问受限页面。 支持权限列表和角色列表管理,可进行角色的添加、修改、删除操作,为角色分配权限,为用户分配角色。 2. 商品管理 分类管理支持商品分类的添加、修改、删除,提供级联选择器选择父级分类。 参数管理管理商品的参数信息,支持添加、修改、删除参数,可根据分类选择展示对应参数。
《微信小程序掌上就医宝》的源码是一套基于微信平台开发的医疗健康服务系统,它集成了多种便捷功能,旨在提升患者的就医体验。该源码支持自助建档、预约挂号、门诊缴费、预交押金、报告查询、住院清单查询等业务办理,同时还提供专家出诊信息、健康宣教、就医须知及便民服务等功能。 使用该源码,患者可以通过微信公众号或小程序轻松预约医生号源,选择最合适的时间段就诊,避免长时间排队等待。此外,还支持挂号费用的在线支付(医保或自费),无需现场排队,节省时间。门诊就诊后,患者可以直接通过手机完成处方或检查检验项目的支付,无需再去收费口排队。对于在医院进行的检查及检验,患者可以通过公众号随时查询结果,不必再跑医院领取。 该源码适用于各级公立和民营医院、乡镇卫生院等医疗机构,可用于搭建互联网医院平台,实现与院内HIS、LIS、PACS系统的无缝对接。它是一套功能强大、实用性高的医疗健康服务解决方案,为患者提供了更加便捷、高效的医疗服务体验。请注意,本资源仅用于学习交流,严禁用于商业用途!
DeepSeek 提示词设计、幻觉避免与应用(50页)
内容概要:本文探讨了基于非合作博弈的居民负荷分层调度模型,旨在解决电力领域中居民用户柔性负荷资源的有效参与需求响应的问题。文中介绍了模型的构建思路,包括日前投标环节和实时调度环节的具体实现方式。日前投标环节通过非合作博弈思想构建以聚合商利润最大化为目标的博弈模型,并证明纳什均衡解的存在性。实时调度环节则以分类柔性负荷各自的用电物理特性为约束条件,以实时调度和日前投标量之间的偏差最小为目标函数。此外,还采用了双层鲸鱼算法来求解整个模型,确保在不影响用户舒适度的前提下提高聚合商的利润。仿真结果显示,该模型能够在提升电网稳定性的同时,兼顾用户舒适度和聚合商利润。 适用人群:适用于对电力调度、博弈论以及优化算法感兴趣的科研人员和技术开发者。 使用场景及目标:该模型主要用于电力系统的优化调度,特别是在需求响应管理中,帮助电网公司、负荷聚合商和居民用户实现三方共赢。具体应用场景包括电力市场竞价、居民用电负荷调控等。 其他说明:文章不仅提供了详细的理论背景介绍,还包括了具体的代码实现示例,有助于读者深入理解和实际应用。
数据说明: 该数据集包含4个不同地形类别(沙漠、森林、山脉和平原)的3196张图像,对于许多应用具有巨大的潜力。每个类别代表一个独特的生态景观,为研究人员和实践者提供了对多种地形类型的全面视角。从沙漠的干旱广阔到森林的郁郁葱葱,从山脉的崎岖地形到广阔的平原,该数据集囊括了地球表面的丰富性和多样性。 该数据集的一个重要应用是土地分类。通过利用卷积神经网络(CNN)等机器学习技术,研究人员可以自动训练模型根据航空图像分类地形类型。这种能力对土地管理、环境监测和城市规划有着深远的影响。准确的分类使利益攸关方能够就资源分配、生境保护和可持续发展倡议作出知情的决定。 地理分析是另一个关键领域,该数据集在其中具有实用价值。地理学家和研究人员可以利用该数据集研究不同地形类型的土地覆盖变化、生态系统动态和地理模式。通过分析每个类别中特征的空间分布,可以深入了解栖息地碎片化、生物多样性热点和土地利用趋势。此类分析有助于了解地球的地貌,并为保护工作和政策制定提供信息。
《图书馆门户小程序源码及手册简介》 本资源是一套极具价值的学习资源——图书馆门户小程序源码及使用手册。该小程序功能丰富且全面,前后端完整代码一应俱全。它涵盖了图书馆的多个重要功能模块,如“本馆动态”,能让用户及时了解图书馆的最新资讯;“新书来了”方便读者知晓新书上架情况;“书籍榜单”助力用户发现热门书籍;“服务指南”为读者提供各类服务的详细指引;“进馆预约”和“活动讲座预约”则满足了读者对图书馆空间及文化活动的参与需求。通过研读这份源码和使用手册,学习者可以深入了解图书馆小程序的开发逻辑、架构设计以及功能实现方式,无论是对于想要提升编程能力的开发者,还是希望探索图书馆数字化建设的相关人员,都具有重要的学习和参考价值,有助于拓宽技术视野,提升实践能力,为相关项目的开发与优化提供有力支持。
内容概要:本文详细介绍了利用灰狼算法(GWO)实现光伏系统的最大功率点跟踪(MPPT)的方法。针对光伏阵列在部分遮阴条件下的多峰特性,传统MPPT算法易陷入局部最优的问题,作者提出了一种基于灰狼算法的解决方案。文中展示了如何在MATLAB中编写灰狼算法的核心逻辑,并将其集成到Simulink环境中构建闭环控制系统。具体措施包括自适应调整占空比范围、引入电压补偿项以及动态改变收敛因子等,确保算法在光照突变情况下仍能迅速找到全局最优解。实验结果显示,相比传统方法,灰狼算法不仅提高了响应速度,还增强了稳定性。 适合人群:从事光伏系统研究与开发的技术人员,尤其是关注MPPT算法优化的研究者。 使用场景及目标:适用于需要提高光伏系统在复杂环境下的发电效率的应用场合,旨在克服现有MPPT算法在处理部分遮阴情况时存在的局限性。 其他说明:文中提供了详细的代码片段和实验数据,帮助读者更好地理解和复现研究成果。此外,还讨论了一些实际应用中的注意事项和技术细节,如狼群数量的选择、采样周期的设定等。
《色素性皮肤病自动识别系统资源简介》 本资源是一套完整的色素性皮肤病自动识别系统,包含源码与数据集。该系统运用了先进的集成学习、迁移学习以及GAN等前沿技术,实现了对色素性皮肤病的精准自动识别,且具备七分类功能。 在服务端,通过这些先进技术构建起强大的识别模型,能够准确判断不同类别的色素性皮肤病。而客户端则采用微信小程序和网站两种形式进行呈现,方便用户使用。其中,网站的开发运用了SSM框架和Springboot技术,确保了系统的高效运行和稳定交互。 此资源对于学习和研究计算机视觉、深度学习在医学图像处理领域的应用具有重要价值。无论是从事相关科研工作的专业人员,还是对该领域感兴趣的学习者,都能从中获取丰富的知识和实践经验,深入了解如何利用先进技术解决实际医学问题,推动医疗领域的智能化发展。总之,这是一份极具学习价值的宝贵资源。
# 基于Arduino的温度控制系统 ## 项目简介 这是一个基于Arduino的温度控制系统项目,可实现自动温度控制功能,适用于家庭、实验室、工业等各种需要精确温度控制的场景。 ## 项目的主要特性和功能 1. 实时温度监控能实时读取环境温度。 2. 自动温度控制依据设定的温度阈值,自动调整加热或冷却设备,保持环境在设定温度范围内。 3. 温度阈值设置用户可自定义温度阈值。 4. 简单易用通过Arduino编程实现,代码易理解和修改。 ## 安装使用步骤 1. 准备工作准备好Arduino开发板、温度传感器、加热冷却设备及相应连接线。 2. 硬件连接把温度传感器、加热冷却设备连接到Arduino开发板。 3. 上传代码将提供的Arduino代码上传至开发板。 4. 设置温度阈值通过代码或Arduino IDE的串口监视器设置期望的温度阈值。 5. 测试与调试接通电源,观察系统能否根据环境温度自动调整加热或冷却设备。
数据说明: 该数据集可以做一个简单的图像分类器来识别卡通人物。它包含了超过4600张受大众喜欢的迪士尼角色图片。分别为:奥拉夫,唐老鸭,米老鼠,庞巴,小黄人,维尼熊,分为训练和测试集。
内容概要:费曼学习法强调学习的本质在于有效联系真实世界并学以致用,其核心理念是以输出促输入,通过向他人传授知识来加深自身的理解和掌握。此方法鼓励学习者从远见、穿透力、智慧三个维度提升自我,即预测未来趋势、洞悉知识本质、浓缩重演知识。具体步骤包括:确立目标,理解对象,以教代学,回顾反思,简化吸收。其中,以教代学是费曼学习法的重要环节,主张通过模拟传授场景,用简洁易懂的语言讲解知识点,确保精准无歧义,并加入个人见解。同时,在整个学习过程中,应注重系统化思考,如水平思考、发散思考、收敛思考等,让思考可以量化,最终实现知识的内化,形成自己的知识体系,解决实际问题。 适合人群:所有希望提高学习效率、深化理解、构建个人知识体系的学习者,尤其是那些渴望在某一领域成为专家的人士。 使用场景及目标:①帮助学习者明确学习目标,通过SMART原则制定具体可行的学习计划;②引导学习者系统化地收集、整理、归纳资料,建立逻辑严谨的知识框架;③通过模拟传授场景,让学习者在输出过程中检验和巩固所学知识,提高知识留存率;④促进学习者进行深度反思,修正理解偏差,回归知识本质。 阅读建议:费曼学习法不仅是一种学习技巧,更是一种思维方式的转变。在学习过程中,要不断尝试将所学知识讲给别人听,接受反馈,反复打磨,直至能够用最简单的语言解释复杂的概念。同时,保持开放心态,积极吸纳不同意见,持续优化自己的知识体系。
内容概要:本文介绍了“捉妖主升浪指标”的具体实现代码及其应用逻辑。该指标主要用于股票市场技术分析,通过一系列复杂的数学运算和条件判断,识别股票价格走势中的关键节点。核心公式包括平台突破、主力筹码、RSI等技术指标的计算,以及多个条件组合来判断不同类型的“捉妖”信号,如突破捉妖、拉升捉妖、逼空捉妖、超跌捉妖等。每个信号都有特定的颜色标识,并在图表上显示相应的提示信息。 适合人群:对股票交易和技术分析有一定了解的投资者,尤其是希望借助技术指标提高选股效率的专业人士或资深股民。 使用场景及目标:①用于股票市场的技术分析,帮助投资者识别潜在的强势股;②结合其他分析工具,为买卖决策提供参考依据;③通过捕捉短期爆发性上涨机会,优化投资组合收益。 阅读建议:由于该指标涉及较多专业术语和技术细节,建议读者先熟悉常用的技术分析方法,再深入研究此指标的具体实现逻辑。同时,在实际操作中应结合市场情况灵活运用,避免机械套用。
# 基于FreeRTOS的EDF调度系统 ## 项目简介 本项目旨在基于FreeRTOS设计一个Earliest Deadline First (EDF) 调度器,系统运行于NXP LCP2129微控制器。EDF是一种采用动态优先级预占式调度策略的算法,任务优先级在执行过程中可改变,高优先级任务请求会中断低优先级任务处理。 ## 项目的主要特性和功能 实现动态优先级调度,能根据任务截止时间动态调整优先级。 采用预占式调度策略,高优先级任务可中断低优先级任务。 ## 安装使用步骤 1. 已下载本项目的源码文件。 2. 使用Keil uVision5打开项目进行模拟运行。 ## 版本历史