CZTZ-JavaEE开源应用开发平台介绍之二(Webwork+spring+hbernate+acegi)

CZTZ-JavaEE开源应用开发平台介绍(2)

第二部分 平台开发示例(上)

王保政

QQ:29803446

Msn:baozhengw999@hotmail.com

本文介绍如何利用应用开发平台实现一个后台增删改查的应用。以B<chmetcnv w:st="on" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="2" unitname="C">2C</chmetcnv>网站的个人用户帐号为例。

企业应用的用户有B2B类用户(如企业内网用户),也有B<chmetcnv w:st="on" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="2" unitname="C">2C</chmetcnv>类用户,即通过公司的外网门户注册的个人帐号,例如公司的网上商城注册会员。

本例的个人用户帐号表为eas_b2cuser,主要数据库字段有:

obj_id varchar(40) 唯一ID字段(隐藏字段,不需要用户输入数据,系统自动生成ID)

user_id varchar(30) 登录帐号

user_name varchar(30) 用户名称

is_enabled int 是否可用,0表示不可用1表示可用

user_type varchar(16) 标识是个人注册用户还是企业注册用户,可从数据字典取编码

sys_code varchar(16) 此用户隶属的应用系统,应用系统编码也从数据字典获取.

下面是其他隐含字段:

row_id varchar(40) 唯一行号

sort_no int 记录排序号

create_dt varchar(23) 创建时间

create_uid varchar(40) 创建人帐号

update_dt varchar(23) 最后修改时间

update_uid 最后修改人帐号

在数据库表设计好以后,按下面的具体步骤操作:

一、 通过MyEclipse工具将指定的数据库生成对应的POJO类和hbm文件,此表对应的hbm文件和POJO类已经生成,分别是org\apache\easframework\core\entity\ EasB2cuser.hbm.xml和同目录下的EasB2cuser.java文件,可在WEB-INF\lib\ eas-core.jar中找到这两个文件,由于本平台已经生成了这两个文件,所以可进行下一步。

二、 这一步需要在配置文件中配置hbm.xml文件,见WEB-INF\classes目录下的datasource.xml,,这里配置了大量的hbm.xml文件:

<property name="mappingResources">

<list>

<value>org/apache/easframework/core/entity/EasB2cuser.hbm.xml</value>

</list>

</property>

由于这一步也已经配置好了,所以大家可直接看下一步。

三、 在实体容器类org.apache.easframework.core.entity.EntityContainer中声明EasB2cUser类变量(此容器也主要是为了webwork的前台页面的实体变量在BaseAction中能自动找到对应的实体类,以便BaseAction能自动将不同的实体类的值插入到相应的数据库表),EntityContainer.java中增加的代码如下:

private EasB2cuser easB2cuser;

public void setEasB2cuser(EasB2cuser entity)

{

this.easB2cuser = entity;

}

public EasB2cuser getEasB2cuser()

{

return this.easB2cuser;

}

本平台已增加了上述代码。在实际开发中,以上的步骤作完后要用ant运行一次编译部署脚本。在本示例中上述步骤已经完成,大家可从下一步骤开始正式自己动手来实现一个增删改查功能(带翻页的,不用写一行翻页代码,很酷的哦),由于本文书写的时候模板生成器还没做完,等做完后,下面的步骤基本都省略了,用户只需要通过配置工具来生成功能页面,可以自己定义列表页面要显示的数据项,自己定义查询列和排序列,等等。看下一步骤。

四、 配置xwork.xml:

WEB-INF\classes目录下有一个xwork.xml文件,打开此文件,找到下面一段代码:

<action name="listEasMetaColumn" class="org.apache.easframework.core.webwork.action.BaseAction">

<result name="input">/module/platform/editEasMetaColumn.jsp</result>

<result name="success">/module/platform/listEasMetaColumn.jsp</result>

<result name="select">/listEasMetaColumn.action?operate=selectPageList</result>

<result name="edit">/module/platform/editEasMetaColumn.jsp</result>

<result name="showList">/module/platform/listEasMetaColumn.jsp</result>

<param name="serviceName">DBSupportService</param>

<param name="keyFieldName">objId</param>

<param name="entityClassName">org.apache.easframework.core.entity.EasMetaColumn</param>

<param name="codeColumns"></param>

<param name="sortColumns"></param>

</action>

上面的配置是一个维护表字段信息的功能。可在此段代码下复制上面的代码,更改相应的配置。这里要注意一下命名规则,name="listEasMetaColumn"是一个action的名字,在页面上可以通过http://host:port/myapp/listEasMetaColumn.action的格式访问,list是动作,后面的是实体类名,jsp文件的命名也是动作名+实体类名,例如列表页面为listXXX.jsp,编辑页面是editXXX.jsp,本例要配置的是EasB2user的功能,对应的表是eas_b2cuser,所以列表页面的命名为listEasB2cuser.jsp,编辑页面的命名为editEasB2cuser.jsp

DBSupportService是一个通用的封装了增删改差的基础业务逻辑类,当然实际开发可以从此类继承,一般没有特殊处理时,用此类作为增删改查的业务逻辑类即可。

keyFieldName是主键字段的类名,例如eas_b2cuser表的主键为obj_id,对应Easb2cuser类的objId字段,注意表和字段对应的类和类属性的命名规则,表字段下划线后的第一字母改为大写,去掉下划线,就是对应的类的属性名。

<param name="entityClassName">配置了此action对应的实体类名,现在我们要配置Easb2cuser的维护功能,自然此参数的值就是org.apache.easframework.core.entity.EasB2cuser;

codeColumns参数指定列表页面哪些字段需要显示代码对应的文字,例如列表页上要显示应用系统名称,而不是编码,所以此字段要配置为sysCode(sysCodeEasB2cuser类的一个属性),此参数可以逗号做间隔符配置多个字段。

sortColumns参数指定列表页面指定的排序顺序字段,例如userName asc,sysCode desc,指定排序规则后,页面打开时自动按此顺序排序,当然用户可通过点列标题来自己指定新的排序列(标题列中点一次按此列升序排列,再点一次按降序排列)。

下面是配置好的内容:

<action name="listEasB2cuser" class="org.apache.easframework.core.webwork.action.BaseAction">

<result name="input">/module/platform/editEasB2cuser.jsp</result>

<result name="success">/module/platform/listEasB2cuser.jsp</result>

<result name="select">/listEasB2cuser.action?operate=selectPageList</result>

<result name="edit">/module/platform/editEasB2cuser.jsp</result>

<result name="showList">/module/platform/listEasB2cuser.jsp</result>

<param name="serviceName">DBSupportService</param>

<param name="keyFieldName">objId</param>

<param name="entityClassName">org.apache.easframework.core.entity. EasB2cuser</param>

<param name="codeColumns">sysCode,userType</param>

<param name="sortColumns">sysCode asc,userName asc</param>

</action>

五、 在功能列表中添加一个连接:

打开module目录下的left_plat.jsp,随便找一个节点,添加对应的连接,,例如:

['B<chmetcnv w:st="on" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="2" unitname="C">2C</chmetcnv>用户帐号维护','<%=request.getContextPath()%>/listEasB2cuser.action?operate=selectPageList']

六、 列表页面:

可从已有的列表页面复制一个文件,例如在module\platform目录下复制listEasMetaColumn.jsp,更名为listEasB2cuser.jsp,将此页面的所有EasMetaColumn替换为EasB2cuser,jsp中有(new String[]{"开发平台","基础数据管理","表字段信息维护"}),是生成功能导航文字的,可将文字部分改为"开发平台","权限管理","B<chmetcnv w:st="on" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="2" unitname="C">2C</chmetcnv>帐号维护"(导航文字以后也可以定义为一个参数在xwork.xml中配置).

下面需要设置列表页需要显示的字段列表,将文件中:

<td nowrap class="result_head_dock" width="21%"><a href="javascript:customSort('tableName');">表名</a></td>

<td nowrap class="result_head_dock" width="20%"><a href="javascript:customSort('columnName');">字段名</a></td>

<td nowrap class="result_head_dock" width="20%"><a href="javascript:customSort('columnCnName');">字段中文名</a></td>

<td nowrap class="result_head_dock" width="20%"><a href="javascript:customSort('classFieldName');">类属性名</a></td>

部分去掉,改为:

<td nowrap class="result_head_dock" width="9%">序号</td>

<td nowrap class="result_head_dock" width="21%"><a href="javascript:customSort('userId');">登录帐号</a></td>

<td nowrap class="result_head_dock" width="20%"><a href="javascript:customSort('userName');">用户名称</a></td>

<td nowrap class="result_head_dock" width="20%"><a href="javascript:customSort('userType');">用户类型</a></td>

<td nowrap class="result_head_dock" width="20%"><a href="javascript:customSort('sysCode');">所属系统</a></td>

其中userId,username,userType,sysCodeEasB2cuser类的属性。下面

<td align="center" width="21%"><ww:property value="tableName"/></td>

<td align="center" width="20%"><ww:property value="columnName"/></td>

<td align="center" width="20%"><ww:property value="columnCnName"/> </td>

<td align="center" width="20%"><ww:property value="classFieldName"/> </td>

替换为:

<td align="center" width="21%"><ww:property value="userId"/></td>

<td align="center" width="20%"><ww:property value="userName"/></td>

<td align="center" width="20%"><ww:property value="userType"/> </td>

<td align="center" width="20%"><ww:property value="sysCode"/> </td>

到这一步,点击功能连接中的B<chmetcnv w:st="on" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="2" unitname="C">2C</chmetcnv>用户帐号维护:

即可以看到一个没有数据的功能页面,由于现在eas_b2cuser表还没有数据,编辑页面还没有实现,我们可以直接在数据中插入两三条数据(注意row_id这个非主键列要唯一值),先看看这个列表页面的效果,大家可以看到,通过上述步骤,没有写java代码,但是排序、查询,翻页已经实现了(翻页需要多录入几条数据能看到效果)。大家点点列表标题连接,可以看到现在可以按照升序或降序来排列被点击的字段。不过目前我们看到两个问题:一是查询条件列的下拉列表为空,二是列表页的用户类型和所属系统两个字段为编码,应该显示名称,下面讲述如何在查询条件框中添加查询条件列和将编码(编码字段已在xwork.xml中定义了,为sysCode,userType)显示为名称。

首先我们为网站用户类型数据字典(WEBUSER_TYPE)和应用系统数据字典(SYSTEM_CODE)增加数据字典项:

网站用户类型数据字典增加USER,个人用户 COM单位用户

应用系统数据字典增加B<chmetcnv w:st="on" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="2" unitname="C">2C</chmetcnv>电子商务BLOG博客HR人力资源网

以上数据字典和数据字典类型平台中已配置好。下面使用表字段基本信息维护功能增加eas_b2cuser表的几个字段的设置,增加内容(平台中已将这几个字段配置好,不用再配置了,这里为了说明操作步骤):

保存后再进入B<chmetcnv w:st="on" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="2" unitname="C">2C</chmetcnv>用户帐号维护中可看到查询条件下拉中已有了用户ID字段.

然后添加用户名称的配置

user_type字段配置(此字段值从数据字典取,在上文已配置好对应的数据字典编码)

sys_code配置:

这时候再回到B<chmetcnv w:st="on" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="2" unitname="C">2C</chmetcnv>用户帐号维护,查询条件下拉框中已有了查询条件列,选择用户名和登录帐号时,右侧显示输入框可输入查询文字,当选择网站用户类型,右侧显示网站用户的下拉数据字典项,选择所属系统时,右侧显示应用系统的下拉列表。这是切换查询列,并选择或输入查询内容,然后点查询按钮,我们会发现,查询功能已经实现了!仍然是-没有Coding!查询功能已经实现了!!!

列表页面还有什么变化?看用户类型和所属系统字段,原来是显示的编码,现在已经显示文字了,见下图:

(由于本文篇幅较长,编辑页面的实现在下篇文档中继续。)

基于数据驱动的 Koopman 算子的递归神经网络模型线性化,用于纳米定位系统的预测控制研究(Matlab代码实现)内容概要:本文围绕“基于数据驱动的 Koopman 算子的递归神经网络模型线性化,用于纳米定位系统的预测控制研究”展开,提出了一种结合数据驱动方法与Koopman算子理论的递归神经网络(RNN)模型线性化方法,旨在提升纳米定位系统的预测控制精度与动态响应能力。研究通过构建数据驱动的线性化模型,克服了传统非线性系统建模复杂、计算开销大的问题,并在Matlab平台上实现了完整的算法仿真与验证,展示了该方法在高精度定位控制中的有效性与实用性。; 适合人群:具备一定自动化、控制理论或机器学习背景的科研人员与工程技术人员,尤其是从事精密定位、智能控制、非线性系统建模与预测控制相关领域的研究生与研究人员。; 使用场景及目标:①应用于纳米级精密定位系统(如原子力显微镜、半导体制造设备)中的高性能预测控制;②为复杂非线性系统的数据驱动建模与线性化提供新思路;③结合深度学习与经典控制理论,推动智能控制算法的实际落地。; 阅读建议:建议读者结合Matlab代码实现部分,深入理解Koopman算子与RNN结合的建模范式,重点关注数据预处理、模型训练与控制系统集成等关键环节,并可通过替换实际系统数据进行迁移验证,以掌握该方法的核心思想与工程应用技巧。
基于粒子群算法优化Kmeans聚类的居民用电行为分析研究(Matlb代码实现)内容概要:本文围绕基于粒子群算法(PSO)优化Kmeans聚类的居民用电行为分析展开研究,提出了一种结合智能优化算法与传统聚类方法的技术路径。通过使用粒子群算法优化Kmeans聚类的初始聚类中心,有效克服了传统Kmeans算法易陷入局部最优、对初始值敏感的问题,提升了聚类的稳定性和准确性。研究利用Matlab实现了该算法,并应用于居民用电数据的行为模式识别与分类,有助于精细化电力需求管理、用户画像构建及个性化用电服务设计。文档还提及相关应用场景如负荷预测、电力系统优化等,并提供了配套代码资源。; 适合人群:具备一定Matlab编程基础,从事电力系统、智能优化算法、数据分析等相关领域的研究人员或工程技术人员,尤其适合研究生及科研人员。; 使用场景及目标:①用于居民用电行为的高效聚类分析,挖掘典型用电模式;②提升Kmeans聚类算法的性能,避免局部最优问题;③为电力公司开展需求响应、负荷预测和用户分群管理提供技术支持;④作为智能优化算法与机器学习结合应用的教学与科研案例。; 阅读建议:建议读者结合提供的Matlab代码进行实践操作,深入理解PSO优化Kmeans的核心机制,关注参数设置对聚类效果的影响,并尝试将其应用于其他相似的数据聚类问题中,以加深理解和拓展应用能力。
在大数据技术快速发展的背景下,网络爬虫已成为信息收集与数据分析的关键工具。Python凭借其语法简洁和功能丰富的优势,被广泛用于开发各类数据采集程序。本项研究“基于Python的企查查企业信息全面采集系统”即在此趋势下设计,旨在通过编写自动化脚本,实现对企查查平台所公示的企业信用数据的系统化抓取。 该系统的核心任务是构建一个高效、可靠且易于扩展的网络爬虫,能够模拟用户登录企查查网站,并依据预设规则定向获取企业信息。为实现此目标,需重点解决以下技术环节:首先,必须深入解析目标网站的数据组织与呈现方式,包括其URL生成规则、页面HTML架构以及可能采用的JavaScript动态渲染技术。准确掌握这些结构特征是制定有效采集策略、保障数据完整与准确的前提。 其次,针对网站可能设置的反爬虫机制,需部署相应的应对方案。例如,通过配置模拟真实浏览器的请求头部信息、采用多代理IP轮换策略、合理设置访问时间间隔等方式降低被拦截风险。同时,可能需要借助动态解析技术处理由JavaScript加载的数据内容。 在程序开发层面,将充分利用Python生态中的多种工具库:如使用requests库发送网络请求,借助BeautifulSoup或lxml解析网页文档,通过selenium模拟浏览器交互行为,并可基于Scrapy框架构建更复杂的爬虫系统。此外,json库用于处理JSON格式数据,pandas库则协助后续的数据整理与分析工作。 考虑到采集的数据规模可能较大,需设计合适的数据存储方案,例如选用MySQL或MongoDB等数据库进行持久化保存。同时,必须对数据进行清洗、去重与结构化处理,以确保其质量满足后续应用需求。 本系统还需包含运行监控与维护机制。爬虫执行过程中可能遭遇网站结构变更、数据格式调整等意外情况,需建立及时检测与自适应调整的能力。通过定期分析运行日志,评估程序的效率与稳定性,并持续优化其性能表现。 综上所述,本项目不仅涉及核心爬虫代码的编写,还需在反爬应对、数据存储及系统维护等方面进行周密设计。通过完整采集企查查的企业数据,该系统可为市场调研、信用评价等应用领域提供大量高价值的信息支持。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值