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

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

编辑:说三道四文库 发布时间:2018-07-16 04:20
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 !..........
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘