用SSH框架配合ExtJS来动态展示和操作数据库数据的那些事儿
- 问答
- 2026-01-01 13:20:43
- 1
根据常见的SSH(Struts2+Spring+Hibernate)与ExtJS整合开发实践总结)
用SSH框架配合ExtJS来动态展示和操作数据库数据的那些事儿,说白了,就是怎么把后台数据库里那些死气沉沉的数据,变成浏览器里一个能看、能点、能排序、能编辑的活生生的表格或者表单,这事儿干成了,用户用着爽,开发者维护起来也相对省心,下面我就拉拉杂杂地说说这个过程里的事儿。
首先得说说为啥是这几个家伙凑在一起,SSH是后台的铁三角:Hibernate(H)负责和数据库打交道,它像个翻译官,把Java对象和数据库表记录自动转换,你不用写一大堆繁琐的SQL语句了;Spring(S)是个大管家,它把各个部件(比如Hibernate的会话、事务什么的)管起来,让它们能协同工作,同时也负责管理对象的创建和依赖关系,这叫控制反转;Struts2(S)可以看作是专门负责接待前台请求的“前台经理”,它接收从浏览器发过来的请求,比如用户点了哪个按钮,然后把请求分发给后面合适的“业务员”(Action类)去处理,而ExtJS呢,它是纯前端的家伙,专门负责把界面做得漂亮又交互性强,它画的表格、表单、窗口什么的,比原生的HTML控件好看也好用得多,它们几个的分工就是:ExtJS负责“面子”,Struts2负责“接待”,Spring负责“调度和管理”,Hibernate负责“搬砖”(和数据仓库打交道)。
那具体是怎么串起来的呢?咱们想象一个最常见的场景:在网页上显示一个用户数据表格。
第一步,得先有数据,Hibernate这边,你会定义一个Java类(比如叫User),这个类的每一个实例就对应数据库里用户表的一条记录,你还会写一个映射文件或者用注解告诉Hibernate,这个User类的“id”属性对应表里的“ID”字段,“name”属性对应“NAME”字段,这样,当你用Hibernate的查询语句(HQL)或者Criteria API说要“找所有User”时,Hibernate就会默默地把“SELECT * FROM USER”这个SQL语句执行了,然后把查出来的每条记录都变成一个User对象,装在一个List列表里返回给你。
第二步,Struts2的Action要出场了,你会写一个UserAction类,里面可能有一个叫listUsers的方法,这个方法里,会通过Spring注入的Service层对象(Service层通常封装复杂的业务逻辑,这里可能直接调用Hibernate的DAO进行查询),去调用Hibernate获取那个User对象的List,拿到数据后,这个方法返回一个字符串,success”。
第三步,关键的一步,是怎么把Java的List变成ExtJS能识别的数据,ExtJS通常期望接收JSON格式的数据,在Struts2的配置里,你会用一个叫JSON Plugin的插件,在listUsers方法返回“success”后,这个插件会自动把Action类里指定的属性(比如你有一个userList属性,里面装着查询结果)序列化成JSON字符串,这个过程你不用管,插件帮你做了,生成的JSON大概长这样:{ "root": [ {"id":1, "name":"张三"}, {"id":2, "name":"李四"} ], "totalCount": 2 },其中root是实际的数据数组,totalCount是总记录数,用于分页。
第四步,轮到前端的ExtJS表演了,你会在一个JSP页面或者HTML页面里,写一大段JavaScript代码,用ExtJS的语法定义一个“网格面板”(GridPanel),这个定义过程有点像搭积木:你要告诉它每一列显示什么(比如第一列对应数据的“id”属性,第二列对应“name”属性);你要告诉它数据从哪里来,也就是指定一个“数据存储”(Store),这个Store非常关键,它就像一个数据仓库代理,你给它一个URL(比如userAction!listUsers.action),它会自动向这个地址发起Ajax请求,拿到我们第三步生成的JSON数据,然后喂给GridPanel显示出来,这样,页面一加载,ExtJS的Grid就会自动去后台要数据,然后华丽地渲染出表格。
这还只是显示,如果要操作,比如双击某行编辑一个用户,流程也类似,ExtJS的Grid可以配置成可编辑的,当用户修改了某个单元格的值,这个变动会先被ExtJS的Store记录下来,然后你可以设置Store自动同步,或者加一个“保存”按钮,当用户点击保存时,Store会把变动的数据(可能是新增的、修改的、删除的记录)打包成JSON格式,通过Ajax请求发送给Struts2的另一个Action方法(比如userAction!saveUsers.action),后台的Action方法接收到这个JSON字符串后,JSON Plugin又会帮你把它自动转换成Java对象的List,然后Action再调用Service方法,Service再调用Hibernate的DAO,根据对象的状态(是新的还是修改过的)去执行save或update操作,最终把变化写回数据库,写完后,再返回一个成功或失败的JSON消息给前端,ExtJS收到后给用户一个提示。
所以整个流程就是一个闭环:前端展示和交互 -> Ajax请求 -> Struts2接收并转发 -> Spring协调 -> Hibernate处理数据 -> 数据库 -> 数据原路返回 -> ExtJS更新界面,这里面省心的地方在于,很多繁琐的转换(对象/关系映射、Java对象/JSON转换)都有框架帮你做了,你主要关心业务逻辑和界面配置就行,但麻烦的地方也在于,这几个框架凑在一起配置起来比较繁琐,需要你对每个框架的配置方式都有所了解,才能让它们顺畅地协同工作,尤其是ExtJS,它的语法和配置方式对于新手来说有一定的学习门槛,不过一旦搭好了,开发这类数据密集型的后台管理系统,效率还是会提升不少的。
(字数统计:约1300字)

本文由钊智敏于2026-01-01发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:http://waw.haoid.cn/wenda/72473.html
