说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

<了解Struts1.1 > 我刚看到的一篇好文章,贴出来,大家共享 dayday up (:

编辑:说三道四文库 发布时间:2017-12-18 12:10
HTML文档下载 WORD文档下载 PDF文档下载
了解Struts1.1 

了解MVC 
MVC是Model,View,Controller的缩写,MVC是Application开发的设计模式,也就是大家 
所知道的Model2.在MVC的设计模式中,要求在Application开发中你把商业逻辑,界面 
显示,数据分离。也就是分别在Model,View,Controller实现:数据,控制(商业逻辑) 
显示(页面显示). 
在以前或者说传统的Web Application开发方式当中,如Asp,Php,Jsp(Model 1)开发当中 
我们在Asp(Php,Jsp)中实现一切,如:从数据库中取到我们需要的数据,并根据数据之间的 
关联和实际的需要按照某种方式把他显示在页面中以及从页面提交的表单中提取数据,根据 
商业逻辑从数据库查询相关数据,或者把数据写入数据库。也就是说我们在Asp(Php,Jsp) 
实现一切包括:界面显示,商业逻辑,数据存取。这样带来的后果就是你所写的Asp(Php,Jsp) 
没有层次,并且Html和Script(javascript、JScript,Asp、Php、Jsp源代码)相互嵌套.可 
维护性差,最要命的是在Web Application通常显示一块是由美工完成的,很多时候也是 
你先写好Asp、Php、Jsp然后美工进行美化,很有可能你发现经过美工处理完以后你的代码 
已经面目全非了。你不得不把你的代码重新组织。 
在MVC模式中这个问题的解决办法是:View中负责显示,View一般从Controller得到已经处理 
过的数据,然后显示在页面当中,应该说这样在Html中嵌套很少的Script.基本上美工的修改 
不大会废掉你的劳动成果。 
在使用Java开发Web Application有几种符合MVC设计模式的开发方式让你选择。 
1:Jsp+Servlet+JavaBean(EJB) 
2:Jsp+JavaBean(Controller)+JavaBean(EJB)(Model) 
3:TDK(Turbine,Velocity...) 
4:Xsp 
5:Jsp+Struts+JavaBean(EJB) 
我个人认为后面两种比较好,其他几种都有可取的地方特别是使用TDK因为有一个比较好的 
工具可以自动生成很多代码,至于它的缺点在后面几种开发方式的比较当中我会介绍。 

Struts1.1的新功能 
Struts1.1与1.0相比加了一些很不错的功能。最主要是表单验证上功能增强。在Struts1.1 
数据的验证不象以前在Action中在validator具体实现,而是在validation.xml通过配置实现 
这样做的好处就是重用性加强了很多。 

Struts1.1实现的主要组成 
主要包括:Action,ActionFORM,ActionMapping,ActionForward,开发当中最主要写的是Action 
ActionFORM根据需要可以写或不写。下面我就一一具体介绍。 
Action 
An Action is an adapter between the contents of an incomingHTTP request 
and the corresponding business logic that should be executed toprocess this 
request. 
上面是Struts开发小组对Action的描述,说Action实际上是Request和Business Logic 
中间的适配器.通俗的说就是从表单中取到数据并穿给商业逻辑操作进行一系列的操作 
然后返回相应的操作信息。 

ActionFORM 
An ActionFORM is a JavaBean optionally associated with one or more 
ActionMappings. Such a bean will have had its properties initialized from 
the corresponding request parameters before the corresonding action's execute() 
method is called. 
ActionFORM实际上就是把从Request取到的数据封装并进行校验,然后把合法的数据给 
Action进行处理。实际上ActionFORM除了进行数据校验之外另外更重要的是在表单回写 
的时候作用很大。反而在1.1以后数据校验的大部分工作在validation.xml去实现。 

ActionMapping,ActionForward 
ActionMapping主要是用与配置和描述相关属性使用的。先看下在struts-config.xml 
中的配置文件一段配置描述: 


type="com.bingo.finance.action.UseregAction" 
name="useregFORM" 
scope="request" 
validate="true" 
input="/usereg.jsp"> 



ActionMapping就是用来描述一个Action的URL、具体实现的文件、相对应的ActionFORM 
数据属性(request or session)、是否需要进行数据校验和回写、以及处理完成后可能 
跳转的URL. 
而ActionForward你就可以理解为Action 操作完成后的跳转URL,Action在处理完相关操作后 
返回的是一个ActionForward也就是告诉Struts我做完这个操作下一步到哪儿去。 


构建Struts1.1运行环境 
我的配置是居于Tomcat4.0以上版本讨论,其他的AppServer大致相同。 
1:得到Struts1.1 
http://jakarta.apache.org/builds/jakarta-struts/release/v1.1-b1/jakarta-struts-1.1-b1.zip 
2:设置 
把Struts.jar Copy到$Tomcat_home/common/lib 或你使用Struts的Appaction下的WEB-INF/lib下 
在你使用Struts的Appaction下web.xml中增加下列配置 


action 
org.apache.struts.action.ActionServlet 

config 
/WEB-INF/struts-config.xml 


debug 



detail 






/WEB-INF/struts-html.tld 
/WEB-INF/struts-html.tld 



/WEB-INF/struts-logic.tld 
/WEB-INF/struts-logic.tld 




/WEB-INF/struts-nested.tld 
/WEB-INF/struts-nested.tld 




/WEB-INF/struts-template.tld 
/WEB-INF/struts-template.tld 

Struts1.1中提供了很详细的例子,你可以仔细看看. 
接下来你该根据需要配置struts-config.xml,以下是一个简单的例子 


"-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" 
"http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd"> 







type="com.bingo.finance.action.UserFORM"/> 












type="com.bingo.finance.action.UseregAction" 
name="useregFORM" 
scope="request" 
validate="true" 
input="/usereg.jsp"> 






parameter="com.bingo.finance.common.DisplayMsg"/> 










上面的英文我相信你能够看懂。我就不做解释了。你需要继续配置validation.xml了,看如下 
简单的例子. 




depends="required,mask,minlength,maxlength"> 




mask 
^\w+$ 


minlength 



maxlength 
20 


depends="required,mask,minlength,maxlength"> 




mask 
^\w+$ 


minlength 



maxlength 
20 


depends="required,mask,minlength,maxlength"> 




mask 
^\w+$ 


minlength 



maxlength 
20 


depends="required,mask,minlength,maxlength"> 




mask 
^\w+$ 


minlength 
10 


maxlength 
20 






上面validation.xml就是告诉Struts我的useregFORM取到的数据应该做下面的验证 
username是必须不能为空的并且最小长度为5,最大长度是20. 
................ 
password,nickname,superpass基本一样我就不做更多说明.至次配置基本结束,我们要开始写 
第一个Struts 了。 

开发Struts1.1 

usereg.jsp 
为了考虑页面的灵活性,在页面中显示的所有元素我都放在properties文件中并由 
com.bingo.finance.common.HtmlMsg这个文件取到. 
=================================================================== 


















 
  
 

 
 : 
 

 
 
 

 
 : 
 
 
 
 

 
 : 
 
 
 
 

 
 : 
 
 
 
 

 
 
 
 
 
 
 
 

 






UseregActiom.java 
=========================================================== 
package com.bingo.finance.action; 

//java import 
import java.io.IOException; 
import java.util.Locale; 

//servlet import 
import javax.servlet.ServletException; 
import javax.servlet.http.HttpSession; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

//struts import 
import org.apache.struts.action.Action; 
import org.apache.struts.action.ActionFORM; 
import org.apache.struts.action.ActionForward; 
import org.apache.struts.action.ActionMapping; 
import org.apache.struts.util.MessageResources; 

//finance import 
import com.bingo.finance.action.UserFORM; 
import com.bingo.finance.manager.UserManager; 
import com.bingo.finance.entity.User; 

public class UseregAction extends Action { 
//在Struts1.1以前使用perFORM 
//struts1.1使用execute替代perFORM 
public ActionForward execute(ActionMapping mapping, 
ActionFORM FORM, 
HttpServletRequest request, 
HttpServletResponse response) 
throws IOException, ServletException { 
try{ 
UserFORM userFORM=(UserFORM)FORM; 
UserManager userManager=new UserManager(); 
User user=userManager.FORMToEntity(userFORM); 
userManager.add(user); 
//Insert into DataBase a Userinfo 
}catch(Exception ex){ 
return mapping.findForward("error"); 

return mapping.findForward("success"); 
//ForWard is "/msg.jsp" 



UserFORM.java 
========================================================================= 
package com.bingo.finance.action; 
import java.util.*; 
import java.io.Serializable; 
//servlet import 
import javax.servlet.ServletException; 
import javax.servlet.http.HttpSession; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
//struts import 
import org.apache.struts.action.ActionMapping; 
import org.apache.struts.validator.ValidatorFORM; 
public class UserFORM extends ValidatorFORM implements Serializable{ 
//在Struts1.1以前通常FORM继承ActionFORM 
//实际上ValidatorFORM是继承ActionFORM 
//为什么要加一层ValidatorFORM是为了校验而做的 
private String id; 
private String username; 
private String password; 
private String nickname; 
private String superpass; 


public UserFORM(){ 



/****/ 
public String getId(){ 
return this.id; 


/****/ 
public void setId(String _id){ 
this.id=_id; 


/****/ 
public String getUsername(){ 
return this.username; 


/****/ 
public void setUsername(String _username){ 
this.username=_username; 


/****/ 
public String getPassword(){ 
return this.password; 


/****/ 
public void setPassword(String _password){ 
this.password=_password; 


/****/ 
public String getNickname(){ 
return this.nickname; 


/****/ 
public void setNickname(String _nickname){ 
this.nickname=_nickname; 


/****/ 
public String getSuperpass(){ 
return this.superpass; 


/****/ 
public void setSuperpass(String _superpass){ 
this.superpass=_superpass; 


/**show this class info**/ 
public String toString(){ 
StringBuffer info=new StringBuffer(); 
info.append("....id is:"+id); 
info.append("....username is:"+username); 
info.append("....password is:"+password); 
info.append("....nickname is:"+nickname); 
info.append("....superpass is:"+superpass); 
return info.toString(); 


public void reset(ActionMapping mapping, HttpServletRequest request) { 
id=null; 
username=null; 
password=null; 
nickname=null; 
superpass=null; 



UserManager.java ,User.java文件我就不提供了,这一部分在实际的开发当中根据需要自己去 
处理,也就是为了把数据插入数据库。 
现在一个简单的注册用户你就开发完成了。很简单吧。呵呵,继续努力...但其中还有很多 
细节你需要进一步了解,我只把你领到门了,你必须自己去研究一些东西,比如说,我希望 
我的用户多一个Email字段和一个年龄字段我应该如何做,而且我希望validation.xml的验证 
有Email合法验证,年龄必须大于0而且一定是整数。那我应该如何做? 
我只能告诉你加两个字段你需要修改FORM 增加字段,同时相应文件也要修改。在struts中 
Email的验证非常简单。好好看例子吧,好好研究validator-rules.xml,这个我认为struts1.1 
最好的功能增加(Struts1.0没有这个文件)。Struts中提供了一个非常灵活而且重用极高的验证机制。 

Struts和其他开发方式的比较 
使用Struts开发至少带来如下好处: 
1:层次结构非常清晰,也使得分工很明确。 
2:重用度很高,连数据验证都可以重用,还有一个更好的重用就是FORM,Action是可以很好的重用的。 
3:可维护性好。这是居于第一点的。 
................. 
下面我说一个Struts的不足之处,如果你使用或者了解TDK你就会觉得,TDK中可以自动生成很多 
java源代码的确可以节省不少工作量,Struts中也可以做的很好。我自己开发了一个工具,功能 
还不够强大。在我的计划当中,我希望FORM,JavaBean(封装数据相当于EJB中的Entity Bean), 
甚至包括操作数据库的Method都自动生成,还有validation.xml也可以动态的生成。然而因为 
下一个原因:Struts到目前为止还不是一个比较成熟的项目。他的改动实在是太大了。1.0和0.5 
就有很大的改动。所以我的计划有变。我希望在1.1完全推出来再做开发(1.1现在是Beta版)。 
同时我也给Craig R. McClanahan(Struts开发的Team leader)写过信听取他的建议. 


具体文章的地址:忘了 (:  在google上输入”的确是好文章!!!我把他贴出来!.htm“应该能找到吧
看作者是 :孤魂一笑    挺有名气的。
在使用Java开发Web Application有几种符合MVC设计模式的开发方式让你选择。 
1:Jsp+Servlet+JavaBean(EJB) 
2:Jsp+JavaBean(Controller)+JavaBean(EJB)(Model) 
3:TDK(Turbine,Velocity...) 
4:Xsp 
5:Jsp+Struts+JavaBean(EJB) 
TDK,xsp是什么东东?
五一期间花了5天去研究Struts,发现struts的标记、validated方法都挺好。
就是 action-mappings 很不实用。
我还下载了几本书,包括《Mastering Jakarta Struts》和《Programming Jakarta Struts》
还把它打印出来,装订成册。
TDK 就是Turbine 的一套开发工具。http://jakarta.apache.org/
Turbine完全显示了MVC, Struts没有完全实现.
Xsp 其实就是Cocoon.
有兴趣可以去http://xml.apache.org上看看。

因为HTML代码没有做转换。可以去http://www.javaunin.org/里面Apache版面看。
我的个人主页上面好象也有,因为项目忙没更新了。
上面贴的版本是第一版,第二版可以到www.cn-java.com看。
谢谢: hardas(孤魂一笑)指点。
看来你正在做struts的项目。一定有很多心得。有时间给各位介绍介绍。
借此机会,向你问个问题:

我使用的是jbuilder8下自带的struct1.0
在作工程的过程中遇到一个问题:在.properties文件中定义一些key中的字符串是中文的。
在jsp页面中调用struct标签库如 bean:message时出现乱码,都是一些问号。

我的jsp页面已经设置了charset=gb2312了?可是怎么还是出现乱码?
在jbuilder 8的patch目录下也加了jb8_encoding_fix.jar补丁了?

看来只能是struct的毛病了。

你是怎么解决的?
waiting for the expert !..........
SequoiaDB创始人:比MongoDB领先一到两年 打造企业级NoSQL数据库 [对话CTO]甲骨文熊光樑:全球研发模式开发出接地气产品 GitHub中国游记之长城——跨越那堵看不见的墙 IE11开发人员工具:UI响应工具详解 2013 Linux领域年终盘点 腾讯云俱乐部深圳站成功落幕 开创移动开发新篇章 解读云计算、大数据、物联网等九大IT技术发展趋势 苹果已证实收购Topsy或将涉足社交领域 触摸未来:Tactus微流体技术2014年来袭 Windows的未来:一个核心 多个版本 Github项目中使用率最高的Java/Ruby/JS库 2013中国大数据技术大会盛大开幕 从黑色星期五找到的六个规则 帮助网站转化 移动开发者的自学宝典:十大在线编程学习网站 MIT新技术:远程触摸和操纵实物 创新人机交互 中国移动研究院业务支撑研究所所长孙少陵:大数据实时处理技术发展趋势及中国移动实践和展望 “第一届中国大数据技术创新与创业大赛”主办方发言及创新分赛颁奖 中国移动研究院业务支撑研究所所长孙少陵:大会及与会嘉宾介绍 中国工程院院士、大数据专家委员会主任李国杰:能挖掘出价值的数据就是好数据 阿里飞天平台总架构师唐洪:飞天开放平台 百度大数据首席架构师林仕鼎:新计算时代 金山发布全系列IaaS平台 Google无人驾驶汽车与机器人组合,秒杀无人机 Google欲推新Chrome应用:适用于Android、iOS平台 comScore:美国市场苹果手机独占鳌头 Android和iOS双寡头垄断 一周消息树:新技术实现远程触摸和操纵实物 创新人机交互 研发周报:帮助网站转换的六大黑色星期五规则 【开源专访】JFinal作者詹波:以极简方式实现Web项目的极速开发 2013中国智能交通与大数据技术峰会:迎接交通大数据新时代 大数据应用技术(上):加速创新,重塑世界 英特尔百度携手推出首个跨平台应用商店 怎样适用odbc连接远程access? DelPhi的错误! 如何通过共享Model上网? 用FileSystemObject 写多行txt,如何实现换行写入??? 你的邮箱已经被别人使用,请使用一个DOMINO服务器,如何解决? 清空文本文件 我编写了一个dos批处理文件bat,要在bat文件运行后自动关闭dos窗口怎么办? 急救:机器出问题了,大家帮忙看看 谁能谈谈XP的激活问题!? 有问题的问题1 有问题的问题 安装visual studio.net 2003 的问题? 急件!请教了,如何在一个字符串中提取第n次出现的字符? weblogic及EJB属于中间层的吗? 到水园第一件事就是看看斑竹有没有换,嘻嘻,还有谁也是这样的? win2000装好后,设了本地连接的属性,和别的机器一样的设,可就是PING 不通网关 哪有“VB.NET高级编程”和“ADO.NET高级编程”下载?? 请各位帮忙找一个用asp.net写的日历,急用 小弟是菜鸟,请问一下svrmgrl是什么,9I中有吗? 文章分页,而且文章中有大小不等的图片,该如何去做 求《三国霸业2》简体版下载地址? 诸位高手,我碰到一个很棘手ASPNETMENU的问题!急需解决!!(100分)献上! vfw下的视频采集和图象截取的问题请教! 求 《家园-惊世浩劫》简体版 关于浏览器的问题 pb如何调用word文挡? 在使用mfc时选择不同语言,怎么最后编译执行时有??符号(在菜单中) 网络共享安全问题!!!!!!!!!!!!! 我是第一次尝试做网站,碰到了问题,能帮帮我吗? 电话号码的正确性问题? 求教c#中datagrid表格设置 高分求远程开机源代码 希望大家给出: 时间的各种单位(包括汉字名称和英文缩写)及它们的进率关系; 专家近来看一下,很有针对性! 对《c# Primer Plus中文版》书的批判!!!!! 谁能提供teechart在pb中的使用帮助 是否有记录传真机传真的资料(包括传真号码,传真时间,内容) 是否有记录传真机传真的资料(包括传真号码,传真时间,内容) 急救:如何回复fdisk删除的分区 请各位帮忙找一个用asp.net写的日历,急用 我想了解‘Bug 列表‘是怎么回事,最好有例子 各位大哥请帮帮我,如何将下面的vbs转换到c#,不胜感激! 如何控制DataList显示的记录数 请教做过基于snmp方式的入侵检测系统的哥们 !!!!!!! 架构模式知多少? 请教做过基于snmp方式的入侵检测系统的哥们 !!!!!!! 请教各位大侠一个问题?? 请教做过基于snmp方式的入侵检测系统的哥们 !!!!!!! 一个初学者的麻烦! 帮忙写个求时间的函数, 请教做过基于snmp方式的入侵检测系统的哥们 !!!!!!! 村屯 发泄 屠夫 难堪 怎样造句 各造一个 如图,三个正方形拼成1个矩形,求角EAD+ 在如图边长为7.6的正方形的角上挖一个边长为2.6的小正方形,剩余的图形能否拼成一个矩形?… 罗尔德达尔的作品 要英语原版的o~有几个就给几个吧~ 罗尔德达尔,用英文翻译过来是什么样 罗尔德·达尔是哪一个国家的人写《查理和他的巧克力工厂》这本书的人 罗尔德达尔全套共有多少字急! 圆锥曲线 如何发大爆炸 天才大爆炸怎么样 纤云弄巧,飞星传恨…纤字读qian还是xian. 印度将发射环火星探测器 否认与华“太俄罗斯军事动作令邻国不安 北约军演以非洲多国出现罕见混合型日食印度否认与中国之间有“太空竞赛”刚果(金)反叛武装称愿与政府重启和谈巴政府强烈谴责美国击毙巴塔头目 与巴德回应美批评称“纯粹胡扯”称“以出口克里首访政变后埃及 美将继续与埃政府震惊! 镜头揭秘世界各地女人的惊天差法国两名记者在马里被害 法士兵运送遗一游船在泰国芭提雅附近沉船6死 包括“基地”在巴重组预谋大行动落实“三个基本” 抓实“两学一做”26张“问题清单”待整改张家港获首届生态文明奖江苏省盐城市第四届国际精英人才创业大幸福鼓楼文化飘香浸润人心中荷可持续供应链 管理项目启动中美战略与经济对话前瞻:BIT谈判迎扰民猪场关门还须修复环境成都天网3天抓拍交通违法289件 部新课改 教研员应摘掉权威帽子巨寇影视帝国混沌美女图替身老板涅炼仙网游植物师丧尸惊魂吕氏天下引力魔戒隋唐之纨绔天下黒翼大魔罗汉寺旅游地缝一线天旅游天生三桥旅游好吃街旅游西安城墙长乐门旅游广佑寺旅游白塔公园旅游辽阳龙石风景旅游区旅游四明山旅游凤凰岭旅游南山寺旅游
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘