中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> Bea专区 > BEA Workshop
WorkShop开发实战
作者:袁广英 时间:2006-08-04 12:26 出处:bea.com.cn 责编:月夜寒箫
              摘要:WorkShop开发实战

前言

  本文作者用BEA WebLogic Workshop开发一个在线商城的用户注册系统,通过这个应用充分展示了在bea workshop上如何轻松开发企业级应用程序,如何提高开发和部署效率从而缩短项目周期降低开发成本.本文章适合有一定基础的workshop开发爱好者。

正文

  假设现在有个在线商城的用户注册系统需要开发.用户填写其基本的信息资料后登入系统.用户注册后系统通过两种方法向用户发送密码.一种是通过用户注册的email给用户发送密码.第二种通过短消息将密码发送到用户的手机上.接下来我们来看看如何如何利用workshop开发平台来实现的.

一 初始化数据库

  在本系统中我使用mysql做为开发数据库并已建立了一个叫estore的数据库.接下来我们要初始化数据库脚本。我们可以使用bea 通用数据库客户端工具 DbVisualizer。用该工具能够方便的连接各类通用的数据库,在bea 开始菜单选择other development tools中点击它启动后首先我们先加载它的驱动,选择database下的driver manager把mysql的Driver加到classpath,接下来我们就以连接数据库了。用户需要填写以下四项内容。

CREATE TABLE `users` (
`id` int(11) NOT NULL auto_increment,
`username` varchar(20) NOT NULL default ‘‘,
`name` varchar(20) NOT NULL default ‘‘,
`sex` char(1) default ‘‘,
`address` varchar(100) default ‘‘,
`email` varchar(50) NOT NULL default ‘‘,
`idcard` varchar(20) NOT NULL default ‘‘,
`phone` varchar(20) NOT NULL default ‘‘,
`password` varchar(20) NOT NULL default ‘‘,
`status` varchar(100) NOT NULL default ‘‘,
`zip` varchar(10) NOT NULL default ‘‘,
`memo` varchar(200) default ‘‘,
PRIMARY KEY  (`id`)
)----------------------------------
-- Sample Data 插入测试数据
insert into users(username,name,sex,address,zip,email,idcard,phone,password,status,memo) values
(‘jerry’,‘jerry‘,‘1‘,‘shanghai‘,‘200090‘,‘gyyuan@unihub.net‘,‘310110110516011‘,‘13910000000‘,‘000000‘,‘1‘,‘administrator‘)

二 建立数据库连接池

  当完成数据库初始化后,接下来我们在WebLogic Server域中添加我们自己的数据库连接,启动workshop内自带的weblogic server,进入webligc图形化控制界面localhost:7001/console,输入用户名和密码(缺省都是weblogic)先创建Configure a JDBC Connection Pool 完成后在创建DataSource,具体配置见下面的图所示。请不要忘记绑定到cgserver上,另外需要在启动脚本classpath上加入mysql的驱动。

建立数据库连接池

建立数据库连接池

设计用户界面

  接下来我们就可以正式开发我们的应用.首先我们通过文件一个默认的应用程序并起名为estore.接下来修改index.jsp做为我们注册的首页.我们可以直接在源代码视图上进行编辑.这里介绍一个小技巧用户可以直接把可视化控件如html,netui和其它java控件拖到编辑视图和源代码视图上进行编辑.我的注册界面如下图所示

设计用户界面

  源代码如下图所示

源代码

四新建数据库控件

  接下来我们在estoreWeb下建立一个目录名称为database,并在该目录下建立一个database控件起名也叫database,并绑定mysqlDataSource数据源. 接下来我们切换到设计视图在面板上添加两个方法. 其中insertCustomer方法是插入数据到表users,getCustomerName方法是查寻用户是否已注册该用户名。具体代码如下

/**
* @jc:sql statement::
* insert into
* users(username,name,sex,address,zip,email,idcard,phone,password,status) values
* ({username},{name},{sex},{address},{zip},{email},{idcard},{phone},{password},‘0‘)::
*/
void insertCustomer(String username,String name,String sex,String address,String zip,String email,String idcard,String phone,String password);
/**
* @jc:sql statement="SELECT username FROM users WHERE username={username}"
*/
public String getCustomerName(String username);

五 建立页面流

  接下来我们点击Controller.jpf对我们的业务流程进行设计,我们把视图切换到设计视图进行业务流程的设计。从选项板上把操作图标拖到流视图编辑器上,并起名为Register同时生成表单bean :RegisterForm,并在该FormBean上添加index.jsp相对应的录入表单元素。在表单元素中使用保留关键字 actionForm,使用“点”符号引用表单 Bean 中的字段。并把index.jsp 中的<netui:form action="" focus="username">中action=""改成action="Register",这样index.jsp会自动与Register在流视图上自动通过一条绿线连接起来,它表明index.jsp将调用Register这个action。生成的formbean代码如下图所示

建立页面流

  同时我们在protected Forward Register(RegisterForm form)前加入* @jpf:forward name="sucess" path="sucess.jsp"这样当执行完register后,页面自动跳装到success.jsp上。如果用户名已经存在跳转到错误页面加下面这句. *@jpf:forward name="error" path="error.jsp"。,个人感觉在这一点上比起用户做基于struts应用开发简单的很多,不用配制那些烦索的配置文件,大大减轻了用户的工作量,提高工作效率。

  具体代码如下

/**
* @jpf:action
* @jpf:forward name="index" path="index.jsp"
*/
protected Forward begin()
{
return new Forward("index");
}
/**
* @jpf:action
*@jpf:forward name="sucess" path="sucess.jsp"
*@jpf:forward name="error" path="error.jsp"
*/
protected Forward Register(RegisterForm form)
{
return new Forward("success");
}
/**
* FormData get and set methods may be overwritten by the Form Bean editor.
*/
public static class RegisterForm extends FormData
{
private String username;
....….
public String getName()
{
return this.name;
}
………
}

  我们在把Controller.jpf控制文件切换到操作视图上,并把已经建好的database控件拖到操作面板上,系统会自动加载该服务。接下来我们做的工作就是如何来调用了。红色字体为调用代码。

protected Forward Register(RegisterForm form)
{
Random rnd = new Random();
String password=String.valueOf(rnd.nextInt(100000));
String username= form.getUsername();
String name=form.getName();
String sex= form.getSex() ;
String address= form.getAddress() ;
String zip=form.getZipcode();
String email = form.getEmail();
String idcard=form.getIdcard();
String phone=form.getUsername();
String qryname= database1.getCustomerName(username);

//判断用户名是否已经注册
if (qryname==null||qryname.equals("")){
database1.insertCustomer(username,name,sex,address,zip,email,idcard,phone,password);
return new Forward("sucess");
}
else{
return new Forward("error");
}
}
这样我们完成了最基本的数据库录入功能。

  这样我们完成了最基本的数据库录入功能。

六 验证用户输入数据

  在大多商业应用程序中,当用户通过表单输入数据时,我们要确保输入的值有效,然后才能进行其他操作,这里也不例外。表单验证有两种方法.一种是使用客户端 JavaScript较验另外一种是基于服务器端的验证。后一方法的优点有:更具有安全性,可以就在受影响表单字段旁的表单中显示错误消息,而无需弹出对话框。在这里我们使用第二种方式。具体步骤如下

1将 message-resources 标记添加到 JPF 文件中的控制器类:
/**
* @jpf:controller nested="true"
* @jpf:message-resources resources="Messages"   指明资源文件所放的位置
*/
2将 @jpf:validation-error-forward 批注添加到使用验证的操作。例如:
/**
* @jpf:action validation-error-page="index.jsp"
*@jpf:forward name="sucess" path="sucess.jsp"
*@jpf:forward name="error" path="error.jsp"
*/
protected Forward Register(RegisterForm form)
{
…..
}
将 validate 方法添加到表单 Bean 类。此方法必须具有示例中给出的确切签名:
public ActionErrors validate( ActionMapping mapping, HttpServletRequest request )
{
ActionErrors errs = new ActionErrors();
int at = _email.indexOf( ‘@‘ );
int dot = _email.lastIndexOf( ‘.‘
);
if ( at == -1 || at == 0 || dot == -1 || at > dot )
{
errs.add( "email", new ActionError( "validemail" ) );
}
..
return errs;
}

  在 validate 方法中,实现各种表单字段的验证逻辑。同时在index.jsp中添加相应的 netui:error 标记, 如 <netui:error value="email"/>。当有错误发生时,就会按照资源文件里的设置显示出错误提示。

  最后定义资源文件Messages.properties在此示例中,Messages.properties 文件位于 /WEB-INF/classes/下如:

  validemail =”无效的email地址”

  如果要支持中文信息显示请不要忘记用jdk下的native2ascii.exe工具对该资源文件进行格式化。

七 发送注册邮件

  接下来我们来讨论如何利用其他java控件更好地支持和开发我们这个应用程序。由于我们的应用需要发送邮件到用户注册的email而bea workshop提供了很好的Email控件,我们先新建一个叫email的文件夹,并在该文件夹内生成一个email控件填入想对应的smtp和发送人的邮件地址即可,如果该smtp需要验证的的话在该控件属性框输入服务器验证的用户名和密码即可,这样我们就完成了该email控件的基本设置。

  然后我们切换到Controller.jdf的操作视图,并把email.jcx拖到操作视图。这样我们就完成初始化程序,剩下来的工作就是如何调用接口,程序如下

protected Forward Register(RegisterForm form)
{
......
if (qryname==null||qryname.equals("")){
database1.insertCustomer(username,name,sex,address,zip,email,idcard,phone,password);        String body="Tankk you for the register,your password is"+ password;
mail1.sendEmail(email,"",””,"注册成功",body,"");
return new Forward("sucess");
}
……
}

八 通过调用web service 实现发送手机短消息功能

  如何发送短消息,其实很简单,因为任何有效的web服务都可以自动转换成WebLogic Workshop的一个控件,可以被重用。在这里我利用了新浪提供的短消息发送服务。具体url是http://smsinter.sina.com.cn/ws/smswebservice0101.wsdl,我已经测试过没有问题。在workshop 上新建一个webservice目录并在该目录生成一个webservice控件,并引用上面的后缀为wsdl的web 服务,系统会自动其调用的接口和方法。该Web Service就只有一个方法

String sendXml(carrier,userid,password,mobilenumber,content,msgtype)。
各个参数全部为string类型,其含义基本如下
carrier: 运营商名称,这里面可以随便输,
userid: 您在新浪无线上注册的手机ID,即http://sms.sina.com.cn。
password: 您在新浪无线上注册手机时所使用的密码。
mobilenumber: 对方的手机号码
content: 发送短消息的内容
msgtype: 发送短消息的类型(随便输)
同样地我们把它拖入Controller.jdf的操作视图,如下图所示,然后切换到源代码视图加入下面的代码.
mail1.sendEmail(email,””,””,"注册成功",body,””);
if (fome.getPhone!=null&&!form.getPhone().equal(“)){
webservice1.sendXml("Sina","你注册的手机号","你的密码",phone,body,"new");
}

  重新编译该应用程序并启动weblogic server,输入http://localhost:7001/estoreWeb/index.jsp你就可以运行你的web应用程序了。

重新编译

总结

  WebLogic Workshop是一款优秀可视化的开发环境。可以让 Java的开发人员方便地构建基于Java的Web服务,门户应用、编写工作流、创建Web应用并都可以帮助开发人员更快更好地完成。

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有