Beehive应用开发

瓦房店历史解密网 2020-08-04 23:35:02

Workshop10.1是BEA公司新推出的JavaEE应用开发工具,提供了目前流行的开发技术和框架的可视化开发支持,包括Struts、Beehive、Hibernate、JSF、Beehive、JPA、Spring等,而且加入了AppXRay特性,它能够分析JSP页面、Java源代码、资源绑定和Web配置文件中可能存在的引用以及这种引用的正确性。本文是《全方位体验Workshop10.1》的第二部分,主要介绍如何利用Workshop10.1提供的特性快速的在Web应用中引入Beehive开源项目,并且完成一个数据库表的增删改查操作。

Beehive简介  Beehive是Apache提供的开源项目,Beehive中提供了一种MVC框架NETUI,同时提供了一种访问企业资源的简单框架:控件(Controls)。

1. NETUI

NETUI是基于 Struts 的一种 MVC 框架,使用 JSR-175 解决了 Struts 配置文件的自动更新,也使 Struts 开发更容易用 IDE 工具实现,同时提供了一些更易于使用的特性:

1.1 状态管理

一个 JPF 中的所有页面和处理动作都被看成是一个会话, JPF 中声明的变量在各个页面均可访问,包括 JavaBean。

[注] 当用户离开页面流时,会话状态中存储的数据将自动释放以便更有效地使用会话数据。所以多个 JPF 之间是不能共享会话数据的。

1.2 丰富的数据绑定功能

NETUI中提供了一组标签库来实现数据和 JSP 页面的显示标记之间的绑定,让显示界面编程更加容易。

1.3 集中的异常处理

可以在一个 JPF 中处理异常,也可以在 p跨越一组页面流处理异常信息。很显然,我们可以很容易为整个应用程序集中的进行异常处理,让程序更具灵活性 —— 比如常见的登录超时信息、权限信息等,传统的方式你应该在每个页面进行判断,现在你可以在入口处进行判断就可以了。

2. 控件(Controls)

创建轻量级 J2EE 组件的一种框架,您可以不用编写大量代码就完成以下常见工作:

2.1 用于创建访问资源如数据库、EJB、本地文件、 Web 服务等资源的组件。

2.2 用于封装企业可重用的业务逻辑等。

Workshop10.1中对Beehive的支持  Workshop10.1中对Beehive项目开发的支持非常优秀,除了Beehive中控件的开发目前还无法达到非常好的可视化支持之外,其他的部分如页面流中的Action、页面调转、数据在JSP和Action之间的传递、JSP页面设计等都能够提供非常好的可视化开发界面,而且得益于Workshop10.1中提供的AppXRay技术,我们可以轻松的了解、管理企业Web应用中所有的部件以及部件之间的关系。

案例说明  在本文中,我们使用Workshop10.1开发工具完成数据库表记录的增加、删除、修改、查询、分页显示动作。

数据库的操作将使用Beehive中的控件技术完成,页面显示使用Beehive中提供的netui标签库,页面导航和调转将使用Beehive中的页面流技术。

开发步骤  下面我们将详细的描述使用Workshop10.1开发工具开发Beehive应用的详细步骤:

创建支持Beehive的Web项目启动Workshop10.1工具,打开菜单FileàNew--Project…; 选择项目类型为Dynamic Web Project; 输入项目名称为BeehiveDemo   其他配置均使用默认配置,所以直接单击Finish按钮结束项目配置。

默认配置下该Web项目已经集成的框架包括:

Beehive Controls

Beehive NETUI

JSTL

Struts

XMLBeans

将BeehiveDemo项目发布到WebLogic Server上在Servers视图中WebLogic Server上单击鼠标右键,选择Add and Remove Projects…;

选中左边列表中的BeehiveDemo,单击Add 按钮;

单击Finish按钮。 启动WebLogic Server  通过Servers视图启动WebLogic Server,由于开发过程中需要调试代码,所以我们选择使用Debug方式启动Server。

开发POJO——DemoUser  在面向对象的开发中,开发者选择使用POJO来映射数据库中的表,我们同样使用DemoUser这个Java类来映射案例中的数据库表,DemoUser包括5个属性,他们分别对应数据库表的一个字段:

package ans;

public class DemoUser implements rializable {

private Integer uid; // 对应“demo_user”表的编号字段

private String uname; // 对应“demo_user”表的名称字段

private String upassword; // 对应“demo_user”表的密码字段

private String uaddress; // 对应“demo_user”表的地址字段

private String utelephone; // 对应“demo_user”表的字段

… // 属性对应的getter和setter方法

}

开发访问数据库的控件  默认情况下,Beehive的控件不要放在默认包下面,更好的方式是为Beehive控件创建自己的Java包,我们可用下面的步骤在BeehiveDemo项目中创建新的Java包”ntrols”

在Project Exporer视图中,展开BeehiveDemo项目的Java Sourcesàsrc节点,在该节点上单击鼠标右键,选择NewàPackage

在Java 包信息设置框中填入如下信息:

单击Finish创建新的Java包。   然后我们通过下面的步骤创建访问MySQL数据库中“demo_user”表的Beehive控件:

在新创建的Java包ntrols对应的节点上单击鼠标右键,选择NewàJDBC Control

输入控件名: UserControl;

单击Next,单击Data Source后面的Browse..按钮,选择jndi/mysql。

单击Finish,完成访问MySQL库中demo_user表的控件的基本配置 在打开的控件源代码视图中加入如下内容:   // 完成记录的插入

@L(statement = "INSERT INTO DEMO_USER(UNAME,UPASSWORD,UADDRESS,UTELEPHONE)

VALUES({ame},{assword},{ddress},{elephone})")

public void persistDemoUser(DemoUser user);  // 完成记录的更新

@L(statement = "UPDATE DEMO_USER SET UNAME={ame},UPASSWORD={assword},

UADDRESS={ddress},UTELEPHONE={elephone} WHERE UID = {d}")

public void mergeDemoUser(DemoUser user);

// 完成记录的删除

@L(statement = "DELETE FROM DEMO_USER WHERE UID = {uid}")

public void removeDemoUser(Integer uid);  // 根据编号查找合适的一条记录

@L(statement = "SELECT * FROM DEMO_USER WHERE UID = {uid}")

public DemoUser findDemoUserById(Integer uid);  // 根据名称模糊查找符合条件的多条记录

@L(statement = "SELECT * FROM DEMO_USER WHERE UNAME LIKE {uname}")

public DemoUser[] findDemoUserByName(String uname);

至此,我们就完成了访问数据库的Beehive控件的开发,关于控件开发的更多内容,请参考Beehive项目的帮助文档。

准备Web项目所需的JSP空页面  在Project Explorer视图中,展开Beehive项目的WebContent节点,通过右键菜单连续的创建5个JSP文件,不需要填充JSP文件的内容,我们将在稍后的环节介绍如何填充这些JSP文件的内容:

录入新用户信息的JSP页面: p 输入查询条件的JSP页面:p 查询结果显示JSP页面:p 修改用户信息的JSP页面:p 操作成功的提示JSP页面:p

开发页面流切换到Page Flow透视图打开va   在Project Explorer视图中,展开Beehive项目的Java Sourcesàsrcàdefault package,在va节点上双击

切换到PageFlow透视图   单击工具右上角的图标,切换到Page Flow透视图。

如果该图标不存在,可以单击右上角的,然后选择Other…,

在弹出框中选择:

可视化的开发页面流Actions准备保存用户信息的Action   在Page Flow Explorer视图中,在展开rootàactions节点,在该节点上单击右键,选择New Action…

在弹出的配置框中,选择或者输入如下信息:

单击Finish按钮。

准备查找用户信息的Action,查找出来的信息将显示出来供用户修改   重复上面的动作,只是在Action配置页上选择或者输入如下信息:

准备保存被修改用户信息的Action   重复上面的动作,只是在Action配置页上选择或者输入如下信息:

准备删除用户信息的Action   重复上面的动作,只是在Action配置页上选择或者输入如下信息:

准备模糊查找用户信息的Action   重复上面的动作,只是在Action配置页上选择或者输入如下信息:

经过上述步骤后生成的va全部内容

1、import tpSession;2、import geFlowController;3、import f;4、import ntrol;5、import erControl;6、import rward;7、import peUtils;8、@ntroller(simpleActions = { @mpleAction(name = "begin", path = "p") })9、public class Controller extends PageFlowController {10、private static final long serialVersionUID = 1L;11、@Control12、private UserControl userControl;13、@tion(forwards = { @rward(name = "success", path = "p") })14、public Forward persistDemoUser(rsistDemoUserFormBean form) {15、Forward forward = new Forward("success");16、moUser user = tUser();17、rsistDemoUser(user);18、return forward;19、}20、@tion(forwards = { @rward(name = "success", path =

"p") })21、public Forward findDemoUserById() {22、Forward forward = new Forward("success");23、String param1 = getRequest().getParameter("uid");24、eger uid = nvertToIntegerObject(param1);25、moUser

findDemoUserByIdResult = userControl26、.findDemoUserById(uid);27、FindDemoUserByIdFormBean outputForm = new FindDemoUserByIdFormBean();28、tDemoUser(findDemoUserByIdResult);29、dOutputForm(outputForm);30、return forward;31、}32、@tion(forwards = { @rward(name = "success", path = "p") })33、public Forward mergeDemoUser(ndDemoUserByIdFormBean form) {34、Forward forward = new Forward("success");35、moUser user = tDemoUser();36、rgeDemoUser(user);37、return forward;38、}39、@tion(forwards = { @rward(name = "success", path = "p") })40、public Forward removeDemoUser() {41、Forward forward = new Forward("success");42、String param1 = getRequest().getParameter("uid");43、eger uid = nvertToIntegerObject(param1);44、moveDemoUser(uid);45、return forward;46、}47、@tion(forwards = { @rward(name = "success", path =

"p", actionOutputs = { @tionOutput(name =

"findDemoUserByNameResult", type =

moUser[].class) }) })48、public Forward findDemoUserByName(rsistDemoUserFormBean form) {49、Forward forward = new Forward("success");

50、ring uname = "%" + tUser().getUname() + "%";51、moUser[]

findDemoUserByNameResult = userControl52、.findDemoUserByName(uname);53、dActionOutput("findDemoUserByNameResult",54、findDemoUserByNameResult);55、return forward;56、}57、@tion(forwards = { @rward(name = "success", path =

"p", actionOutputs = { @tionOutput(name =

"findDemoUserByNameResult",type=

moUser[].class) }) })58、public Forward findDemoUserByName1(FindDemoUserByName1FormBean

form) {59、Forward forward = new Forward("success");60、ring uname = tUname();61、moUser[] findDemoUserByNameResult = userControl62、.findDemoUserByName(uname);63、dActionOutput("findDemoUserByNameResult",64、findDemoUserByNameResult);65、return forward;66、}67、/**68、 * Callback that is invoked when this controller instance is

created.69、 */70、@Override71、protected void onCreate() {72、}73、/**74、 * Callback that is invoked when this controller instance is

destroyed.75、 */76、@Override77、protected void onDestroy(HttpSession session) {78、}79、@rmBean80、public static class PersistDemoUserFormBean implements

rializable {81、private static final long serialVersionUID = 1L;82、private moUser user;83、public PersistDemoUserFormBean() {84、user = new moUser();85、}86、public moUser

getUser() {87、return user;88、}89、public void setUser(moUser user) {90、er = user;91、}92、}93、@rmBean94、public static class FindDemoUserByIdFormBean implements95、rializable {96、private static final long serialVersionUID = 1L;97、private moUser demoUser;98、public FindDemoUserByIdFormBean() {99、demoUser = new moUser();100、}101、public moUser getDemoUser() {102、return demoUser;103、}104、public void setDemoUser(105、moUser demoUser) {106、moUser = demoUser;107、}108、}109、@rmBean110、public static class FindDemoUserByName1FormBean implements

rializable {111、private static final long serialVersionUID = 1L;112、private ring uname;113、public FindDemoUserByName1FormBean() {114、}115、public ring getUname() {116、return uname;117、}118、public void setUname(ring uname) {119、ame = uname;120、}121、}122、}

可视化的开发JSP页面  在前面的步骤中我们仅仅准备了空的JSP页面,现在我们开始为这些JSP页面填充内容,Workshop10.1中提供了可视化的方式来开发这些JSP页面,开发者只需要跟着向导一步一步填写必要的配置信息即可,在必要的时候,还可以根据实际需要,对生成的JSP文件内容进行调整。

在进行下面的步骤之前,请将工作台切换到J2EE透视图。

填充录入新用户信息的JSP页面: p

p中需要给用户显示Form,以便用户可以输入用户的信息,在Beehive中,我们使用NETUI标签库中的Form标签显示Form,下面是Workshop10.1中可视化向JSP中填充Form标签的步骤:

用Workshop JSP Editor器打开p,在Workshpop Palette视图中展开NETUI,选择其中的Form项。

用鼠标将该图标拖拽到p器的设计区,然后松开鼠标,在弹出的对话框中的Action后面的下拉框中选择persistDemoUser;

单击Next,在弹出的属性选择框中不选择uid节点[因为ID是数据库自动生成的,不需要用户录入];

单击Next按钮,在弹出的属性顺序排列界面中根据需要调整属性显示的先后顺序。

单击Finish按钮结束Form的设置,可以看到p的设计区出现如下内容。

对应的,p的源代码区中也增加了相应的NETUI标签和相关内容。

填充输入查询条件的JSP页面:p   p中显示用户输入查询条件的Form,因此和上面的步骤基本一致。

打开p页面,重复上面的动作,只是Form中使用的Action变成了findDemoUserByName。

填充修改用户信息的JSP页面:p   和上面的步骤基本一致,将Form图标拖到p的设计区,将Form的Action设置为mergeDemoUser。

其他都使用默认配置即可。

填充查询结果显示JSP页面:p   在Beehive中,可以简单的分页显示数据的标签是netui-data:datagrid,在演示案例中,我们就选择netui-data:datagrid分页显示从数据库中查询出来的用户信息,下面是Workshop10.1中可视化向JSP中插入netui-data:datagrid标签的步骤:

用Workshop JSP Editor器打开p,在Workshop Palette中展开NETUI DataBinding,选择其中的DataGrid,拖动到p的设计区,

在弹出的DataGrid设置框General标签上,单击DataSource后面的Browse…按钮,在弹出窗口中选择Page Variablesà

单击OK关闭选择框,单击Columns标签页,使用上面的按钮调整显示的列和列的顺序;

单击Pager标签页,设置分页显示的相关信息;

单击OK关闭DataGrid设置界面,在p的设计区将出现下面的内容:

填充操作成功的提示JSP页面:p   p可以显示每一步操作的结果信息,这里我们简单的在里面填充”操作成功”的中文信息即可。

测试  现在我们可以测试基于Beehive开发的数据库表的增加、删除、修改、查询、分页显示的Web应用了,打开浏览器,输入http://localhost:7001/BeehiveDemo/p可以访问用户增加的界面,输入http://localhost:7001/BeehiveDemo/p可以访问用户查询、分页显示界面。

下面是应用中主要界面的截图,根据实际应用的要求,在JSP里面做了部分的修改,请参考随本文提供的源代码。

查询界面截图 用户信息修改界面 用户信息增加界面 总结  从本文中可以看到,Workshop10.1中为开源框架Beehive的可视化开发提供了非常好的支持,开发者除了Beehive控件部分需要编写部分Java代码之外,其他的大部分Java代码和JSP界面的源代码根本不需要自己动手编写,只需要根据Workshop10.1提供的可视化向导填写相应的配置信息即可,大大的提高了开发效率和源代码的质量。

焦作治疗白斑病费用
宝宝拉肚子看什么科
衡阳白癜风
友情链接