商讯信箱
用户名: @
密  码:   注册|忘记密码
登录
个人用户经销商
您的位置:首页 > 技术频道 > 正文

整合Java 6 脚本、Groovy实现动态MVC模式(一)



三、使用Groovy实现商业逻辑

    现在我们已经建立了数据,下面我们开始实现商业逻辑。在上面已经提到过,Java 6直接在JVM层直接支持脚本语言,我们可以使用Java 6支持的Mozilla's Rhino JavaScript脚本引擎,这是一个默认的脚本引擎。WebLEAF可以利用这个特性允许我们使用任何支持者脚本语言来实现商业逻辑。由于Groovy引擎并不直接支持Java 6,因此,为了使用Java 6的脚本功能,我们必须使用java.net工程,这个工程是一个支持不同语言的脚本引擎实现。
 
    下面让我们先下载Groovy,在本例中,我们使用了Groovy 1.0,将groovy-all-1.0.jar放到lib目录中。然后我们从java.net脚本工程中下载jsr223-engines,解压,将groovy-engine.jar文件放lib中。

    现在我们已经拥有所有的要求的库了,下面我们开始写代码。首先,我们在WEB-INF中建立一个scr目录,并在scr目录中建立一个Item.groovy文件,它的代码如:
import groovy.xml.MarkupBuilder import groovy.sql.Sql import java.util.* def ShowAllItems(builder,sql) { sql.eachRow( "select * from TTST_ITEM", { itemToXML(builder,it) } ); } def showItem(builder,sql,codeItem) { if(codeItem) { item = sql.firstRow("select * from TTST_ITEM where ITE_CODE = ?" ,[codeItem]) if(item) { builder.ITEM_QUERY(Type:'Selected'){ itemToXML(builder,item) } } } } def itemToXML(builder, item) { builder.ITEM( Code:item.ite_code, Name:item.ite_name, Description:item.ite_description ) } def show(param) { def bundle = ResourceBundle.getBundle("webapp"); def sql = Sql.newInstance("jdbc:hsqldb:" + bundle.getString("db.location") + "/Test;shutdown=true;ifexists=true" , "sa","", "org.hsqldb.jdbcDriver") def writer = new StringWriter() def xml = new MarkupBuilder(writer) def groovy = xml.ITEM_QUERY(Type:'All'){ ShowAllItems(xml,sql) } showItem(xml,sql,param.p_ite_code) // Not efficient but it's just to prevent // HSQLDB to block on the DB files // when the servlet context is restarted sql.execute("SHUTDOWN") return writer.toString() }
    为了可以使用上面的Groovy脚本,我们需要编辑WebLEAF配置文件(Test.leaf.conf),并加一个XMLOPERATION来将这个脚本作为商业逻辑实现。加入这个操作后,系统将响应showitems.fm请求,配置文件的内容如下:

<?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE WADSET SYSTEM "http://www.uib.es/leaf/LEAFwad.dtd"> <WADSET> <WAD NAME="Test" INIT_MODE="INITS_ON_START_UP" XML_ALLOW_SHOW="TRUE" XSLT_NO_CACHE="TRUE" > <OPERATIONSET> <SUFFIX VALUE="fm"/> <XMLOPERATION NAME="showItems" DESCRIPTION="Shows all the items and the selected one" CLASSNAME="org.leaf.XMLOperation" > <SOURCES GLOBAL_TAG="XML_APP" > <SOURCE XML_SOURCE="xml/Labels.xml"/> <SOURCE XML_SOURCE="script://scr/Item.groovy/show?w_"/> </SOURCES> </XMLOPERATION> </OPERATIONSET> </WAD> </WADSET> 我们还需要加一些标签,以备后面的view使用。我们通过向Test\WEB-INF\xml\Labels.xml中加以下内容达到这个目的: <LABELS Title="Test application" > <ITEM Title="Item Management" FieldSetLegend="Item data" SelectDefault="... select an item to display its data" Code="Code" Name="Name" Description="Description" /> </LABELS>
    为了我们的应用程序可以处理以".fm"结尾的请求,我们还需要编辑web.xml文件,将这种请求加入到WebLEAF controller servlet中。也就是使用<servlet-mapping/>标签。web.xml的内容如下:

<?xml version="1.0"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/j2ee/dtds/web-app_2_3.dtd"> <web-app> <!-- Autoconfiguration servlet --> <servlet> <servlet-name>AutoConfigurer</servlet-name> <servlet-class>org.leaf.util.AutoConfigurer</servlet-class> <load-on-startup>1</load-on-startup> <init-param> <param-name>FILE_NAME.1</param-name> <param-value>WEB-INF/classes/webapp.properties</param-value> </init-param> <init-param> <param-name>NODES_NAME.1</param-name> <param-value>db.location</param-value> </init-param> <init-param> <param-name>PATTERN.1</param-name> <param-value>(.*)/WEB-INF/(.*)</param-value> </init-param> <init-param> <param-name>FORMAT.1</param-name> <param-value>{0}WEB-INF/{1}</param-value> </init-param> </servlet> <!-- End Autoconfiguration servlet --> <!-- WebLEAF controller servlet configuration --> <servlet> <servlet-name>WebLEAFController</servlet-name> <servlet-class>org.leaf.LEAFManager</servlet-class> <load-on-startup>2</load-on-startup> </servlet> <!-- End controller servlet --> <servlet-mapping> <servlet-name>WebLEAFController</servlet-name> <url-pattern>*.fm</url-pattern> </servlet-mapping> </web-app>
    现在我们来对这个应用程序进行第一次测试。我们可以使用我们喜欢的servlet容器来发布这个程序(如tomcat等)。虽然我们可以使用任意的上下文名子进行发布,但为了方便起见,我建议读者使用"test"来作为上下文名子。对于一些流行的servlet容器,最快速的方法就是将这个程序复制到自动发布目录中(如tomcatwebapps目录)。

   
现在让我们来启动servlet容器,然后在浏览器的地址栏中输入http://localhost:8080/test/showItems.fm(要注意的是,这个端口号一般是tomcat默认的,如果使用其他的servlet容器,请将这个端口号改成其它的)。然后在浏览器中的显示如图1所示:



       图1 在firefox中显示的由商业逻辑显示的XML文档

整合Java 6 脚本、Groovy实现动态MVC模式(二)
1 2 3
【内容导航】
第1页: 进行准备工作 第2页: 建立数据库
第3页: 使用Groovy实现商业逻辑
©版权所有。未经许可,不得转载。
[责任编辑:李宁]
[an error occurred while processing this directive]