|
· Model 代表业务数据,以及与访问和修改这些数据相关的规则(表格、视图、数据库用户、等等)。 · View 代表用户界面(Web 页面、 WAP 界面、SOAP 、等等) · Controller 负责接收用户的输入,将输入翻译成数据请求,然后为用户选择适当的数据视图 这种设计模式是页面流技术的基础。在一个页面流中,客户端浏览器通过HTTP get 或 post向页面流发出信息请求。然后,页面流(扮演controller的角色)处理用户的请求,向数据库、遗留系统、等等(model)发出一个数据请求。返回的数据在发送给适当的JSP 页面用于显示之前(View),可能会被提前处理一下。下图展现了这个过程。
首先,在WebLogic Workshop 中创建一个名为“DataTutorial”的空应用。请确保这个新应用被设置成使用“samples/workshop”域,方法是右键单击该应用,选择“Properties”,然后单击“WebLogic Server”部分。server home directory 应该指向“<install location>weblogic81bsamplesworkshop”。现在,选择“Tools/WebLogic Server/Start Server”,启动服务器。 在新应用中,右键单击“DataTutorial”文件夹,然后创建一个名为“ItemsTable”的Web项目。右键单击新创建的 ItemsTable 项目文件夹,选择“New/Choose File Type...”,然后选择“Business Logic”组中的“Database Control”,这将会打开数据库控件向导。我们将把新的数据库控件命名为“DataModel”,并使用cgDataSource。如果在Data Source 下拉列表中没有发现cgDataSource ,请检查服务器是否已经正确启动,以及使用的是否为samples/workshop 域。单击next,选择“Don't create methods”,然后单击“Create”。通常,最好让向导来创建数据库表的访问方法。不过这里为了演示其中的原理,我们将会手工创建。 双击datamodel 文件夹中的新DataModel.jcx 文件,然后选择“Source View”。其中有几个地方需要处理。首先,把“data-source-jndi-name”从“DATA_SOURCE_JNDI”改为“cgDataSource”。然后,删除向导自动添加的schema,在本教程中我们不会用到它。DataModel 控件的代码现在应该如下所示: |
package datamodel;
import java.sql.SQLException;
import javax.sql.RowSet;
import weblogic.jws.control.DatabaseControl;
import weblogic.jws.control.DatabaseFilter;
/**
*:connection data-source-jndi-name="cgDataSource"
*/
public interface DataModel extends DatabaseControl
{
}
|
|
|
package datamodel;
public class Item implements java.io.Serializable
{
public Integer ItemNumber;
public String ItemName;
public Integer QuantityAvailable;
public Double Price;
}
|
|
|
SELECT ITEMNUMBER, ITEMNAME, QUANTITYAVAILABLE, PRICE FROM CAJUN.ITEMS
|
|
|
public Item[] getItems()
|
|
|
package datamodel;
import java.sql.SQLException;
import javax.sql.RowSet;
import weblogic.jws.control.DatabaseControl;
import weblogic.jws.control.DatabaseFilter;
/**
*:connection data-source-jndi-name="cgDataSource"
*/
public interface DataModel extends DatabaseControl
{
/**
* :sql statement="SELECT ITEMNUMBER, ITEMNAME, QUANTITYAVAILABLE, PRICE
FROM CAJUN.ITEMS"
*/
public Item[] getItems();
}
|
|
现在,可以在页面流中使用这个控件了。在ItemsTable 项目中,您将会看到三个文件:index.jsp 、error.jsp、和Controller.jpf。其中controller 文件是Model-View-Controller 设计模式的 controller 部分,而.JSP 文件是view 部分。 双击Controller.jpf ,确保位于“Flow View”。然后拖动DataModel.jsx 到页面流中,这样您就获得了一个可以在页面流中访问的控件实例。您的页面视图应该如下所示:
现在,切换到 source view。因为我们将会用到Item 类,所以需要在导入部分添加一个引用,如下: |
import datamodel.Item;
|
|
|
protected Forward begin()
{
try
{
Item[] Items = dataModel.getItems();
getRequest().setAttribute( "items", Items );
}
catch( Throwable ex )
{
ex.printStackTrace();
}
return new Forward("index");
}
|
|
我们刚刚调用了数据库控件的getItems() 方法,并把返回值放入一个Item 数组中。现在,为了可以在.jsp 页面中访问这个数组,我们将使用setAttribute 方法将其放入 HTTP Request 流中。如果愿意的话,我们也可以直接在页面流中访问dataModel 变量,但MVC设计模式的思想是使用controller (页面流)来控制数据访问、处理错误、等等;而view (JSP 页面)只关心数据的显示。完整的Controller.jpf 应该如下所示: |
import com.bea.wlw.netui.pageflow.PageFlowController;
import com.bea.wlw.netui.pageflow.Forward;
import datamodel.Item;
/**
* This is the default controller for a blank web application.
*/
public class Controller extends PageFlowController
{
/**
* :control
*/
private datamodel.DataModel dataModel;
/**
* :action
* :forward name="index" path="index.jsp"
*/
protected Forward begin()
{
try
{
Item[] Items = dataModel.getItems();
getRequest().setAttribute( "items", Items );
}
catch( Throwable ex )
{
ex.printStackTrace();
}
return new Forward("index");
}
}
|
|
|
<% import="datamodel.Item"%>
|
|
|
<!--Generated by Weblogic Workshop-->
<%@ page language="java" contentType="text/html;charset=UTF-8"%>
<%@ taglib uri="netui-tags-databinding.tld" prefix="netui-data"%>
<%@ taglib uri="netui-tags-html.tld" prefix="netui"%>
<%@ taglib uri="netui-tags-template.tld" prefix="netui-template"%>
<% import="datamodel.Item"%>
<html>
<head>
<title>Items Table</title>
</head>
<body>
Here is our Items Table:<p>
<table border=1>
<tr><td>Item Number</td><td>Item Name</td><td>Quantity
Available</td><td>Price</td></tr>
<% // Get the Items from the request stream
Item oItem[] = (Item[]) request.getAttribute("items");
// Loop through the items
for (int f=0 ; f < oItem.length ; f++)
{
out.println("<tr><td>" + oItem[f].ItemNumber +
"</td><td>" + oItem[f].ItemName +
"</td><td>" + oItem[f].QuantityAvailable +
"</td><td>quot; + oItem[f].Price +
"</td></tr>");
}
%>
</table>
</body>
</html>
|
|
|
Item oItem[] = (Item[]) request.getAttribute("items");
|
|
|
for (int f=0 ; f < oItem.length ; f++)
|
|
对于每一个项目,我们都会打印项目编号、项目名称、剩余数量、和价格到输出流中的表格单元。 |
out.println("<tr><td>" + oItem[f].ItemNumber + "</td><td>" + oItem[f].ItemName +
"</td><td>" + oItem[f].QuantityAvailable + "</td><td>quot; + oItem[f].Price +
"</td></tr>");
|
|
如果没有获得以上信息,而是获得一个错误页面,请在begin 方法的第一行代码处设置一个断点,然后重新运行。逐步调试代码,您应该可以发现错误发生的地方。 尽管只是一个简单的例子,但您应该可以了解到在Web 页面中访问数据并按照用户的需要格式化数据是多么简单。我们把应用的功能分成三个独立的角色:数据库控件是我们的“model”——控制对数据库的访问并处理来自数据库的数据。在本文的例子中,controller 被命名为Controller.jpf——即页面流本身。这一部分负责处理来自用户的请求(即本例中来自主页的请求)、向Model请求数据、然后把数据显示给用户。打个比方,如果用户使用移动电话请求数据, 那么我们的controller 文件将会方便地定向到另外一个针对移动电话的 view。 我们的数据库控件可以被其他页面流或Web 服务重用。重用是MVC 设计模式的另外一个优点。如果有任何问题、bug、或意见,请访问dev2dev,网址http://dev2dev.bea.com 或中文dev2dev技术站点 http://dev2dev.bea.com.cn。 |
Java Page Flow开发:从JDBC数据源中检索并显示数据
来源:Java频道
作者:未知
时间:2006-08-10
点击:
0
最新评论共有 0 位网友发表了评论
查看所有评论
发表评论
- 栏目列表
-
热点关注
- Java手机程序设计入门电子
- Java学生成绩管理系统源代
- java.util.Calendar的用法
- 使用response.sendRedirec
- 如何把java程序编译成.exe
- 结合JAVASCRIPT将HTML导入
- JAVA-IO包的学习引导文章
- 我的Mysql5.0中文乱码解决
- JAVA EXCEL API
- JSP与ASP.NET简单之比较!
- jsp与javascript的结合在
- 利用javabean轻松实现对数
- WebLogic的安装和配置
- 关于java的Classpath全解&
- tomcat配置手册(server.x
- JAVA面试题集
- MySQL5.0中文问题及JDBC数
- java的md5加密类
- W3 Jmail 简要介绍
- java读文件

