分享
 
 
 

替代STRUTS

王朝java/jsp·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

STRUTS的不足

在基于MVC模式的架构里,随着B/S开发的流行,近来尘嚣其上的就是STRUTS。“STRUTS本身只是一个开发框架,它本身并不能保证程序开发的模块结构是否清晰, 也不能保证程序开发的进程 ”。笔者根据一些朋友利用此架构开发项目的经验,总结出STRUTS的不足:

1 入门不易,特别是TAGLIB

2 大量的TAGLIB让美工设计人员无所适从

3 比较适合于大的项目

鉴于此,笔者总结出另一符合MVC模式的替代架构。先谈MVC模式

“MVC模式不仅实现了功能模块和显示模块的分离,同时它还提高了应用系统的可维护性、可扩展性、可移植性和组件的可复用性。。。。。。”准确地说,MVC更象是一个框架。

我们的方案分三个步骤:

1 在视图层利用MS的浏览器带的数据绑定技术,实现数据与界面显示。

2 在控制层我们实现取数引擎,利用COMMAND模式来控制流程转向。

3 在模型层使用JAVABEAN实现数据模型。

方案最大的优点在于数据绑定的应用。因此下面的例子都是为了配合演示视图层。没有实现流程控制和JAVABEAN模型。

视图层应用数据绑定

数据绑定是Internet Explore的专长之一。使用数据绑定,可以将文档中的数据和ActiveX数据对象数据库相连,并且使用一种简单易用的方式处理数据。这项技术很有用,因为数据库的数据可以作为XML文档在因特网上发送,并可在浏览器上立即转换过来,这意味着熟悉数据库编程的程序员可以集中精力在使用数据库方法上而不是DOM方法上。

数据绑定分为两个步骤:1 使用数据源对象 2 把数据和HTML元素绑定

在IE浏览器中有四种数据员对象:MSHTML控件,TDC表格数据控件,XML DSO和XML数据岛。我们这里用到的是XML数据岛。因为我们的数据交换格式是XML数据包。

我们可以通过<xml ID=”DATASOURCEID” SRC=”http://localhost:7001/XmlData”>设置数据源。

在这里ID是绑定HTML的数据源的代码,SRC是取得XML数据包的引擎,其可以是一个得到数据包的URL,也可以是个XML文件。

接着我们开始对HTML对象进行数据绑定。我们要用到这些HTML元素的DATASRC属性指定数据源ID,DATAFLD指定数据值。例如:

将下列XML存为文件custom.xml

<?xml version="1.0" ?>

<CUSTOMERS>

<CUSTOMER>

<NAME>Charles</NAME>

<CUSTOMER_ID>58704</CUSTOMER_ID>

</CUSTOMER>

<CUSTOMER>

<NAME>Tom</NAME>

<CUSTOMER_ID>58703</CUSTOMER_ID>

</CUSTOMER>

<CUSTOMER>

<NAME>John</NAME>

<CUSTOMER_ID>58702</CUSTOMER_ID>

</CUSTOMER>

</CUSTOMERS>

将下列HTML代码存为test.html,和custom.xml在同一目录下:

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=gb2312">

<title>数据绑定</title>

<xml ID="cust" src="custom.xml"></xml>

</head>

<body>

<table datasrc="#cust" width=100% border="1">

<tr>

<td><span datafld="NAME"></span></td>

<td><span datafld="CUSTOMER_ID"></span>

</td>

</tr>

</table>

</body>

</html>

下面是数据绑定的结果:

看看怎么样,是否很简单我们就得到一个表格。而且不用做任何显示计算,只要让美工人员为HTML元素加个属性即可。而且我们还可以使用pageSize设置页的记录数,pageCount记录集包含的页数,moveFirst,moveLast,moveNext,movePrevious轻松实现分页。怎么样,和STRUTS相比是否我们做得更简单,结构更清晰。而且大量计算集中在客户端,可以减轻服务器端的计算负荷。

在控制层传递XML数据包

我们之所以用XML作为数据交换是因为JAVASCIRPT和JAVA都有DOM对象来解析XML。

我们将通过一个SERVLET来得到一个XML包;

import javax.servlet.*;

import javax.servlet.http.*;

import java.io.*;

import java.util.*;

public class XMLData extends HttpServlet {

static final private String CONTENT_TYPE = "text/html; charset=GBK";

//Initialize global variables

public void init() throws ServletException {

}

//Clean up resources

public void destroy() {

}

public void service(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException{

response.setContentType(CONTENT_TYPE);

PrintWriter out = response.getWriter();

out.println("<?xml version=\"1.0\" ?>");

out.println("<CUSTOMERS>");

out.println(" <CUSTOMER>");

out.println(" <NAME>Charles</NAME>");

out.println(" <CUSTOMER_ID>58704</CUSTOMER_ID> ");

out.println(" </CUSTOMER>");

out.println(" <CUSTOMER>");

out.println(" <NAME>Tom</NAME>");

out.println(" <CUSTOMER_ID>58703</CUSTOMER_ID> ");

out.println(" </CUSTOMER>");

out.println(" <CUSTOMER>");

out.println(" <NAME>John</NAME>");

out.println(" <CUSTOMER_ID>58702</CUSTOMER_ID> ");

out.println(" </CUSTOMER>");

out.println(" </CUSTOMERS> ");

}

}

下面为web.xml文件

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>

<servlet>

<servlet-name>xmldata</servlet-name>

<servlet-class> XMLData</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>xmldata</servlet-name>

<url-pattern>/xmldata</url-pattern>

</servlet-mapping>

</web-app>

结论

由此我们可以看出,此替代方案与STRUTS相比有以下优点:

1 实现数据与表现相分离,设计人员和程序人员分工更明确

2 大量计算分布在客户端,减轻服务器端负荷

但注意:NETSCAPE浏览器不支持数据绑定

参考文档:

《实用J2EE设计模式》

《XML探索》

《MVC设计模式介绍》

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有