自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

辛佳雨的专栏

我的思想,凭空游弋

  • 博客(191)
  • 资源 (604)
  • 收藏
  • 关注

原创 从关系库硬扛到专业时序引擎:SagooIoT时序数据存储的架构取舍

物联网平台中,时序数据的存储是整个数据底座的地基。本文讲清 SagooIoT 在时序数据存储上的架构取舍:为什么要做 MySQL 业务库 + TDengine/InfluxDB 时序库 + Redis 缓存的分层设计,写入链路如何做批处理与异步解耦,查询如何用分区、降采样与预聚合提速,并给出能源监测项目改造前后对比与踩坑经验。

2026-08-28 09:13:23 403

原创 从“改个参数要出差“到云端一键下发:SagooIoT设备远程配置的工程实践

物联网项目里最不起眼却最高频的运维动作,就是改配置。本文从一次现场验收的翻车经历讲起,厘清远程配置与远程控制、OTA的边界,系统介绍SagooIoT以声明式期望态为核心的远程配置设计:配置模板与校验、多协议下发通道、版本管理与参数级回滚、立即/延迟/重启三种生效策略、漂移检测与自动纠正,并给出真实改造案例、三个踩坑经验和竞品对比。

2026-08-27 09:10:19 228

原创 从看得见到管得住:SagooIoT远程设备控制系统的设计实践

物联网平台常见的一公里悖论:看得见一切设备数据,却无法远程操控。本文深入剖析SagooIoT远程控制系统的设计实践,涵盖指令模型、可靠投递引擎、属性反向写入、优先级调度、设备主动请求、安全审计等关键能力,并给出真实冷链案例的改造效果对比。

2026-08-11 08:56:23 245

原创 从裸奔到铁壁:SagooIoT物联网安全防护体系的构建之道

物联网安全是平台建设的必答题而非选做题。本文系统梳理SagooIoT的安全防护体系:从传输层TLS/DTLS加密、认证层Token/JWT双因子、到应用层RBAC+Casbin精细化权限控制,结合真实项目渗透测试案例,展现四层纵深防御的工程实践。

2026-08-08 08:54:14 205

原创 开放即能力:SagooIoT OpenAPI体系如何让物联网平台从工具走向生态

本文系统介绍SagooIoT的OpenAPI开放数据接口体系的设计实践,从规范统一(OpenAPI 3.0+Swagger)、认证灵活(JWT/SK-AK/OAuth2.0三套体系)、权限精细化(RBAC+Casbin+行级数据过滤)三个维度,结合GoFrame 2.9框架和实际集成案例,解析如何让物联网平台从封闭工具走向开放生态。

2026-08-07 08:56:26 209

原创 从数据烟囱到融合中心:SagooIoT统一数据处理平台的设计实践

在物联网项目中,数据散落在SCADA、MES、ERP、能耗监测等多个系统中,形成"数据烟囱",跨系统分析异常困难。本文深入解析SagooIoT统一数据处理中心的设计实践,涵盖多源数据接入、ETL清洗流水线、业务数据建模等核心能力,并通过汽车零部件工厂的真实改造案例,展示如何将4套独立系统融合为1个统一平台,将数据延迟从30分钟降至5秒以内。

2026-08-06 08:59:11 630

原创 从组态软件到Web可视化:SagooIoT组态工具的工程化设计实践

传统组态软件困在客户端加授权文件的枷锁中,SagooIoT的Web原生组态工具以浏览器即用、JSON工程版本化、在线模板市场、60+工业组件库等能力,正在重新定义工业可视化的开发方式。本文从架构设计、数据绑定机制到实战案例,全面解析其工程化实践。

2026-08-05 14:28:53 306

原创 从监控孤岛到视联一体:SagooIoT视频监控中心的设计实践

深入解析SagooIoT视频监控中心的设计实践:覆盖GB28181/RTSP/RTMP/HLS多协议适配、流媒体服务架构、视频与物联网数据深度融合、录像智能管理,并附汽车零部件工厂视联改造真实案例。SagooIoT是唯一将视频监控作为原生核心组件的开源物联网平台。

2026-08-04 13:10:47 1368

原创 从版本混乱到一键升级:SagooIoT OTA远程固件升级系统的设计实践

深入解析SagooIoT OTA远程固件升级系统的设计实践,涵盖版本管理、灰度发布策略、模块化升级、双重校验安全机制、A/B分区切换、断点续传、一键回滚等核心能力,并通过汽车零部件工厂真实案例展示从人工逐台烧录到全自动化OTA升级的完整演进过程。

2026-08-03 09:49:31 199

原创 从云端到边缘:SagooIoT边缘计算架构的落地实践

物联网平台纯云端架构在工厂断网时束手无策?本文深入解析SagooIoT的边缘计算架构设计:跨平台轻量运行时、本地规则引擎毫秒级响应、断网续传数据零丢失、远程配置热更新——从架构理念到代码实现,附汽车零部件工厂改造实战案例和3个生产级踩坑经验。

2026-08-02 08:54:45 222

原创 从协议孤岛到统一接入:SagooIoT多协议接入层的架构演进

当工厂里同时跑着Modbus的PLC、MQTT的传感器、OPC UA的机床、IEC104的电力设备——物联网平台如何用一套统一的分层接入架构,将12种协议的2000多台设备一天之内全部接入?本文深入解析SagooIoT的多协议适配层设计:从四层架构到插件系统,从协议网关到数据标准化,附实战案例和踩坑经验。

2026-08-01 08:57:13 1032

原创 从告警风暴到精准治理:SagooIoT告警系统的设计演进之路

告警治理不是一个一蹴而就的事情。每个客户的业务场景不同、设备类型不同、运维习惯不同,需要在实践中不断调优。SagooIoT提供的是一套灵活可配的基础设施,但真正的"治理智慧",还是需要结合具体场景来沉淀。如果你也在做物联网平台,或者正在被告警风暴困扰,希望这篇文章能给你一些启发。SagooIoT作为一个开源项目(GitHub: sagoo-cloud/sagooiot),告警治理相关的能力都是开箱即用的。

2026-07-28 08:54:57 1060

原创 从“能看“到“好看能用“:SagooIoT可视化数据大屏的设计哲学

文章深入解析SagooIoT可视化数据大屏模块的设计哲学,涵盖组件化架构、声明式数据绑定、性能优化(Canvas尺寸控制、定时器调度)、以及数字翻牌器、告警滚动条等实用功能,分享从实际项目中沉淀的技术经验。

2026-07-24 11:15:15 372

原创 从硬编码到热插拔:SagooIoT插件架构如何打破物联网平台的扩展瓶颈

深入解析SagooIoT基于gRPC的热插拔插件系统架构,涵盖多语言插件开发(Go/Python/C++)、协议适配、生命周期管理、热更新机制等核心设计,并通过Modbus RTU插件实战演示跨语言扩展能力。

2026-07-23 08:58:25 268

原创 从设备孤岛到智能协同:SagooIoT场景联动实战解析

摘要: 文章探讨了物联网设备协同的挑战与SagooIoT场景联动模块的设计实践。传统硬编码方式难以应对多设备协同的复杂需求,而SagooIoT通过配置化方案实现灵活编排,支持手动、设备、定时三种触发方式及串/并行混合执行模式,覆盖智慧楼宇、农业大棚等场景。核心设计包括条件引擎、插件化动作执行器及循环触发防护机制,解决了时序、超时等常见问题。与规则引擎互补,场景联动聚焦行为流,推动设备从连接到智能协同,提升业务响应效率。项目开源地址:https://github.com/sagoo-cloud/sagooio

2026-07-21 20:45:43 209

原创 从if-else到拖拽连线:可视化规则引擎如何重塑物联网业务开发

【代码】从if-else到拖拽连线:可视化规则引擎如何重塑物联网业务开发。

2026-07-21 04:06:41 815

原创 物联网的灵魂骨架:聊聊物模型如何让设备不再各自为政

# SagooIoT 物模型的实际设计在 SagooIoT 中,物模型的设计遵循以下几个原则:### 1. 产品级定义,设备级实例物模型是绑定在"产品"上的,而不是单个设备。## 实践中的几个坑当然,物模型也不是万能药。在 SagooIoT 中,物模型的核心结构包括三个维度:| 维度 | 说明 | 示例 ||------|------|------||| 设备主动上报的告警或通知 | 温度超限、设备故障、离线告警 |这种三层结构看似简单,但却是让 IoT 平台从"数据堆"升级到"知识库"的关键一步。

2026-07-21 03:47:50 956

原创 做物联网平台这几年,有个坑很深

我们曾经有个项目,前期为了赶进度没做这方面的设计,结果上线后各种性能问题,最后花了三个月重构才稳定下来。刚开始做的时候,总想着把各种极端情况都考虑到,结果设计做得过于复杂,开发周期拉长。物联网系统是典型的分布式系统,设备端、边缘层、云端、业务系统,每个环节都可能出问题。微服务框架如果是Go语言,Gin或Echo都可以,不要太纠结,团队熟悉哪个就用哪个。最重要的是,选型要符合团队的技术栈,不要为了追新而用不熟悉的技术,出了问题没法快速解决。架构设计、接口规范、部署文档,这些当时不写,过段时间自己都不记得了。

2026-03-05 13:39:40 209

原创 Modbus接入“急诊科“:一个物联网老架构师的病例档案

我们曾经有个项目,前期为了赶进度没做这方面的设计,结果上线后各种性能问题,最后花了三个月重构才稳定下来。刚开始做的时候,总想着把各种极端情况都考虑到,结果设计做得过于复杂,开发周期拉长。物联网系统是典型的分布式系统,设备端、边缘层、云端、业务系统,每个环节都可能出问题。微服务框架如果是Go语言,Gin或Echo都可以,不要太纠结,团队熟悉哪个就用哪个。最重要的是,选型要符合团队的技术栈,不要为了追新而用不熟悉的技术,出了问题没法快速解决。架构设计、接口规范、部署文档,这些当时不写,过段时间自己都不记得了。

2026-03-05 13:38:48 224

原创 物联网平台的“暗礁“:从千级到百万级连接的踩坑实录

经是物联网平台的标准做法了,但真要用到生产环境,里面还是有不少细节需要注意的。顺便提一下,我们开源的 SagooIoT 平台已经实现了上面提到的大部分功能,代码可以直接参考。很多新手容易犯的错是,不管什么场景都用同一个模式,觉得这样最保险。最重要的是,要有状态监测,发现问题能及时响应。我见过最糟糕的设计是每个实例一个独立配置,这样的系统最多能接几百个就撑不住了。合理的做法是分层设计,按类型分一层,再按实例分一层。实际经验是,大部分场景用通用方案就够了,但一些特殊场景必须针对性优化。第一个细节是参数配置。

2026-03-05 11:34:33 83

原创 IoT安全架构设计的设计与实现心得

我们曾经有个项目,前期为了赶进度没做这方面的设计,结果上线后各种性能问题,最后花了三个月重构才稳定下来。刚开始做的时候,总想着把各种极端情况都考虑到,结果设计做得过于复杂,开发周期拉长。即使某个环节出问题,也不影响其他环节,数据不会丢,最多是延迟一会儿。物联网系统是典型的分布式系统,设备端、边缘层、云端、业务系统,每个环节都可能出问题。微服务框架如果是Go语言,Gin或Echo都可以,不要太纠结,团队熟悉哪个就用哪个。最重要的是,选型要符合团队的技术栈,不要为了追新而用不熟悉的技术,出了问题没法快速解决。

2026-03-04 23:54:32 268

原创 聊聊MQTT协议在物联网平台中的最佳实践的实践经验

如果你也在做相关的东西,不妨去看看,说不定能省掉一些踩坑的时间。最重要的是,设备端要有连接状态监测,发现断线了要能自动重连。实际上大部分场景QoS 1就够了,盲目追求高QoS会增加服务器的负担,降低系统的吞吐量。这样即使有人拿到了一个设备的证书,也没法冒充其他设备。MQTT协议现在已经是物联网通信的事实标准了,但真要用到生产环境,里面还是有不少细节需要注意的。这个级别的开销比较大,需要四次握手,一般只在非常重要的控制指令场景下使用,比如远程开关机。设得太长,连接断了很久服务器才发现,这段时间的数据就丢了。

2026-03-04 23:45:15 280

原创 聊聊视频监控中心的实践经验

刚开始做的时候,总想着把各种极端情况都考虑到,结果设计做得过于复杂,开发周期拉长,上线时间推迟。我们现在的做法是,每个关键环节都有指标上报,有异常自动告警,出现问题能快速定位到具体环节。物联网系统是典型的分布式系统,设备端、边缘层、云端、业务系统,每个环节都可能出问题。做物联网平台的这些年,有一个很深的体会:技术方案没有绝对的好坏,只有适合不适合。改进后的版本,各个环节互不影响,任何一个环节出问题,都不会影响数据接收。最重要的是,选型要符合团队的技术栈,不要为了追新而用不熟悉的技术,出了问题没法快速解决。

2026-03-04 23:43:53 272

原创 IoT安全架构设计的设计与实现

刚开始做的时候,总想着把各种极端情况都考虑到,结果设计做得过于复杂,开发周期拉长,上线时间推迟。我们现在的做法是,每个关键环节都有指标上报,有异常自动告警,出现问题能快速定位到具体环节。物联网系统是典型的分布式系统,设备端、边缘层、云端、业务系统,每个环节都可能出问题。做物联网平台的这些年,有一个很深的体会:技术方案没有绝对的好坏,只有适合不适合。改进后的版本,各个环节互不影响,任何一个环节出问题,都不会影响数据接收。最重要的是,选型要符合团队的技术栈,不要为了追新而用不熟悉的技术,出了问题没法快速解决。

2026-03-04 23:40:42 335

原创 IoT安全架构设计技术架构详解

在物联网平台建设中,IoT安全架构设计是一个核心议题。IoT安全架构设计是IoT平台建设的关键环节,需要根据实际业务场景选择合适的技术方案。[设备层] → [接入层] → [处理层] → [应用层]> 标签: #架构设计 #微服务 #云原生 #分布式系统。3. **演进方向**:云原生架构成为趋势...1. **业务需求**:随着设备规模增长...2. **技术挑战**:传统方案无法满足...### 为什么需要IoT安全架构设计。### 什么是IoT安全架构设计。IoT安全架构设计指的是...

2026-03-04 22:14:12 142

原创 深入解析:高性能 SSE 服务器的设计与实现

这个 SSE 服务器的设计和实现展现了 Go 语言在并发编程和高性能网络服务方面的强大能力。通过精心的设计和多层次的优化,它能够高效地处理大量并发连接和实时消息推送。然而,任何系统都有提升的空间。引入消息队列,支持更大规模的分布式部署。实现消息持久化,支持离线消息重放。添加更细粒度的监控和性能指标收集。通过分析这个 SSE 服务器,我们不仅学习了如何实现高性能的实时通信系统,还深入理解了 Go 语言的并发模型和内存管理策略。这些知识和技巧无疑会在未来的系统设计中发挥重要作用。开源的。

2024-09-17 11:28:44 1727

原创 Gorilla/Mux 中的 Session 管理:实现自定义中间件

虽然 Gorilla 提供了出色的sessions包,但直接集成到 Mux 路由器中需要一些额外的工作。简化会话的设置和使用提供一致的接口来访问会话数据轻松地在整个应用中应用会话管理根据需求自定义会话行为有时,你可能想对某些路径禁用会话管理。},通过实现这个自定义的 Session 中间件,我们不仅简化了 Gorilla Mux 应用中的会话管理,还提供了一个灵活的框架来满足各种需求。无论是简单的用户认证还是复杂的状态管理,这个中间件都能胜任。

2024-09-09 12:59:28 967

原创 Go语言中实现安全高效的JWT认证:自定义中间件解析

通过使用这个自定义的JWT中间件,我们可以在Go应用中轻松实现安全、高效的用户认证。它不仅提供了灵活的配置选项,还可以很容易地集成到现有的项目中。请参考我们的NexFrame 企业级开发框架记住,安全是一个持续的过程。即使使用了JWT,我们仍然需要时刻关注潜在的安全威胁,并及时更新我们的安全策略。希望这篇文章能够帮助你更好地理解和使用JWT认证。如果你有任何问题或建议,欢迎在评论区留言讨论!我们在开发SagooIoT企业级开源物联网平台过程中,有更多有意思的应用,可以供大家参考。

2024-09-09 07:24:05 1809

原创 构建灵活的多域名访问系统:Go语言实践

支持多个域名访问根据不同的域名提供不同的内容或服务灵活地管理域名和相应的配置高效地处理请求,保证性能ID string// 其他配置项...

2024-09-03 16:59:59 1495 2

原创 构建灵活的搜索系统:Go 语言实践

首先,我们定义一个通用的这个接口定义了四个基本操作:创建索引、索引文档、搜索文档和删除文档。

2024-09-03 16:54:31 1445

原创 实现多云对象存储支持:Go 语言实践

首先,我们定义一个通用的这个接口定义了三个基本操作:上传对象、获取对象和删除对象。

2024-09-03 16:49:32 1274

原创 zerolog 封装:打造更强大、更灵活的日志系统

在现代软件开发中,一个强大而灵活的日志系统是不可或缺的。本文将详细介绍如何封装库,以创建一个更加易用、可配置且功能丰富的日志系统。

2024-08-07 14:55:31 746

原创 使用Go和Node.js构建用静态脚本进行数据解析的TCP服务器

函数,用于调用Node.js脚本处理传入的数据。函数,用于启动TCP服务器并监听指定端口上的连接。函数,用于处理客户端连接,读取传入的数据,调用函数进行处理,然后将处理后的数据返回给客户端。main函数,程序的入口点,启动TCP服务器。

2024-05-29 12:58:18 762

原创 在Go程序中使用对象池提升性能

对象池就像一个存放对象的仓库,可以重复使用已分配的对象,而不是每次都创建新的对象。当需要一个对象时,可以从池中获取,使用完毕后放回池中。

2024-05-24 10:23:51 767

原创 在Go语言中如何实现变参函数和函数选项模式

在Go语言编程中,我们经常会遇到需要给函数传递可选参数的情况。传统的做法是定义一个结构体,将所有可选参数作为结构体字段,然后在调用函数时创建该结构体的实例并传递。通过这种方式,我们可以很灵活地控制传递哪些可选参数,而不需要创建复杂的结构体。每个可选参数都是一个独立的函数,它们的作用只是设置参数的值。Go语言的一个很酷的特性就是支持变参函数,通过结合变参和高阶函数,我们可以用一种非常灵活和优雅的方式来实现可选参数。函数中,我们展示了三种不同的调用方式:不传递任何可选参数、只传递。在函数内部,它首先创建一个。

2024-05-24 05:44:30 578

原创 通过Redis实现一个异步请求-响应程序

在分布式系统中,经常需要不同的服务或组件之间进行通信和协作。传统的同步请求-响应模式虽然简单直观,但可能会导致阻塞和性能问题。为了解决这个问题,我们开发了一个基于 Redis 的异步请求-响应程序,实现了请求和响应的解耦,提高了系统的并发性和响应能力。

2024-04-21 07:38:37 910 1

原创 物联网系统中物模型定义的简要说明

物模型由若干条“参数”组成,参数按描述的功能类型不同,又分为属性、方法和事件。标准参数 为了实现设备功能的统一理解。通过对物模型的基础的理解,就可以更灵活的使用物联网平台的相关数据。通常通过北向接口与业务系统进行对接使用。事件,就是定义的由设备端触发的临时性上报的数据,如设备端告警等。方法,就是定义通过平台端可以远程调用设备端的某一功能的方法。属性,就是定义的由设备端规律性的定期上报的数据。关于物模型的使用,可以参考。

2023-10-05 19:40:10 629

原创 物模型概述与说明

物模型是对设备在云端的功能进行描述,包括设备的属性、功能、事件和标签。物联网平台使用一种名为TSL的物的描述语言来定义物模型,该语言采用JSON格式。通过组装设备上报的数据,您可以根据TSL进行操作。

2023-06-26 08:24:20 948

原创 如何用go写一个基于事件驱动的SSE的程序

SSE(Serversentevents)是浏览器向服务器发送请求并保持长连接的技术,服务器通过长连接将数据推送到浏览器。SSE通常用于实时更新网页内容或获得服务器推送的通知。这是一个简单的SSE服务器实现,可以在本地启动一个基于事件驱动的SSE服务器,在浏览器中访问"http://localhost:8080/stream"即可订阅事件。

2023-06-05 16:57:41 2061

原创 一个开源的基于golang开发的企业级物联网平台

SagooIOT是一个基于golang开发的开源的企业级物联网基础开发平台。负责设备管理和协议数据管理,支持跨平台的物联网接入及管理方案,平台实现了物联网开发相关的基础功能,基于该功能可以快速的搭建起一整套的IOT相关的业务系统。

2023-06-02 14:21:52 2457

基于P2P方式的即时通讯源码

程序说明: 1.程序采用网上介绍的方法实现最基本的P2P方式通讯.模拟实现即时消息互发. 2.P2P通讯说明: 1).网关类型是在理想状态下.即非对称型NAT. 2).同在一个内网的两个CLIENT端通讯时,如果网关NAT不支持环回,将会失败. 文件目录说明: tQServer:程序服务端,请将其放在公网上运行. tQClient:程序客户端,可以在不同的内网中运行登录连接到服务端. Common:公共协议文件夹 本程序只是实现简单的P2P互发消息.完成的比较粗糙,更多功能欢迎朋友们更新完善..

2005-12-23

Delphi最新三层源码 1.0

//数据连接类  IConnDB in 'DBConnection\IConnDB.pas',   ConnDB in 'DBConnection\ConnDB.pas',   ConnDB_ACCESSServer         in 'DBConnection\ConnDB_ACCESSServer.pas',  ConnDB_SQLServer         in 'DBConnection\ConnDB_SQLServer.pas',  ConnDB_ORACLEServer         in 'DBConnection\ConnDB_ORACLEServer.pas',  ConnDBFactory in 'DBConnection\ConnDBFactory.pas',  ConnDBFactory_ACCESSServer       in 'DBConnection\ConnDBFactory_ACCESSServer.pas',  ConnDBFactory_SQLServer       in 'DBConnection\ConnDBFactory_SQLServer.pas',  ConnDBFactory_Oralce      in 'DBConnection\ConnDBFactory_Oralce.pas',  ConnDBConfig in 'DBConnection\ConnDBConfig.pas',  //VO及VOLIST类  valueObjectUnit in 'DAOObject\valueObjectUnit.pas',  valueObjectListUnit in 'DAOObject\valueObjectListUnit.pas',  IvalueObjectListUnit          in 'DAOObject\IvalueObjectListUnit.pas',  DynamicDataSetUnit          in 'DAOObject\DynamicDataSetUnit.pas',  valueObjectDBListUnit          in 'DAOObject\valueObjectDBListUnit.pas',  VOPrototypeManagerUnit in 'DAOObject\VOPrototypeManagerUnit.pas',  //DAO类设计  IDAOvalueObjectUnit in 'DAOObject\IDAOvalueObjectUnit.pas',  DAOvalueObjectUnit in 'DAOObject\DAOvalueObjectUnit.pas',    //服务类设计  ServiceObjectUnit in 'Service\ServiceObjectUnit.pas',  SQLAnalyzeServiceUnit in 'Service\SQLAnalyzeServiceUnit.pas',    //业务对象类设计  BOPrototypeManagerUnit in 'BusinessObj\BOPrototypeManagerUnit.pas',  BOServiceUnit in 'Service\BOServiceUnit.pas',  IBaseBOUnit in 'BusinessObj\IBaseBOUnit.pas',  BaseBOUnit in 'BusinessObj\BaseBOUnit.pas',

2005-12-23

java实用工具包(新手型)

针对2维表数据的分页。不针对各种不同数据库为了提高效力而使用的分页读取。 对各种有可能转化成2维表数据的数据先通过自定义的转化器转化成ArrayList(HashMap)或 ArrayList(javabean) 如果类型为ArrayList不需要转化,已经写了2个,分别为ResultSet和Vector,其它特殊类型的转化自己实现SourceConv接口,并在SourceConvFactory中注册(注册没有 写在配置文件,自己按需要去完善 :) ) 对第2维的格式化(即列数据),通过实现PageCol接口,已经有javabean和hashmap两种的格式化 import com.miphone.newcard.source.*; import java.util.*; 1.ArrayList source=.......; //不需要转化 2.ResultSet source=.......; //需要在后面添加 tool.setSourceType("ResultSet");已经有一个SourceConv的子类处理 //ResultSet的格式化 3.Vector source=........; //需要在后面添加 tool.setSourceType("Vector");已经有一个SourceConv的子类处理 //Vector的格式化 4.OtherObj source=......; //自己实现SourceConv接口,并在SourceConvFactory中注册,需要在后面添加 tool.setSourceType("名字","class路径及名称"); 5 tool.setSourceColType("列数据类型名");//默认为HashMap,已经有HashMap和javabean的实现,javabean需要 tool.setClassName("javabean类名"); 6 tool.setSourceColType("列数据类型名","类名");//自定义的列数据格式 PageTool tool=new PageTool(); tool.setSource(source); Vector cols=new Vector(); cols.addElement("id"); cols.addElement("name"); cols.addElement("value"); cols.addElement("type"); cols.addElement("note"); tool.setColNams(cols);//设定读取字段 tool.setPageSize(10);//设定pagesize String[] infos = {"<img src='1' >", "<img src='1' >", "<img src='1' >", "<img src='1' >", "<img src='1' >"}; tool.setPageInfo(infos);//设定分页的显示,默认为{"页次", "首页", "上一页", "下一页", "尾页"}; tool.setHrefName("search.jsp"+args);//分页显示的指向超链接。如 search.jsp?id=1 String thispage=request.getParameter("page"); tool.makeCurrentPage(thispage);//设定当前页,thispage的判断由PageTool自己控制。 tool.Create();//生成分页 //读取 while(tool.next()){ String id=rs.getString("id"); String id2=rs.getString(1);//下标从1开始 String name=rs.getString("name"); String name2=rs.getString(2); } rs.free();//不是必须得,在重复利用时需要用来清空已经有数据的对象。 /* 分页显示方法 */ tool.getFirstPage(); tool.getForwardPage(); tool.getNextPage(); tool.getLastPage(); tool.getTotalInfo(); tool.getRecordCount(); tool.getPageSize();

2005-12-15

Netbit Browser嵌入式浏览器(论文+源码)

全文公62页,写的很专业,包括论文全文、论文答辩PPT讲稿、源代码。 摘 要 本文主要论述了嵌入式浏览器开发所涉及到的技术,对HTML词法分析、浏览器JavaScript支持、linux和gtk编程等做了详细的分析和介绍,并对Netbit浏览器的开发进行了介绍,分析了主要的模块的功能和组成,并给出了主要算法。 还对典型的嵌入式浏览器进行了分析,包括Gzilla,Mozilla,Thunder和zen,总结了浏览器设计的技术要点和开发策略。 另外,在论文开头,介绍了目前嵌入式浏览器产品的发展现状,嵌入式浏览器的组成和各部份功能说明。 HTML词法分析是着重讨论的技术问题,给出了详尽的数据结构,程序流程。 Netbit浏览器的开发,是本论文的重点,分模块进行了分析,提出了需要改进的地方,并给出了改进措施。 关键词:嵌入式浏览器,HTML词法分析,Javascript,linux,gtk ABSTRACT This paper is focused on the technology of embedded browser.Html scanner, JavaScript support for browser, linux and gtk programming are deeply discussed.and introduce the development of Netbit browser, analyse the main module of Netbit, the algorithm is presented. what’s more, other typical embedded browsers are analysed, include Gzilla,Mozilla,Thunder and zen,and summarize the important technology and the policy of browser development In addition,at the head of the paper,introduce the present status of embedded browser product,the general form of embedded browser and description of the main parts. HTML scanner is an important technological problem, the data structure and the flow of the program are presented. The development of Netbit Browser is mainly discussed,and analysed by module,give the opinion to improve it. KEY WORDS: embedded browser,HTML token,Javascript,linux,gtk 目 录 引言………………………………………………………………5 第一章 嵌入式浏览器设计概述 ………………………… 6 1.1目前嵌入式浏览器产品的发展现状 ……………………… 6 1.2嵌入式浏览器的组成和各部份功能说明 ………………… 8 1.3开发难度分析 ……………………………………………… 9 1.4开发的前期策划 …………………………………………… 10 第二章 HTML词法分析器的设计及其应用 …………… 12 2.1 Bit Token的组成及其功能 ………………………………12 2.2 数据结构 ……………………………………………………12 2.3 算法 …………………………………………………………13 2.4词法分析结果示意……………………………………………15 2.5 HTML词法分析的应用 ………………………………………15 第三章 浏览器JavaScript支持的实现 …………………18 3.1基本的JavaScript 开发环境 ………………………………18 3.2 JavaScript Engine …………………………………………18 3.3 JavaScript与浏览器接合 ………………………………… 19 3.4 浏览器消息响应 …………………………………………… 21 第四章 Linux程序开发技术及 GTK图形程序开发…… 23 4.1 Linux下的程序开发环境 …………

2005-12-28

Bea WorkShop Studio (NitroX M7) 系列注册机

拷贝这个注册机到下面目录运行: ....\plugins\com.m7.nitrox_3.0.0 这个注册机能破解NitroX 所有的IDE。 另外,用这个注册时你不需要断开网络。 只支持JDK1.5. 只要把注册表的HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft下的关于1.4的jre和jvm的路径信息改为1.5的jdk的即可。 如果只能用workshop for struts, 不能用HIBERNATE 和JSF 你只要注册成WorkShop Studio, 所有的功能都能用了。 你不用重新安装,只要把....\plugins\com.m7.nitrox_3.0.0 下面的 ins.properties 文件中 prodid 改成 prodid =0005, 重新注册就可以了。

2005-12-15

一个基于Struts+Hibernate+MsSql2000的实例

一个简单的用户登录验证,主要是用了Struts+Hibernate框架,工具Eclipse+Myeclipse!

2005-12-15

java实用工具包(大众型)--XML处理

让xml处理无门槛,你会爱上使用xml文件。 该包主要工作是封装,把操作简单明了化,可以让那些对document的东东望而生畏的人不用去"头痛",使用xml处理很简单明了。上面的3个例子只有取属性,其实还有advanceGetNode("path/map[0]")来直接获取节点,然后就可以针对节点addElement

2005-12-15

飞鸽传书Ver2.06源码

-------------------------------------------------------------------------------- 飞鸽传书 (IP Messenger) Ver2.06 Copyright (C) 1996-2004 SHIROUZU Hiroaki All Rights Reserved. -------------------------------------------------------------------------------- 目录: 1. 软件简介 2. 许可协议 3. 系统要求 4. 使用说明 5. 相关信息 6. 广域网设置(广播设置) 7. 补充 8. 支持 9. 更新历史 10. 感谢 ================================================================================ 重要说明: comctl32.dll(公共控件) 要求 4.71 或以上版本 更多信息请参见 "系统要求" ================================================================================ -------------------------------------------------------------------------------- 1. 软件简介 - IPMsg 是一款局域网内即时通信软件, 基于 TCP/IP(UDP). 可运行于多种操作平台(Win/Mac/UNIX/Java), 并实现跨平台信息交流. - 不需要服务器支持. - 支持文件/文件夹的传送 (2.00版以上) - 通讯数据采用 RSA/Blofish 加密 (2.00版以上) - 十分小巧, 简单易用, 而且你可以完全免费使用它 - 目前已有的版本包括: Win32, Win16, MacOS, MacOSX, X11, GTK, GNOME, Java 等, 并且公开源代码. 请查看以下地址以获得相关信息: http://www.ipmsg.org/ -------------------------------------------------------------------------------- 2. 许可协议 (BSD License) Copyright (c) 1996-2004 SHIROUZU Hiroaki All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. Neither the name of the SHIROUZU Hiroaki nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRI

2005-12-14

软件成熟度模型CMM入门(PDF格式)

很多时候,人们提到CMM,其实指的是SW-CMM,即软件CMM。除了SW-CMM以外,还有P-CMM,SE-CMM,SA-CMM和CMMI等,这些CMM都是美国Carnegie Mellon大学软件工程研究所(SEI)的产品。每个CMM都是独立的产品,有各自不同的用途,但这些CMM之间也有一定的渊源关系。即使同一个CMM也有版本之分,例如SW-CMM,有1.0版本,也有1.1版本。当然,其他机构或者公司也可能有“某某CMM”的东西。因此,我们通常所说的CMM,确切的完整的说法是SEI SW-CMM v1.1。在以后的文字中,如果不加说明,CMM即指SEI SW-CMM v1.1。 CMM是Capability Maturity Model 的首字母缩写,翻译成中文:能力成熟度模型。顾名思义,它是一个“模型”。既然是模型,那一定有对应的实体,CMM对应的实体就是软件组织。软件组织的规模可大可小,可以是一个软件公司,也可以是一个部门,但它们存在的目的是相同的,都是为了生产软件。 概括而言,CMM是一个用来描述,或者说,表示软件组织的模型。

2005-12-23

JPEG图象解码程序

JPEG解码源码,Delphi源码。其实,JPEG解码可以用用Intel提供的ijl15.dll库,还是不错的。

2005-12-31

图像融合算法演示源码

点击打开文件的两个按钮,打开上下文件然后在图片上用鼠标左键点击选择一个闭合的区域,当两个图片区域选定后,点击生成比对图片按钮,将会生成融合的比对图片,您可以调整比对图片的相对位置和图片透明度。

2005-12-31

扫雷(MVC架构)

把JAR包解压后有所有源码! 同样基于MVC,并力求在源码中合理使用设计模式

2005-12-15

点对点传输控件P2PSock 源码

点对点传输控件P2PSock For D6

2005-12-23

MyEclipse4.1.0破解文件

用winrar打开\MyEclipse\eclipse\plugins\com.genuitec.eclipse.core_4.0.3\core.jar文件,找到C.class所在的目录。 2、下载附件。如果附件下载不了试试看,这个网址:http://www.bloghome.cn/download.php?ownerId=7&resource=myeclipse_enterprise_4.0_Crack.rar&pid=39558 3、用winrar打开刚下载的文件,找到C.class文件,然后用鼠标将C.class拖到第1步打开的目录。 4、启动myeclips,新建一个myeclips工程。myeclips会弹出一个对话框,提示你30天试用。 5、注册Subscriber: Subscriber: Hello Subscription Code:UAR7ZL-955-56-54674676067481865 恭喜你,你已经完全拥有myeclips了!!

2005-12-30

计算机软件需求说明编制指南(DOC格式)

本指南为软件需求实践提供了一个规范化的方法。本指南不提倡把软件需求说明(Software Requirements Specifications,以下简称SRS)划分成等级,避免把它定义成更小的需求子集。 本指南适用对象: 软件客户(Customers),以便精确地描述他们想获得什么样的产品。 软件开发者(Suppliers),以便准确地理解客户需要什么样的产品。 对于任一要实现下列目标的单位和(或)个人:

2005-12-23

飞鸽传书Ver2.06

目录: 1. 软件简介 2. 许可协议 3. 系统要求 4. 使用说明 5. 相关信息 6. 广域网设置(广播设置) 7. 补充 8. 支持 9. 更新历史 10. 感谢 ================================================================================ 重要说明: comctl32.dll(公共控件) 要求 4.71 或以上版本 更多信息请参见 "系统要求" ================================================================================ -------------------------------------------------------------------------------- 1. 软件简介 - IPMsg 是一款局域网内即时通信软件, 基于 TCP/IP(UDP). 可运行于多种操作平台(Win/Mac/UNIX/Java), 并实现跨平台信息交流. - 不需要服务器支持. - 支持文件/文件夹的传送 (2.00版以上) - 通讯数据采用 RSA/Blofish 加密 (2.00版以上) - 十分小巧, 简单易用, 而且你可以完全免费使用它 - 目前已有的版本包括: Win32, Win16, MacOS, MacOSX, X11, GTK, GNOME, Java 等, 并且公开源代码. 3. 系统要求 Microsoft Windows 95/98/Me/NT4.0/2000/XP/2003 95/98/NT4.0 ... 要求 comctl32.dll(公共控件) 的版本为 5.x 或更高. (如果你安装的 IE 是 5.x 或更高版本, 那么就不必担心这个问题了) 注意: Windows 3.1(和 NT3.5x), 请使用 IP Messenger for Win16. -------------------------------------------------------------------------------- 4. 使用说明 < 安装/卸载 > 执行 setup.exe 你可以将 IPMsg 安装到指定目录, 或者重新注册到启动组. 如果需要删除 IPMsg, 请先从控制面板中卸载, 再手动删除 IPMsg 目录. < 系统托盘区图标 > 左键双击图标, 即可打开发送消息窗口. 右键点击图标, 可进入 [服务设置], [离开] 等. < 发送消息窗口 > - 发送消息时, 若勾选了 [封装], 则接收者要先打开信封才能看到消息, 如果你还勾选了 [上锁], 则接收者在打开信封时还需要输入密码. (密码是由接收者自己在 [服务设置] 中设置的) - 若要发送文件/文件夹, 可直接将文件/文件夹拖入发送消息窗口 或在发送消息窗口上点击右键, 再选择发送文件或发送文件夹 - 传送文件/文件夹时, 当接收者还没有保存(下载)文件/文件夹时, 若发送者关闭或重启了 IPMsg, 则附带的文件信息将被清除, 接收者将不能继续接收(下载)到此文件. - 用户列表前缀符号说明 ":" 表示用户处于离开模式. "|" 表示用户使用的不是 2.0 以上版本的 IPMsg, 将不支持文件/文件夹的传送, 并且不支持通信数据加密. "|"(短线) 表示只支持文件/文件夹的传送. - 拖动列表表头标题项可改变其顺序, 并可点击右键选择"保存列表顺序" - 在消息输入窗口中, 可使用 Ctrl+Tab 输入制表符 Tab. - 在发送消息窗口上点击右键, 可以进入设置显示优先级, 选择工作组, 搜索用户(Ctrl+F), 传送文件, 传送文件夹, 保存列表顺序, 字体设置, 窗口大小设置, 固定窗口位置, 列表显示设置. - 在用户名上点击右键, 可设置其显示优先级 优先级按由小到大的顺序排序 - 通过设置显示优先级, 可将经常联系的用户至于列表顶端, 或者隐藏不需要联系的用户 < 接收消息窗口 > - 在接收消息窗口上点击右键, 可以进入字体设置, 窗口大小设置, 固定窗口位置. - 接收消息窗口标题栏中的 "+" 或 "-" 表示通信数据使用了加密算法 "+" 表示 RSA/1024 位, blowfish/128 位加密 "-" 表示 RSA/512 位, RC2/40 位加密 - 如果你收到的消息附带了文件, 将会显示出附件按钮. 点击按钮即可保存文件. < 其他 > - 如果需要(通过路由器)连接到广域网, 则需要设置广播地址. 详见广域网设置(广播设置) - 其它功能都很容易理解, 你试一试就明白了 -------------------------------------------------------------------------------- 5. 相关信息 - 所有的设置信息都保存在注册表的以下位置: \\HKEY_CURRENT_USER\Software\HSTools\ 用户密码以不可逆加密方式存储. ******************************************************************* * 如果你忘记了密码, 可以在注册表中将此键值删除 * * \\HKEY_CURRENT_USER\Software\HSTools\IPMsgEng\PasswordStr * ******************************************************************* - 本软件使用的默认端口为 2425 若仅使用 UDP 协议的端口, 将不能传送文件/文件夹 (如果安装了防火墙, 则必须打开相应的 TCP 和 UDP 端口) - 本软件为自由软件, 你可以随意传播, 但源码使用请参见许可协议. - 只有在启动或退出程序, 使用离开模式, 刷新在线用户时 IPMsg 才会进行消息广播. - 本软件由 Microsoft Visual C++ 6.0 编译 -------------------------------------------------------------------------------- 6. 广域网设置(广播设置) - 主机号全部为 1 的 IP 地址, 即广播地址 例如, 连接到一个 C 类子网(即 24 位网络号, 8 位主机号), IP 地址为 aaa.bbb.ccc.ddd, 其广播地址即为: aaa.bbb.ccc.255 若对方处于另一个私有子网中, 广播可能无效. - 更多问题, 请参阅相关资料或咨询你的网络管理员. - 若两台主机的连接经过了多个路由器, 请直接指定对方IP地址 - 拨号上网用户请勾选 [拨号连接] 当刷新在线用户列表时, 列表不会被清空 -------------------------------------------------------------------------------- 7. 补充 - 启动飞鸽传书前, 你可以指定其运行时使用的端口, 且可以使用不同的端口打开多个窗口. 用法如下: ipmsg.exe 2426 (你可在快捷方式上设置) 但是你只能与同时也使用该端口的用户通信. - 所以你尽可选用你喜欢的端口运行本软件. 介于 10000 至 60000 可能更安全些. 你也可以咨询你的网络管理员. - 如果有多个网卡(IP), 你可以将飞鸽传书与指定的网卡(IP)进行绑定. 命令格式如下(你可以在快捷方式上设置): ipmsg.exe [端口] /NIC IP地址 例如: C:\>ipmsg.exe /NIC 192.168.10.100 - 支持命令方式发送消息 命令格式如下: ipmsg.exe [端口] /MSG [/LOG][/SEAL] <主机名或IP地址> <消息> 例如: C:\>ipmsg.exe /MSG /SEAL localhost Hello. - 操作技巧. 1. 隐藏/显示 窗口 Ctrl + D 2. 按住 Ctrl 键再点 [刷新] 可保持现有用户, 搜索新上线的用户 3. 打开发送/接收消息窗口 Ctrl + Alt + S / R (需要进行详细设置) 4. 打开搜索窗口 Ctrl + F 5. 接收到多个文件, 保存时可勾选 [全部] -------------------------------------------------------------------------------- 8. 支持 - IPMsg 的技术讨论区是开放的. 如果你想订阅相关邮件, 请联系 ipmsg-subscribe@ring.gr.jp - 欢迎报告 bug, 以及提出建议 - 如果你有任何疑问, 请 E-mail 联系. shirouzu@h.email.ne.jp 中文版可联系阿志: hiwyz@163.net - 发送错误报告, 请勿必记录以下信息: 软件版本, 操作系统, 故障描述, 以及故障重现方法等. -------------------------------------------------------------------------------- 9. 更新历史 ver 1.00 ... 日文版 (1996/08/19) ver 1.31 ... 英文版/日文版 (1997/09/01) ver 2.00 ... 英文版/日文版 (2002/11/19) 支持文件/文件夹传送 支持通信数据加密 ver 2.03 ... Bug 修正 (文件传送引起缓冲溢出) 广播设置支持主机地址(FQDN)解析 ver 2.04 ... 增加绑定网卡(IP)功能 ver 2.05 ... Bug 修正 (2.04版当激活发送/接收消息窗口时,无法注销/关闭系统) ver 2.06 ... 很小的调整

2005-12-14

一个书库的小偷程序

可以定制www.mengdong.com 上面的所有子栏目. 可以单独使用,也可以放入你们的 页面。 风格可以通过demo.css定制 也可以当作合作伙伴定制

2005-12-20

玄武饭店信息管理系统

玄武饭店信息管理系统 代码较为全面。

2005-12-23

计算机投标书格式(范本)

word文档格式 投标书格式 投 标 书 致:________________________________   根据贵方为___________________________________项目招标采购货物及服务的投标邀请_____________________ (招标编号),签字代表______________________(全名、职务)经正式授权并代表投标人____________________(投标方名称、地址)提交下述文件正本一份和副本一式____份。 (1) 开标一览表 (2) 投标价格表 (3) 货物简要说明一览表 (4) 按投标须知第14、15条要求提供的全部文件 (5) 资格证明文件 (6) 投标保证金,金额为人民币____________________元。 据此函,签字代表宣布同意如下: 1.所附投标报价表中规定的应提供和交付的货物投标总价为人民币____________________元。 2.投标人将按招标文件的规定履行合同责任和义务。 3.投标人已详细审查全部招标文件,包括修改文件(如需要修改)以及全部参考资料和有关附 详细内容请下载

2005-12-23

Apache HTTP服务器 管理员手册

2005-12-06

多级联动下拉选择框,动态获取下一级

多级联动下拉选择框,动态获取下一级,每一级数据为XML,可支持无限级(浏览器端需要Microsoft.XMLDOM支持) 项目需要,一个材料类别表,三级,总共有7000多条记录,如果一次获取会很慢的,所以就是用了动态读取,每次就读一级,且服务器端使用了缓存,效率还不错。

2006-01-05

PHP设计模式(chm版)

导言 当你在不断的试图从你的应用程序中发现新的特征时,你是否发现你提出的解决方法和一些以前你已经实现的东西是如此的类似呢?如果你是一个程序员(即使你才 开始很短的时间),你都可能回答“是”。这看起来就是你使用了一些以前的代码来解决软件开发过程中新发现的问题了。你可能已经认识到:你的解决方法是基本 原理,是一个不仅仅是你而且是所有专业开发者都能广泛重复应用的方法。 事实上,许多程序问题都不断的反复的遇到,而且许多用来解决这些问题的基本方法(或者说是设计模式)都已经浮现出来。设计模式就是一个教你如何利用真实可靠的设计来组织你的代码的模板。 设计模式历史 “设计模式”这个术语最初被设计用于建筑学领域。Christopher Alexander 在他1977的著作“A Pattern Language :Towns/Building/Construction”里面描述了一些常见的建筑学设计问题,并解释了如何用这些已有的,著名的模式集合来开始全新 的有效的设计。Alexander的观点被很好的转化到软件开发上来,并且长期的合意的用原有的组件来构造新的解决方案。 所有的设计模式都有一些常用的特性:一个标识(a name),一个问题陈述(a problem statement)和一个解决方案(a solution)。 1、一个设计模式的标识是重要的,因为它会让其他的程序员不用进行太深入的学习就能立刻理解你的代码的目的(至少通过这个标识程序员会很熟悉这个模式)。? 2、问题描述是用来说明这个模式的应用的领域。? 3、解决方案描述了这个模型的执行。一个好的设计模式的论述应该覆盖使用这个模型的优点和缺点。? 一个模式是解决特定问题的有效方法。一个设计模式不是一个库(能在你的项目中直接包含和使用的代码库)而是一个用来组织你的代码的模板。事实上,一个代码库和一个设计模式在应用上是有很多不同的。 比如,你从店铺里面买的一件衬衫是一个代码库,它的颜色,样式和大小都由设计师和厂商决定,但它满足了你的需求。 然而,如果店里面没有什么衣服适合你,那你就能自己创建自己的衬衫(设计它的形状,选择布料,然后裁缝在一起)。但是如果你不是一个裁缝,你可能会发现自 己很容易的去找一个合适的模式然后按着这个模式去设计自己的衬衫。使用一个模型,你可以在更少的时间内得到一个熟练设计的衬衫。 回到讨论软件上来,一个数据提取层或者一个CMS(content management system)就是一个库——它是先前设计好而且已经编码好了的,如果它能准确的满足你的需要那它就是一个好的选择。但如果你正在读这本书,可能你会发现 库存的(原有的)解决方案并不是总是对你有效。至今你知道什么是你所要的,而且你能够实现它,你仅仅需要一个模型来引导你。 最后一个想法:就象一个裁缝模型,一个设计本身而言是没有什么用处的。毕竟,你不可能穿一个服装模型——它仅仅是由很薄的纸拼凑起来的。类似的,一个软件设计模型也仅仅只是一个引导。它必须根据程序设计语言和你的应用程序的特点和要求而特别的设计。 本书的目标 本书的目的不是为了全面的介绍各种类别的软件设计模式,也不是为了发展一个新的设计模式或者术语,而是为了突出介绍一些已有的著名的设计模式。这本书的 独特之处在于介绍了一些我认为对开发动态WEB应用程序很有帮助的设计模式,而且用PHP语言显示了如何实现这些设计模式。 面对对象编程OOP 这本书一个优点就是所有的观点都是基于OOP这种很自然的设计模式,并且用OOP来实现。

2006-05-22

web下的listview控件

尝试着写web下的listview控件,listview一般有四种显示模式——平铺、图标、列表和详细信息。这些显示模式唯一的共同点就是数据是相同的,显示效果完全不一样。这时候xml的优势就完全体现出来了。 第一步,就是建立一个自定义格式的xml,用来保存listview数据 第二步,xsl可以解析xml生成html,所以就针对listview的每一种显示效果设计了一个对应的xsl。这样前面定义的xml数据和不同的xsl一起就可以显示出不同的效果。 第三步,htc在开发web控件时,非常灵活和功能强大,可以采用客户端脚本如js,可以对控件进行封装,使之有自己的属性、方法和事件等。利用htc封装的listview控件中对外有两个属性CfgXMLSrc(配置文件,设置listview的每一种显示模式对应的xsl文件路径等信息)和View(listview的显示模式),在htc中根据listview的View属性来选择不同的xsl文件和xml数据文件生成html,并输出。 这样就可以通过改变listview控件的view属性来切换listview的不同显示效果。 在线演示 打包下载 以前写换皮肤的控件,都是通过更换css和图片路径来做的(可以看看http://www.stedy.com),局限性很大,例如toolbar,在winxp和win2000下差别很大,只靠通过换css和图片路径无法应付这种情况。通过开发listview的经验,从中悟到了一种更好的开发换皮肤的web控件的模式: 首先将控件的相关数据用xml描述出来,对于每一种Theme(皮肤/主题样式),有一个相关的配置文件,配置文件中记载了该控件所用到的xsl、css、图片路径、htc等信息。在控件相关的htc中,根据Theme属性组合这些。从而可以灵活的应付各种情况。 例如刚才说的toolbar,假如入我们有三种风格:winxp蓝色、winxp银色和windows经典,前面两种基本差不多,只是样式和图片不一样,而后面一种和前面的两种差别比较大。那么我们需要写两个xsl,三个css文件,三个图片文件夹,组合一下就可以生成这三种风格的toolbar了。 这种控件开发模式会慢慢流行起来并在asp.net控件中发挥重要作用的

2006-01-05

AJAX开发简略(附源代码)

AJAX开发简略... 1 一、AJAX定义... 3 二、现状与需要解决的问题... 3 三、为什么使用AJAX. 4 四、谁在使用AJAX. 6 五、用AJAX改进你的设计... 6 例子1:数据校验... 7 例子2:按需取数据—级联菜单... 7 例子3:读取外部数据... 7 六、AJAX的缺陷... 7 七、AJAX开发... 8 7.1、AJAX应用到的技术... 8 A、XMLHttpRequest对象... 8 B、Javascript. 9 C、DOM. 9 D、XML. 9 7.2、AJAX开发框架... 9 A、初始化对象并发出XMLHttpRequest请求... 9 B、指定响应处理函数... 10 C、发出HTTP请求... 10 D、处理服务器返回的信息... 11 E、一个初步的开发框架... 11 7.3、简单的示例... 13 A、数据校验... 13 B、级联菜单... 14 参考文章:... 16 在使用浏览器浏览网页的时候,当页面刷新很慢的时候,你的浏览器在干什么?你的屏幕内容是什么?是的,你的浏览器在等待刷新,而你的屏幕内容是一片空白,而你在屏幕前苦苦的等待浏览器的响应。开发人员为了克服这种尴尬的局面,不得不在每一个可能需要长时间等待响应的页面上增加一个DIV,告诉用户“系统正在处理您的请求,请稍候……”。 现在,有一种越来越流行越热的“老”技术,可以彻底改变这种窘迫的局面。那就是AJAX。如今,随着Gmail、Google-maps的应用和各种浏览器的支持,AJAX正逐渐吸引全世界的眼球。

2006-01-04

WAPM综合网络服务器系统v2.0.3 正式版本 [绿色的]

WAPM是综合网络服务器系统。 它包含了以下组件: Apache2,是互联网最最最流行的WEB服务软件,用以提供基本的WEB服务功能,同时支持SSL,GZIP,LIC(IP同时连接数限制)功能; PHP4,PHP5,是互联网最最最流行的动态网页语言,用以提供PHP语言的网络应用程序开发,同时支持ZendOptimizer优化功能和Zend加密功能,或者Turck MMCahe对PHP的加速、优化、加密、动态缓存功能; Tomcat4,用以提供互联网最最最热门的JSP(JavaServer Pages)和Servlet(Java Servlet)的服务解析。 MySQL4,用以提供互联网最最最流行的SQL数据库功能。 为什么选择WAPM? ----------- 解压不用任何配置,就可以安装运行 强大的WEB服务器功能,可配置性强,可管理性高 独创的全中文虚拟主机配置系统 全Unix路径设置,为将来升级迁移预留接口 所有软件采用开放源代码阵营的软件 支持最流行的技术 专业的技术支持

2006-01-24

CakePHP :: Ajax Demo

This is a simple demo of some of the AJAX helpers now available in CAKE. These helpers are directly modeled on Ruby On Rails. In fact, they were shamelessly ported from rails almost verbatim. You can also see some of the amazing effects available through the Prototype javascript library. This is a demo not an application. Obviously this uses far too much AJAX in nonsensical ways. 很不错的基于php+ajax的例子

2006-01-04

DotArticle 文章管理系统 (asp版) 0.1版

仿照sharepoint,已实现核心功能: 如果要使用sql server版,请执行data目录下的dotarticle.sql,并适当修改inc/data.asp中的sql连接即可

2006-01-05

系统分析师考试论文案例集(第二辑)

论文一 论Java技术在因特网平台上的应用—通信服务平台的应用 论文二 论Java技术在因特网平台上的应用——银行业的应用 论文三 论改进Web服务器性能的有关技术—银行业的应用 论文四 论改进Web服务器性能的有关技本——数字图书馆类的应用 论文五 论实时控制系统与企业信息系统的集成——通信业应用 论文六 论实时控制系统与企业信息系统的集成——工业自动化改造的应用 论文七 论实时控制系统与企业信息系统的集成——工业控制的常规应用

2006-01-04

无限菜单之 xml+popup 版(IE5.5+)

在IE5.5+中开始支持的Popup窗口有很多很特别的特性: Popup窗口可以超出浏览器窗口区域; 可以不用担心被下拉框、flash、Iframe等这些东西遮挡; 一个Popup窗口打开后,当在它的区域以外点击或者另一个Popup窗口被打开时都会自动关闭; Popup窗口是没有焦点的; 用户不能改变Popup窗口大小; Popup窗口中的内容是不能被选择的; ...... 因为这些特征,Popup窗口制作的菜单比起传统的div(层)实现的菜单有着得天独厚的优势,不仅效果会非常好,而且代码也会是非常少的,只是对于实现起来却有几个需要解决的棘手问题:多个Popup共存的问题、如何递归生成菜单、如何控制Popup的显示隐藏…… 要用Popup制作菜单一个最重要的问题就是要解决多个Popup共存的问题,Msdn上的描述是:“一个Popup窗口打开后,当另一个Popup窗口被打开时就会自动关闭”。我本来一直以为Popup窗口是不可以多个共存的,不过偶然从51js上知道:父Popup窗口可以创建子Popup窗口,子Popup窗口又可以创建子Popup窗口,这样就可以同时存在一个Popup窗口家族,当父Popup窗口关闭,所有的子孙窗口都会关闭。这点恰好可以运用在菜单中——父菜单关闭子菜单一起关闭,省去很多繁琐的判断。 最开始,我写了一个简单的两层的Popup右键菜单,为此专门写了一个根据级数生成Popup窗口家族的递归方法: var pops = new Array(); // 用来存储Popup窗口家族的数组 function CreatePopup(degree) { if (degree < 0) // 层数不能小于0 return null; if (pops[degree] != null) //如果已经存在则不需创建 return pops[degree]; if (degree == 0) pops[0] = window.createPopup(); //创建最顶层Popup窗口 else{ if (pops[degree - 1] == null) pops[degree - 1] = CreatePopup(degree - 1) //递归回溯一层一层开始创建 pops[degree] = pops[degree - 1].document.parentWindow.createPopup(); //从父Popup窗口创建子Popup窗口 } pops[degree].document.body.setAttribute("degree", degree); return pops[degree]; } CreatePopup(1); //创建一个2层的Popup家族 这个方法可以解决多个Popup共存的问题,只是如果要使用这个方法来实现无限级菜单代码恐怕就比较繁琐了。这个例子,只是为我验证了无限级Popup窗口共存的可能,并没有继续走下去,因为我有了更好的思路。 Xml真是好东西,在Web控件中,可以得到灵活的运用(在我的上篇随笔《xml+xsl+htc,web控件开发的理想组合》中,已经简单提到了xml+xsl+htc的理想组合),在这里也不例外,先用Xml来定义好菜单的数据menu.xml: <?xml version="1.0" encoding="GB2312"?> <Menu> <MenuItem Text="菜单1"> <MenuItem Text="菜单1子菜单"/> </MenuItem> <MenuItem Text="菜单2"/> </Menu> 通过Xml,可以很方便直观的定义菜单数据。 菜单数据已经定义好了,现在问题就是如何来把这些xml数据变成Popup菜单?!在传统的用div(层)来实现的菜单,一般都是一次性将所有级菜单数据生成HTML,放在各个层中,然后动态在制定位置显示隐藏这些层来实现模拟菜单的效果,在这里当然也可以这么做。回想一下菜单的特征:每次显示一级菜单,如果该级菜单中某菜单项中有子菜单,当鼠标经过或者点击该菜单项时弹出下级子菜单,这是一个递归的过程。如果我们可以:每次显示一级xml的内容,如果该级xml中某节点有子节点,当鼠标经过该节点时读取下级xml的内容,这也是一个递归的过程,而且恰好和菜单的显示过程是一一对应的。 既然大胆假设了一把,那么就来小心求证一下:首先,用xsl来实现解析一级xml很容易搞定,使用xsl:for-each遍历生成子菜单,并且,如果子菜单中还有子xml数据,将这些子xml数据存在子菜单对应的数据岛中,以备后面处理鼠标经过或点击菜单项时用到。下面是Menu.xsl用来生成子菜单的部分: <!-- 遍历子菜单 --> <xsl:for-each select="MenuItem"> <tr height="18" onmouseover="ItemOver(this)" onmouseout="ItemOut(this);" onclick="ItemClick(this)"> <td width="17" align="center"> <IMG SRC="images/dot1.gif" WIDTH="6" HEIGHT="6" BORDER="0" ALT=""/> </td> <td> <xsl:value-of select="@Text" /> <xsl:if test="count(MenuItem) > 0"> <!-- 这里用来存储子菜单的xml数据 --> <xml> <xsl:copy-of select="."/> </xml> </xsl:if> </td> <td width="20" align="right" valign="top" style="padding-right: 6px; padding-top:4px;"> <!-- 如果有子菜单则显示箭头 --> <xsl:if test="count(MenuItem) > 0"> <img src="images/arrowR.gif"/> </xsl:if> </td> </tr> </xsl:for-each> 现在就是解决鼠标经过菜单项时,如果有子菜单则解析子菜单数据,并使用子Popup窗口显示子菜单数据,刚才我们存的数据岛这时候就可以派上用场了。在xsl中,需要用到一些客户端脚本来辅助完成了 // 创建当前窗体(可以是IE窗体也可以是Popup窗体)的Popup对象 // 这个Popup对象就是用来存储子菜单数据的 var oPopup = document.parentWindow.createPopup(); // 装载xsl var stylesheet = new ActiveXObject("Microsoft.XMLDOM"); stylesheet.async = false; stylesheet.load( "menu.xsl" ); // 鼠标经过菜单项 function ItemOver(obj) { // 隐藏已经打开的菜单项 if (preObj != null) { if (preObj == obj) return; oPopup.hide(); // 要清空原Popup中的数据——document.write()方法是接着原来的内容往里面写,所以如果不清空会出现重复数据 oPopup = document.parentWindow.createPopup(); // 恢复前一个菜单项的状态 ItemNormal(preObj); preObj = null; } obj.className='PopMenuItemOver'; if (obj.cells(2).children.length > 0) //有子菜单 { obj.cells(2).children(0).src = "images/ArrowRHighlight.gif"; // 获取子菜单xml数据 var subMenuData = obj.all.tags("xml")(0).XMLDocument; // 根据子菜单xml数据和当前xsl文档生成HTML var sHtml = subMenuData.transformNode(stylesheet); // 将解析出来的HTML全部输出到Popup中,在Popup中,又可以利用这些脚本再Popup…… oPopup.document.write(sHtml); // 计算popup内容的实际宽度高度 oPopup.show(0, 0, 1, 1, obj); var width = oPopup.document.body.scrollWidth; var height = oPopup.document.body.scrollHeight; oPopup.hide(); // 显示菜单 oPopup.show(obj.offsetWidth, 0, width, height, obj); preObj = obj; } } // 鼠标移出菜单项 function ItemOut(obj) { if (oPopup.isOpen && preObj == obj) // 如果子菜单被打开则跳过 return; ItemNormal(obj); } // 恢复到菜单项的默认状态 function ItemNormal(obj) { obj.className='PopMenuItem'; if (obj.cells(2).children.length > 0) { obj.cells(2).children(0).src = "images/ArrowR.gif"; } } 这样:使用menu.xsl解析一级xml的内容生成一级菜单,如果该级xml中某节点有子节点,当鼠标经过该节点时,创建当前窗口/Popup窗口的子Popup窗口,使用menu.xsl解析子节点中xml的内容并输出显示到子Popup中,递归,即可通过Popup显示所有子菜单。 作为一个菜单来讲,这个例子还有很多要完善的地方(当我再结合htc时它绝对是一个非常棒的菜单控件),但是这个例子已经完整地实现了一个xml结合xsl递归生成无限Popup菜单的例子,这个简洁的代码再次印证了xml+xsl+htc的理想组合。

2006-01-05

左右侧的树选择节点功能

从左侧的树选择节点,右侧将选择的节点按照树形显示。 如果父节点选择,则子节点默认全部选中,所以在右侧默认不显示子节点 写的比较仓促,左边的树是在微软的基础上改进的,右边的树是我以前写的一个根据xml+xsl生成树的小程序 选择移除操作都是对xmldom进行操作,操作完了重新加载这个xmldom

2006-01-05

从A空间直接下载文件到B空间—RGD 1.5

 RGD 是一个下载工具,但是它不是应用于你的个人电脑的!   RGD 可以下载别的网站提供的东西直接到你的空间中,不用下载到本地然后再上传到自己的空间中,也就是是从A空间到B空间(可以是不同服务器上的,也可以使同一台服务器上的), 举个例子: shou.com提供下载一个软件 sohu.com/soft111.rar , 你可以将这个下载的软件直接下载到自己的空间里面的某个你设定的目录。这么说应该可以理解!   RGD 可以节省你的下载时间,如果你下载的东西在国外的空间上,而你自己的也是国外空间,那么它可以节省你多多一半的下载再上传的时间。假设你使用了一台没有按照FTP软件的电脑,那么有了RGD ,你就方便了,打开自己的装有RGD 的空间,输入你想要下载的软件(或其它)的下载地址连接,把你下载的东西先放在自己空间里保存好!   RGD 可以添加注释内容; 可以直接将下载的文件分割并存储; 可以发送电子邮件到你指定的邮箱;可以设置并使用代理服务器下载;可以指定下载保存目录。 它在线编辑功能: 可以批量更改文件名;可以批量分割文件;可以批量发送到电子邮件;可以批量删除! 注意:    1) 你的空间必须支持PHP (不需要MySQL), 如果是 Linux主机, 你所设定的下载目录的属性一定要改成777, windows主机不需要改!   2) 这是有一个管理工具,不是随便开放给每个人使用的,除非是你的好朋友!当然我的演示也除外!所以请更改下载以后的文件名称,改一个你能记住的,默认的是 a2b.php , 下载目录中的index.html不要删除或者你可以换一个别的内容的页面,这是为了防止别人看到你网页目录下内容的。   3) 如果你用 RGD 上传东西到你的空间里面了,最好 删除或重命名的时候也用 RGD 来操作,因为程序在空间里面生成了一个列表文件(files.lst), 如果你在FTP上删除或重命名文件了,那么列表示没有变化的。那么在RGD 里看到的内容要和实际的文件不一样了。

2006-01-04

skype开发应用程序接口文件(API)中文版

skype的API的详细说明,示范代码等相关资料,PDF文件的形式。 skype魔法表情就是用skype API开发的一个有趣的skype插件

2006-01-10

Struts+Spring+Hibernate实现上传下载

基于struts、spring、hibernate的上传下载程序

2006-01-04

AjaxHelper的企业门户网站构架示例

采用asp基于AjaxHelper的企业门户网站构架示例

2006-01-04

数字信号处理程序

里面有FIR IIR,和傅立叶变换,FFT等功能。

2005-12-31

拖动效果(ajax+php)示例

采用php+ajax实现的拖动效果例子程序

2006-01-04

拖动条(ajax+php)示例

采用ajax+php实现的拖动条示例

2006-01-04

sajax-0.10

WELCOME TO SAJAX ---------------- Sajax is a cross-platform, cross-browser web scripting toolkit that makes it easy to expose functions in your code to JavaScript. For more information about Sajax, please see the homepage: http://www.modernmethod.com/sajax/ In this archive you will find a folder for each platform that is currently supported. Please see individual documentation in each folder for specific errata. 下载三,为扩展名tgz格式的下载包

2006-01-04

用户名检测(ajax+php)

采用ajax+php检测用户的示例程序

2006-01-04

WebBaker_0.10.0_dev

WebBaker is a web build utility for CakePHP Framework. It can help build the necessary CakePHP MVC files. To match current CakePHP release, it's current version is 0.10.0_dev. Installation Copy 'app' and 'vendors' directories to your CakePHP root directory. Chmod app/models, app/controllers, and app/views to 0777. Launch http://localhost/cake/bakers or http://localhost/bakers (depending on your CakePHP installation).

2006-01-04

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除