推荐轻量级面向服务Web开发库Objot

[url=http://objot.info/]Objot[/url]是我们公司[url=http://www.aragonconsultinggroup.com/]Aragon Consulting Group[/url]的大牛crazybird发起的开源web开发库,基于JavaScript,Java,Python等,目前版本14,基于Java的Web封装框架已经可以使用了。

Objot核心库主要是做页面JavaScrit对象和后台Java等Model的[b]序列化与反序列化[/b]工作,使用Objot[b]不需要form提交[/b],而是将页面post数据组装成一定格式的字符串,然后以Ajax请求的方式发送到后台service层,比较类似于Ajax与WebService的开发模式,适用于[b]页面逻辑复杂[/b]的Web程序。

Objot和[url=http://www.json.org/]Json[/url]相比,优点是对象引用和对象循环引用的增强处理,Json遇到对象循环引用,如user.friend时就无法处理了,而Objot使用内部id引用来帮我们封装好对象图的序列化工作。

Objot的Java端Web开发框架使用基于JDK5 Annotation配置,如:
[code]
@Entity
@Table(uniqueConstraints = @UniqueConstraint(columnNames = "name"))
public final class User extends IdAuto<User>
{
@BeSimple(max = 20)
@Get( { DoUser.class, DoChat.class })
@Set( { DoSign.class, DoUser.class })
public String name;

@BeSimple(max = 20)
@Set(DoSign.class)
public String password;

@ManyToMany
public java.util.Set<User> friends;

@GetSet(DoUser.class)
@NameGet("friends")
@Transient
public java.util.Set<User> friends_;
}
[/code]
使用@Get标记的属性表示可以序列化到页面客户端,使用@Set标记的属性表示可以反序列化到后台服务器,并在参数里列出需要用到的类,没有标记的则被屏蔽
[code]
public class DoUser extends Do
{
/** @return me with {@link User#friends_} */
@Service
public static User me(Do $) throws Exception
{
User me = $.load(User.class, $.me);
me.friends_ = me.friends;
return me;
}

/** update {@link User#friends} if SO' is not null */
@Service
public static Ok update(User u, Do $) throws Exception
{
if (u.friends_ == null) // || name
return Ok.OK;
User me = $.load(User.class, $.me);
if (u.friends_ != null)
me.friends = u.friends_;
return Ok.OK;
}

/**
* by {@link User#id} (if > 0) or {@link User#name} (if not null).
*
* @return array of User or null if not found
*/
@Service
public static User[] get(User[] us, Do $) throws Exception
{
for (int i = 0; i < us.length; i++)
us[i] = us[i].id != null && us[i].id > 0 ? $.get(User.class, us[i].id)
: us[i].name != null ? $.find1(User.class, "name", us[i].name) : null;
return us;
}
}
[/code]
使用@Service标记的方法表示暴露给Web浏览器,相当于可以使用url访问的action

页面我们不需要再写HTML表单,直接使用JavaScript定义数据传输:
[code]
DoSign = function () {
}

DoSign.inUp = function (name, pass, This, done) {
return $Do('DoSign-inUp', 'Signing', $get(new User(null, name, pass), this),
This, done, null, this.doneInUp);
}
DoSign.doneInUp = function (ok, err) {
ok && (_me = $.is(ok, User));
}

DoSign.out = function (This, done) {
return $Do('DoSign-out', 'Signing out', '', This, done);
}
[/code]
'DoSign-inUp'和'DoSing-out'表示调用的是DoSign类的inUp方法和out方法

Objot有一个基于Java的chat的demo,大家可以下载来看看。
Objot的Python端Web框架正在开发中。

对于页面逻辑复杂的程序,例如有时候页面input框、select框等特别多,name、id容易冲突,或者页面动态生成的内容特别多时,使用Objot会让您脱离传统HTML表单提交
繁杂错乱的痛苦、感受Web开发的乐趣。

Objot代码库正在不断更新中,敬请大家关注,欢迎与蔡倩彦联系。
菜菜的个人主页是[url]http://qianyan.cai.name/[/url],上面有一些他发起的开源项目的介绍。
BIM轻量化之路(一)-unity展示 从事建筑行业也有一段时间,知道了整个建筑建设的大概流程:初设、设计、施工交付到后期运营,信息化有个关键技术就是模型的轻量化。 我们的BIM设计人员主要使用Revit 进行三维设计,这里主要是分享基于revit的轻量化实现。实现路径很曲折,先后从uintiy 转到webgl的threejs. 一、几种模型的文件格式 FBX FBX格式都是三维通用模型格式,基本主流的三维设计软件都可以导出导入FBX,他们主要区别是FBX包含动画、材质特性、贴图、骨骼动画、灯光、摄像机等信息。revit 可以直接导出FBX,通过 阅读详情

相关推荐

online obj viewer-开源

用于查看.obj文件的在线应用程序。 只需提供.obj文件的路径即可查看。

1.objot示例之容器

objot是一个轻量级面向服务的java web开发库,目前支持客户端语言包括javascript和actionscript。 objot是由蔡倩彦(南开大学软件学院本科)主导开发……(此处略去Integer.MAX_VALUE字的介绍)。 objot项目站点为:http://objot.info/ 废话不多说,先来看看后台容器方面的示例: 开发环境:jdk6(需要jdk5以上版本...

java,objot,qutum,坚持! 205

Obj Model Viewer:obj格式的简单模型查看器。-开源

obj格式的简单模型查看器。

使用开源技术搭建一套轻量化二维+三维GIS系统技术选项

相信很多大佬有不少技术路线,本文讲的可能是比较常见的一种。 用到的关键组件: GeoServer(入门会用) Curl(入门会用) QGIS(入门会用) LeafLet/OpenLayers/Mapbox之一(入门会用) Cesiumjs(入门会用) Postgresql+PostGIS SLD(初步了解) obj2gltf Nodejs 按照这样一个流程来从业务数据转换到最后发布二维地图: 二维发布 三维发布 空间分析 ...

专注GIS软件开发。 952

ESP32-C61 eFuse控制器深度解析:寄存器架构与安全烧写实践

eFuse(电子熔丝)是嵌入式芯片实现硬件级不可逆配置与信任根构建的核心物理机制,其本质是通过电学编程固化关键安全参数。原理上依赖熔丝单元的单向导通/断开特性,结合Reed-Solomon纠错、多级写保护和时序可控编程,保障数据在宽温域与工艺偏差下的高可靠性。技术价值在于为Secure Boot、Flash加密、密钥隔离等安全功能提供可信锚点,支撑从启动到运行的全链路防护。典型应用场景涵盖物联网设备量产烧录、安全启动使能、MAC地址固化及抗DPA密码运算配置。本文聚焦ESP32-C61平台,深入解析其eFu

weixin_42589700的博客 123

STM32 RT-Thread 系统分析(1)- 启动文件

RT-Thread STM32 系统分析(1)- 启动文件前言基本信息前言说明三级目录 前言 基本信息 名称 描述说明 RT-Thread Studio 软件版本 版本: 1.1.3 RT-Thread 系统版本 4.0.2 STM32CubeIDE 软件版本 1.4.0 STM32芯片型号 STM32F013VG 前言说明 使用了STM32CubeIDE 和 RT-Thread Studio 建立了相同型号芯片的工程,对比其中启动文件内容差异如下: 左侧是RT-Threa

鸳鸯冰笔的博客 4096

训练数据示例

针对“规格书生成测试用例脚本”的任务,在 LLaMA-Factory 中使用即可。关键是把“规格书内容”放进input字段,把“期望的脚本输出”放进output字段。

liuxs2009的专栏 57

Latex参考文献中大写字母编译后自动变成了小写,如何保持原字母大写形式

bib文件参考文献中大写自动变为小写,如何保持原大写问题。Latex: 保持参考文献大小写,overleaf文献编译后,原大写字母自动变成了小写字母,如何保持原字母大写

我的个人博客 5805

iOS 多语言本地化教程,VS Code KXApp 编辑 String Catalog .xcstrings

做 iOS 多语言本地化总要在 VS Code 和 Xcode 之间来回切?这篇讲用 KXApp(快蝎)在 VS Code 里直接编辑 String Catalog(.xcstrings):双击打开和 Xcode 一样的表格,`.xcstrings` 与老的 `.strings`、`.stringsdict` 同表编辑,加语言同步登记到工程、从源码扫描同步新 key,复数、设备变体和变量占位都在表里处理,改源语言文本后已有翻译自动标需复核。文件仍是标准格式,回 Xcode 打开一致。

2501_91592143的博客 162

解决vLLM安装卡在vllm-nccl-cu12依赖项的实战指南

本文提供了解决vLLM安装过程中卡在vllm-nccl-cu12依赖项的详细指南。通过分析CUDA版本兼容性问题,介绍了三种实用解决方案:安装指定版本vLLM、手动安装nccl-cu12依赖以及升级CUDA到12.x版本,并特别针对离线环境提供了安装建议,帮助开发者顺利完成vLLM的安装部署。

weixin_29098367的博客 514

2026华为OD机试(JavaScript)真题【E卷+A卷+B卷+C卷+D卷】目录+在线OJ

华为OD机试真题题库【E卷+A卷+B卷+C卷+D卷】目录,JavaScript实现。

MISAYAONE的博客 8万+

用 ijson 流式解析 SerpBase 快照归档:把 16GB 内存压回 200MB

凌晨三点,解析脚本把机器内存吃满了去年做搜索数据归档分析时,我写了一个统计脚本:读取一个月的原始响应归档,统计每个域名在自然结果里出现的次数。归档文件是把每天几千条 SerpBase 响应拼成一个大 JSON 数组,单月文件 2.4GB。脚本跑起来不到四十秒,监控告警就响了——一台 16GB 内存的机器,可用内存被吃到只剩几百兆,同机的采集任务全被拖慢。。

Y381532662的博客 269

C++ 图像线特征提取(CannyLine算法+opencv3.4.6)

C++ 图像线特征提取(CannyLine算法+opencv3.4.6)

weixin_43896283的博客 1084

MCP接入Claude Code: 配置调用与排错全流程

💡 阅读提示: 这篇是我把 Sorftime MCP 接进 Claude Code 的完整过程, 从写配置文件到跑通第一次调用, 再到撞上 unrecognized_model、PATH、环境变量这几个坑。想给自己的 AI 助手接一

2601_96080792的博客 177

通过Robotstudio修改机器人程序的具体方法和步骤

通过Robotstudio修改机器人程序的具体方法和步骤

Robot_PLC_HMI_Automation 6393

《八》:玩家位置同步(玩家防碰撞)

在VR大空间体验中,由于玩家佩戴头显设备无法直接观察彼此位置,容易发生碰撞。因此,需要将玩家的实时位置信息绘制在虚拟空间中,实现位置可视化。通过获取头显的位置和旋转角度等数据,可以推算出玩家的移动状态和位置。使用可序列化的玩家结构体,通过UDP将玩家数据发送到服务器,服务器接收并反序列化数据后,同步所有玩家的最新信息至各客户端。客户端根据接收到的数据渲染虚拟人物模型,实现动态位置更新。这一过程涉及数据序列化、反序列化、网络通信和实时渲染等技术,确保玩家在虚拟空间中的位置同步和可视化。

unitygroup的博客 413

AI 编程智能体零门槛调用手册:从“能跑”到“敢放进作品集”

抄下来的调用示例跑不通、密钥硬编码、换模型就崩?这份手册按使用频率排序,每条给出用途、最小示例和坑点,30秒定位你需要的片段。跟着做,你将得到一个可配置、可切换模型、密钥不入库的小型智能体脚本——正是面试常问的安全集成大模型能力。🔧 从“能跑”到“敢放进作品集”,只差这一层重构。

2601_94912102的博客 394

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Python+Agent入门笔记(二):列表推导式、模块和异常,这些写 Agent 前得会

接上一篇《Python+Agent入门笔记(一)》。基础语法跑通之后,这篇聊几块日常写脚本绕不开的东西。还是按 JS/Go 开发者的视角写,尽量记录我实际卡过的地方。

qq_41241612的博客 430

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

MCP本地服务集成避坑:从Stdio管道僵死到双向JSON-RPC稳健通信

本文剖析MCP服务端因调试日志污染Stdio管道导致客户端挂起的根因,指出console.log等非结构化输出会破坏JSON-RPC协议解析,引发通信僵死。提出双通道隔离方案:将业务通信严格限定于stdout,所有日志分流至stderr,并强制单行原子化传输与缓冲刷新。实践证明该架构可彻底消除解析崩溃与延迟问题,实现零延迟、高可靠的本地智能体通信,是MCP插件工程化的必选项。

艺杯羹的博客 492

从 Prompt 到 Tool Calling:AI Agent 如何稳定连接程序世界

大语言模型原生能力是生成 Token,而软件系统要求类型、权限、状态和确定的执行结果。AI Agent 要连接数据库、搜索引擎、支付系统或企业 API,中间必须建立一层可验证的交互协议。

weixin_47983718的博客 196

Spring AI 全模块 API 字典一览(1.1.0 版)

本文为 Spring AI 1.1.0 全量字典,涵盖模型接入(ChatModel)、Prompt与Message架构、ChatOptions配置及实战用例。重点解析 call()/stream() 方法签名、Prompt 消息封装机制、ChatResponse 响应结构,以及工具调用(ToolCall/ToolResponse)的配对逻辑。附真实项目用例(如 WebSearchReactAgent、PlanExecuteAgent),强调多轮对话记忆机制、流式处理防空策略与参数配置顺序陷阱,适配 Open

Java 后端学习者。写 JUC 并发、Redis 实战,也记录 LLM 应用开发(Spring AI / RAG / Agent)的学习实录——少讲概念,多讲过程和踩坑。 594

c++ 超级大坑未定义行为如何避免(下)

尤其是通过。

拒绝AI文,努力在AI时代写出感动人心的好文章 141

LangChain 能力详解(二):聊天模型核心能力 —— 工具调用、结构化输出、流式传输

ChatOpenAI实时提取 JSON 字段边输出边高亮 Markdown边输出边计费yield chunk.content.upper() # ← 每个块都处理会同时实现parse(非流式)和_transform(流式),所以这个解析器在invoke和stream下都能用。能力一句话核心 API工具调用让模型从「只会说」变成「会决定做什么」@toolbind_tools结构化输出让模型从「返回字符串」变成「返回对象」流式传输让用户从「干等 20 秒」变成「立刻看到」stream。

2601_94861874的博客 487

AI 应用的数据库架构:按数据类型选技术

**AI 应用的数据库架构:按数据类型选技术** ## 一、关系型库:记录主库 对绝大多数 AI 产品,最安全、省心的起点是一个支持事务与约束的关系型库,作为默认记录主库。 适用场景:租户与用户身份、计费与权益(订阅、配额)、智能体运行与任务状态、工具审批与审计日志、对话元数据(非消息体本身)、文档归属与访问策略、评测结果。 灵活用法:可用 JSON 列存供应商元数据,而不破坏关系保证。具

search_agent的博客 349

Vue 前端开发 AI 对话页面:流式消息渲染、文件上传

关键点是不能手动设置 Content-Type 为 multipart/form-data,必须由浏览器自动生成带有 boundary 的请求头,否则后端无法解析。思路:将对象序列化为 JSON 字符串,作为 FormData 的一个普通字段(如 formData.append(‘payload’, JSON.stringify(data))),后端接收该字段后再反序列化。若上传大文件(>10MB),需实现独立的分片上传接口,在提交对话前先获取文件 id 或 url,再随文本发送引用。移除输入框的禁用态;

2402_85729970的博客 384

23-JSON-Patch转成局部更新

前端仅修改部分字段时,应将 JSON Patch 的 replace 操作映射至白名单列,转为局部 UPDATE,避免整行更新导致未展示字段被清空。服务端严格校验路径、类型,拒绝主键、删除标记等敏感字段,审计字段由服务端写入,确保数据安全与一致性。通过参数化查询防止注入,结合版本控制应对并发,实现精准、安全的局部更新。

CAthlete的博客 210
上一篇: 每天一剂Rails良药之Handling Bounced Email
下一篇: RJS Debugging
hidetobj
博客等级 码龄19年 16粉丝 301原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值