用Javascript搭建企业级web应用 ——从intra-mart说开去

用Javascript搭建企业级web应用

——从intra-mart说开去

2011-7-27@南京

By 蒋彪

1. 前言

前段时间,因为一个项目,被责成调查日本主流的一个企业级应用开发框架:intra-mart

这个框架,集成了开发工具,resine/jboss的服务器,日本本土化的类spring开发框架和针对常用业务系统封装的开发组件.

并且,在开发架构层面,intra-mart还提供了两种开发模式,一种是常见的JavaEE开发模式,还有一种灰常诡异,是javascript开发模式。

一开始,我以为这是日本人独特的变态技术,后来我才发现,原来JS的应用级开发居然遍地开花,并且有着悠久的历史。。。

图:intra-mart的技术架构图

2. 企业级Web应用是什么东东?

在谈及JS企业级开发之前,我想先提提到底什么是企业级Web应用。

我对企业级Web应用的定义是:

以网络通讯和网络协议为主干(不局限于http)的,分布式的,实时性的大型应用

比如,我们抛开技术框架,抛开技术语言,一个以http协议为骨干的web应用是不是就应该是这样的:

如果这一切是用java来搭建,免不了充满了架构分层,配置文件,前台无论你用jsp,jsf,有几个问题都是重要的,难以解决的:

1. 华丽的网站,一般都是由专门的美工人员用html制作。难道有直接可以使用纯html直接挂上后台代码的?

2. 如果用java完成,那必须选用合适的技术框架,一般的技术框架都牵涉到大量的分层,配置,对于大型展开,快速开发不啻为和一个噩梦。

3. 用JavaScript做后台开发语言

用javascipt做后台开发语言,那么效果如下:

比如,我们拿intra-mart Sample里面的一个发邮件的程序举例:

整个邮件的发送只有两块,一个是前台的静态html,一个是后台js文件

<html> <head> <IMART type="imDesignCss"></IMART> <script language="JavaScript"> function checkInputValue(){ //送信先 if( document.formSendMail.mail_to.value == "" ) { alert("[ To: ]を入力してください。"); document.formSendMail.mail_to.focus(); return false; } //送信元 if( document.formSendMail.mail_from.value == "" ) { alert("[ From: ]を入力してください。"); document.formSendMail.mail_from.focus(); return false; } /* //簡単メールフォーマットチェック //送信先 if( !document.formSendMail.mail_to.value.match(/.+@.+\..+/)){ alert("[ To: ]に入力したメールアドレスが不正です。"); document.formSendMail.mail_to.focus(); return false; } //送信元 if( !document.formSendMail.mail_from.value.match(/.+@.+\..+/)){ alert("[ From: ]に入力したメールアドレスが不正です。"); document.formSendMail.mail_from.focus(); return false; } */ return true; } function onSenderMail(){ if (checkInputValue() == true ) { document.formSendMail.submit(); } } </script> </head> <body> <IMART type="imTitleBar" title="メール送信 サンプル"></IMART> <IMART type = "imToolbarFrame"> <IMART type = "imToolbarLeft"> <IMART type = "imIcon" name = "送信" icon = "images/standard/next.gif" href = "javascript:onSenderMail();"> </IMART> </IMART> </IMART> <br> <IMART type="form" name="formSendMail" action="action_send" method="POST" enctype="multipart/form-data"> <table align="center"> <tr> <td> <table class="edit"> <tr><td><br></td></tr> <tr class="bottom"> <IMART type="imItemName" name = "To:" require = "true"></IMART> <IMART type="imInputTd" style = "text" name = "mail_to" value = "" size = "60"></IMART> </tr> <tr class="bottom"> <IMART type="imItemName" name = "From:" require = "true"></IMART> <IMART type="imInputTd" style = "text" name = "mail_from" value = "" size = "60"></IMART> </tr> <tr class="bottom"> <IMART type="imItemName" name = "Subject:"></IMART> <IMART type="imInputTd" style = "text" name = "mail_subject" size = "60"></IMART> </tr> <tr class="bottom"> <IMART type="imItemName" name = "Message:"></IMART> <IMART type="imInputTd" style ="textarea" name ="mail_body" cols ="42" rows ="8"></IMART> </tr> <tr class="bottom"> <IMART type="imItemName" name = "Attachment:"></IMART> <IMART type="imInputTd" style ="file" name ="mail_file" size ="50"></IMART> </tr> <tr><td><br></td></tr> </table> </td> </tr> </table> </IMART> </body> </html>


function action_send(request){ var locale = AccessSecurityManager.getSessionInfo().locale; var mailSender = new MailSender(locale); mailSender.addTo(request.mail_to); mailSender.setFrom(request.mail_from); mailSender.setSubject(request.mail_subject); var parameter = request.getParameter("mail_file"); if( parameter != null && parameter.getLength() > 0 ) { var fileName = parameter.getFileName() var fileData = parameter.getValueAsStream(); mailSender.addAttachment(fileName, fileData); } mailSender.setText(request.mail_body); if( mailSender.send() ){ Module.alert.link("SYSTEM.SUCCESS", "メールを送信しました。", "sample/mail/mail"); }else{ Module.alert.link("SYSTEM.ERR", mailSender.getErrorMessage(), "sample/mail/mail"); } }


4. 这一切的奥秘

很多人也许会跟我一样好奇,为什么javascript可以做后台开发语言,这一切都是怎么做到的呢。

其实,这一切都是基于一个名为<Rhino>的开源框架。

所有在后台编写的javascript,最后会被该框架编译成java程序。最终还是以java的方式运行。

但是,js的简单性和便捷性是绝对的优势。

因为篇幅就不展开,具体可以参考以下资料:

http://www.mozilla.org/rhino/

http://www.ibm.com/developerworks/cn/web/wa-aj-javaee/index.html

5. 未完

还没有完,intra-mart虽然是个收费产品。但是intra-mart把自己关于js开发技术的东西开源了。

按照这个框架开发的war包,可以轻松部署到resine服务器上。

有兴趣的可以访问以下资料:

http://oss.intra-mart.org/projects/im-jssp/wiki

#以上#

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值