科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道Beehive应用开发

Beehive应用开发

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

在Workshop10.1是BEA公司新推出的JavaEE应用开发工具,提供了目前流行的开发技术和框架的可视化开发支持,包括Struts、Beehive、Hibernate、JSF、Beehive、JPA、Spring等

来源:dev2dev 2007年10月14日

关键字: 技术 java Apache 中间件

  • 评论
  • 分享微博
  • 分享邮件

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

  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项目

  1. 启动Workshop10.1工具,打开菜单FileàNew-->>Project…; Beehive应用开发
  2. 选择项目类型为Dynamic Web Project; Beehive应用开发
  3. 输入项目名称为BeehiveDemo Beehive应用开发

      其他配置均使用默认配置,所以直接单击Finish按钮结束项目配置。

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

      Beehive Controls

      Beehive NETUI

      JSTL

      Struts

      XMLBeans

将BeehiveDemo项目发布到WebLogic Server上

  1. 在Servers视图中WebLogic Server上单击鼠标右键,选择Add and Remove Projects…;
    Beehive应用开发
  2. 选中左边列表中的BeehiveDemo,单击Add > 按钮;
    Beehive应用开发
  3. 单击Finish按钮。

启动WebLogic Server

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

Beehive应用开发

开发POJO——DemoUser

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

  package  com.levainservice.demo.beehive.beans;
  public class DemoUser implements java.io.Serializable {
  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包”com.levainservice.demo.beehive.controls”

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

      Beehive应用开发

  2. 在Java 包信息设置框中填入如下信息:
    Beehive应用开发
  3. 单击Finish创建新的Java包。

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

    • 在新创建的Java包com.levainservice.demo.beehive.controls对应的节点上单击鼠标右键,选择NewàJDBC Control

      Beehive应用开发
    • 输入控件名: UserControl;
      Beehive应用开发
    • 单击Next,单击Data Source后面的Browse..按钮,选择jndi/mysql。
      Beehive应用开发
    • 单击Finish,完成访问MySQL库中demo_user表的控件的基本配置
    • 在打开的控件源代码视图中加入如下内容:

  // 完成记录的插入
  @JdbcControl.SQL(statement = "INSERT INTO DEMO_USER(UNAME,UPASSWORD,UADDRESS,UTELEPHONE)
VALUES({user.uname},{user.upassword},{user.uaddress},{user.utelephone})")
  public void persistDemoUser(DemoUser user);   // 完成记录的更新
  @JdbcControl.SQL(statement = "UPDATE DEMO_USER SET UNAME={user.uname},UPASSWORD={user.upassword},
UADDRESS={user.uaddress},UTELEPHONE={user.utelephone} WHERE UID = {user.uid}")
  public void mergeDemoUser(DemoUser user);
  // 完成记录的删除
  @JdbcControl.SQL(statement = "DELETE FROM DEMO_USER WHERE UID = {uid}")
  public void removeDemoUser(Integer uid);   // 根据编号查找合适的一条记录
  @JdbcControl.SQL(statement = "SELECT * FROM DEMO_USER WHERE UID = {uid}")
  public DemoUser findDemoUserById(Integer uid);   // 根据名称模糊查找符合条件的多条记录
  @JdbcControl.SQL(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页面: userInsertInput.jsp
  • 输入查询条件的JSP页面:userQueryInput.jsp
  • 查询结果显示JSP页面:userQueryResult.jsp
  • 修改用户信息的JSP页面:userUpdateInput.jsp
  • 操作成功的提示JSP页面:ok.jsp

Beehive应用开发

开发页面流

切换到Page Flow透视图

  1. 打开Controller.java

      在Project Explorer视图中,展开Beehive项目的Java Sourcesàsrcàdefault package,在Controller.java节点上双击

    Beehive应用开发
  2. 切换到PageFlow透视图

  单击工具右上角的Beehive应用开发图标,切换到Page Flow透视图。

Beehive应用开发

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

Beehive应用开发

  在弹出框中选择:

Beehive应用开发

可视化的开发页面流Actions

  1. 准备保存用户信息的Action

      在Page Flow Explorer视图中,在展开rootàactions节点,在该节点上单击右键,选择New Action…

    Beehive应用开发

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

    Beehive应用开发

      单击Finish按钮。

  2. 准备查找用户信息的Action,查找出来的信息将显示出来供用户修改

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

    Beehive应用开发
  3. 准备保存被修改用户信息的Action

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

    Beehive应用开发
  4. 准备删除用户信息的Action

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

    Beehive应用开发
  5. 准备模糊查找用户信息的Action

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

Beehive应用开发

  经过上述步骤后生成的Controller.java全部内容

 
1、	import javax.servlet.http.HttpSession;
2、	import org.apache.beehive.netui.pageflow.PageFlowController;
3、	import org.apache.beehive.netui.pageflow.annotations.Jpf;
4、	import org.apache.beehive.controls.api.bean.Control;
5、	import com.levainservice.demo.beehive.controls.UserControl;
6、	import org.apache.beehive.netui.pageflow.Forward;
7、	import org.apache.beehive.netui.util.type.TypeUtils;
8、	@Jpf.Controller(simpleActions = { @Jpf.SimpleAction(name = "begin", path = "index.jsp") })
9、	public class Controller extends PageFlowController {
10、		private static final long serialVersionUID = 1L;
11、		@Control
12、		private UserControl userControl;
13、		@Jpf.Action(forwards = { @Jpf.Forward(name = "success", path = "ok.jsp") })
14、		public Forward persistDemoUser(Controller.PersistDemoUserFormBean form) {
15、			Forward forward = new Forward("success");
16、			com.levainservice.demo.beehive.beans.DemoUser user = form.getUser();
17、			userControl.persistDemoUser(user);
18、			return forward;
19、		}
20、	@Jpf.Action(forwards = { @Jpf.Forward(name = "success", path =
"userUpdateInput.jsp") }) 21、 public Forward findDemoUserById() { 22、 Forward forward = new Forward("success"); 23、 String param1 = getRequest().getParameter("uid"); 24、 java.lang.Integer uid = TypeUtils.convertToIntegerObject(param1); 25、 com.levainservice.demo.beehive.beans.DemoUser
findDemoUserByIdResult = userControl 26、 .findDemoUserById(uid); 27、 FindDemoUserByIdFormBean outputForm = new FindDemoUserByIdFormBean(); 28、 outputForm.setDemoUser(findDemoUserByIdResult); 29、 forward.addOutputForm(outputForm); 30、 return forward; 31、 } 32、 @Jpf.Action(forwards = { @Jpf.Forward(name = "success", path = "ok.jsp") }) 33、 public Forward mergeDemoUser(Controller.FindDemoUserByIdFormBean form) { 34、 Forward forward = new Forward("success"); 35、 com.levainservice.demo.beehive.beans.DemoUser user = form.getDemoUser(); 36、 userControl.mergeDemoUser(user); 37、 return forward; 38、 } 39、 @Jpf.Action(forwards = { @Jpf.Forward(name = "success", path = "ok.jsp") }) 40、 public Forward removeDemoUser() { 41、 Forward forward = new Forward("success"); 42、 String param1 = getRequest().getParameter("uid"); 43、 java.lang.Integer uid = TypeUtils.convertToIntegerObject(param1); 44、 userControl.removeDemoUser(uid); 45、 return forward; 46、 } 47、 @Jpf.Action(forwards = { @Jpf.Forward(name = "success", path =
"userQueryResult.jsp", actionOutputs = { @Jpf.ActionOutput(name =
"findDemoUserByNameResult", type =
com.levainservice.demo.beehive.beans.DemoUser[].class) }) }) 48、 public Forward findDemoUserByName(Controller.PersistDemoUserFormBean form) { 49、 Forward forward = new Forward("success");
50、 java.lang.String uname = "%" + form.getUser().getUname() + "%"; 51、 com.levainservice.demo.beehive.beans.DemoUser[]
findDemoUserByNameResult = userControl 52、 .findDemoUserByName(uname); 53、 forward.addActionOutput("findDemoUserByNameResult", 54、 findDemoUserByNameResult); 55、 return forward; 56、 } 57、 @Jpf.Action(forwards = { @Jpf.Forward(name = "success", path =
"userQueryResult.jsp", actionOutputs = { @Jpf.ActionOutput(name =
"findDemoUserByNameResult",type=
com.levainservice.demo.beehive.beans.DemoUser[].class) }) }) 58、 public Forward findDemoUserByName1(FindDemoUserByName1FormBean
form) { 59、 Forward forward = new Forward("success"); 60、 java.lang.String uname = form.getUname(); 61、 com.levainservice.demo.beehive.beans.DemoUser[] findDemoUserByNameResult = userControl 62、 .findDemoUserByName(uname); 63、 forward.addActionOutput("findDemoUserByNameResult", 64、 findDemoUserByNameResult); 65、 return forward; 66、 } 67、 /** 68、 * Callback that is invoked when this controller instance is
created. 69、 */ 70、 @Override 71、 protected void onCreate() { 72、 } 73、 /** 74、 * Callback that is invoked when this controller instance is
destroyed. 75、 */ 76、 @Override 77、 protected void onDestroy(HttpSession session) { 78、 } 79、 @Jpf.FormBean 80、 public static class PersistDemoUserFormBean implements
java.io.Serializable { 81、 private static final long serialVersionUID = 1L; 82、 private com.levainservice.demo.beehive.beans.DemoUser user; 83、 public PersistDemoUserFormBean() { 84、 user = new com.levainservice.demo.beehive.beans.DemoUser(); 85、 } 86、 public com.levainservice.demo.beehive.beans.DemoUser
getUser() { 87、 return user; 88、 } 89、 public void setUser(com.levainservice.demo.beehive.beans.DemoUser user) { 90、 this.user = user; 91、 } 92、 } 93、 @Jpf.FormBean 94、 public static class FindDemoUserByIdFormBean implements 95、 java.io.Serializable { 96、 private static final long serialVersionUID = 1L; 97、 private com.levainservice.demo.beehive.beans.DemoUser demoUser; 98、 public FindDemoUserByIdFormBean() { 99、 demoUser = new com.levainservice.demo.beehive.beans.DemoUser(); 100、 } 101、 public com.levainservice.demo.beehive.beans.DemoUser getDemoUser() { 102、 return demoUser; 103、 } 104、 public void setDemoUser( 105、 com.levainservice.demo.beehive.beans.DemoUser demoUser) { 106、 this.demoUser = demoUser; 107、 } 108、 } 109、 @Jpf.FormBean 110、 public static class FindDemoUserByName1FormBean implements
java.io.Serializable { 111、 private static final long serialVersionUID = 1L; 112、 private java.lang.String uname; 113、 public FindDemoUserByName1FormBean() { 114、 } 115、 public java.lang.String getUname() { 116、 return uname; 117、 } 118、 public void setUname(java.lang.String uname) { 119、 this.uname = uname; 120、 } 121、 } 122、 }

可视化的开发JSP页面

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

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

  填充录入新用户信息的JSP页面: userInsertInput.jsp

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

  用Workshop JSP Editor编辑器打开userInsertInput.jsp,在Workshpop Palette视图中展开NETUI,选择其中的Form项。

Beehive应用开发

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

Beehive应用开发

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

Beehive应用开发

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

Beehive应用开发

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

Beehive应用开发

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

  • 填充输入查询条件的JSP页面:userQueryInput.jsp

      userQueryInput.jsp中显示用户输入查询条件的Form,因此和上面的步骤基本一致。

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

    Beehive应用开发
  • 填充修改用户信息的JSP页面:userUpdateInput.jsp

      和上面的步骤基本一致,将Form图标拖到userUpdateInput.jsp的设计区,将Form的Action设置为mergeDemoUser。

    Beehive应用开发

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

  • 填充查询结果显示JSP页面:userQueryResult.jsp

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

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

    Beehive应用开发

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

    Beehive应用开发

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

    Beehive应用开发

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

    Beehive应用开发

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

    Beehive应用开发
  • 填充操作成功的提示JSP页面:ok.jsp

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

    测试

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

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

  • 查询界面截图 Beehive应用开发
  • 用户信息修改界面 Beehive应用开发
  • 用户信息增加界面 Beehive应用开发

    总结

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

      • 评论
      • 分享微博
      • 分享邮件
      邮件订阅

      如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

      重磅专题
      往期文章
      最新文章