整合Java 6 脚本、Groovy实现动态MVC模式(一)
三、使用Groovy实现商业逻辑
现在我们已经建立了数据,下面我们开始实现商业逻辑。在上面已经提到过,Java 6直接在JVM层直接支持脚本语言,我们可以使用Java 6支持的Mozilla's Rhino JavaScript脚本引擎,这是一个默认的脚本引擎。WebLEAF可以利用这个特性允许我们使用任何支持者脚本语言来实现商业逻辑。由于Groovy引擎并不直接支持Java 6,因此,为了使用Java 6的脚本功能,我们必须使用java.net工程,这个工程是一个支持不同语言的脚本引擎实现。
现在我们已经建立了数据,下面我们开始实现商业逻辑。在上面已经提到过,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文件,它的代码如:
现在我们已经拥有所有的要求的库了,下面我们开始写代码。首先,我们在WEB-INF中建立一个scr目录,并在scr目录中建立一个Item.groovy文件,它的代码如:
为了可以使用上面的Groovy脚本,我们需要编辑WebLEAF配置文件(Test.leaf.conf),并加一个XMLOPERATION来将这个脚本作为商业逻辑实现。加入这个操作后,系统将响应showitems.fm请求,配置文件的内容如下: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()
}
为了我们的应用程序可以处理以".fm"结尾的请求,我们还需要编辑web.xml文件,将这种请求加入到WebLEAF controller servlet中。也就是使用<servlet-mapping/>标签。web.xml的内容如下:<?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>
现在我们来对这个应用程序进行第一次测试。我们可以使用我们喜欢的servlet容器来发布这个程序(如tomcat等)。虽然我们可以使用任意的上下文名子进行发布,但为了方便起见,我建议读者使用"test"来作为上下文名子。对于一些流行的servlet容器,最快速的方法就是将这个程序复制到自动发布目录中(如tomcat的webapps目录)。<?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容器,然后在浏览器的地址栏中输入http://localhost:8080/test/showItems.fm(要注意的是,这个端口号一般是tomcat默认的,如果使用其他的servlet容器,请将这个端口号改成其它的)。然后在浏览器中的显示如图1所示:

0
相关文章