Struts2集成指南.doc_第1页
Struts2集成指南.doc_第2页
Struts2集成指南.doc_第3页
Struts2集成指南.doc_第4页
Struts2集成指南.doc_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Struts2集成指南关于Struts2Struts是Apache软件基金会(ASF)赞助的一个开源项目。它最初是Jakarta项目中的一个子项目,并在2004年3月成为ASF的顶级项目。它通过采用Java ServletJSP技术,实现了基于Java EE Web应用的Model-View-ControllerMVC设计模式的应用框架Web Framework,是MVC经典设计模式中的一个经典产品。Struts,a history在Java EE的Web应用发展的初期,除了使用Servlet技术以外,普遍是在JavaServer Pages(JSP)的源代码中,采用HTML与Java代码混合的方式进行开发。因为这两种方式不可避免的要把表现与业务逻辑代码混合在一起,都给前期开发与后期维护带来巨大的复杂度。为了摆脱上述的约束与局限,把业务逻辑代码从表现层中清晰的分离出来,2000年,Craig McClanahan采用了MVC的设计模式开发Struts。后来该框架产品一度被认为是最广泛、最流行JAVA的WEB应用框架。Craig McClanahan2006年,WebWork与Struts这两个优秀的Java EEWeb框架(WebFramework的团体,决定合作共同开发一个新的,整合了WebWork与Struts优点,并且更加优雅、扩展性更强的框架,命名为“Struts 2”,原Struts的1.x版本产品称为“Struts 1”。至此,Struts项目并行提供与维护两个主要版本的框架产品Struts 1与Struts 2。Struts1 vs. Struts2侵入性Struts 1 在编程方面是面向抽象类编程,而不是面向接口编程。Struts 1要求自定义Action 类继承一个特定的抽象基类Action。另一方面,Struts 1的 Action 依赖于 Servlet API,因为Struts 1 Action 的execute 方法中有HttpServletRequest 和HttpServletResponse 方法。e.g.public class LogonAction extends Action public ActionForward execute(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response) Struts 2 Action 类可以实现一个Action接口,也可以实现其他接口,甚至不实现任何接口。这使得可选的和定制的服务成为可能。e.g.public class ExampleAction public String doSomething() return success;线程模式Struts 1 Action类 是单例模式并且必须是线程安全的,因为在web容器中,仅有Action类 的一个实例来处理所有的请求。Struts2Web容器为每一个请求产生一个Action类实例,因此没有线程安全问题。可测试性Struts1由于对Servlet API的依赖,使得针对于自定义Action类的测试变得复杂。Struts2由于自定义Action可以为POJO,所以可以向测试一个POJO一样来测试Action类。请求参数封装Struts1使用ActionForm 对象封装用户的请求参数,所有的 ActionForm 必须继承一个基类:ActionForm。普通的JavaBean 不能用作ActionForm,并且需要在配置文件中定义ActionForm。e.g. public class LogonForm extends ActionForm private String userpassword;private String username;Struts2直接使用Action属性来封装用户请求属性,避免了开发者需要大量开发ActionForm类的烦琐,实际上,这些属性还可以是包含子属性的 Rich对象类型。e.g. public class ExampleAction private String responseMessage;private String requestMessage;public String getResponseMessage() return responseMessage;public void setResponseMessage(String responseMessage) this.responseMessage = responseMessage;public String getRequestMessage() return requestMessage;public void setRequestMessage(String requestMessage) this.requestMessage = requestMessage;public String doSomething() setMessage(Hi, + getRequestMessage();return success;ELStruts1整合了 JSTL,因此可以使用JSTL 表达式语言。JSTL有基本对象图遍历,但在对集合和索引属性的支持上则功能不强。在向视图绑定值时,Struts1 使用标准JSP 机制把对象绑定到视图页面。Struts2Struts 2 可以使用JSTL,但它整合了一种更强大和灵活的表达式语言:OGNL(Object Graph Notation Language),因此,Struts 2 下的表达式语言功能更加强大。在向视图绑定值时,Struts2 使用“ValueStack ”技术,使标签库能够访问值,而不需要把对象和视图页面绑定在一起。校验框架Struts1Struts1 支持在 ActionForm 重写validate 方法中手动校验,或者通过整合 Commons-validator 框架来完成数据校验。Struts2Struts 2 支持通过重写validate方法进行校验,也支持整合XWork 校验框架进行校验。Struts2 architacture名词约定凡是代码、配置文件、IDE中出现的名词,均采用英文原称。Roadmap本文档的目标是,帮助读者在Eclipse中将Struts2集成至一个崭新的Dynamic Web Project。集成步骤大致如下:配置Struts2的代码环境 - 在web.xml中加入Struts2功能 - 测试Struts2。文档目标达成的标志是:页面请求能够通过Struts2的Action Mapping成功转发,并且基于Java的Struts2验证框架能够生效。集成步骤引入Struts2相关的jar文件Struts2 jars commons-fileupload-1.2.2.jar commons-io-2.1.jar commons-lang-2.4.jar commons-logging-1.1.1.jar freemarker-2.3.16.jar javassist.jar jstl-1.2.jar ognl-3.0.1.jar struts2-core-2.2.3.jar xwork-core-2.2.3.jar加入build path将以上10个jar文件,拷贝至WebContent/WEB-INF/lib下:对于Web Dynamic Project,一般情况下,当你向lib目录下copy了jar文件,eclipse会自动将jar文件加入build path下的名为Web App Libraries的Library。请确认在工程下出现了名为Web App Libraries的Library。如果有,说明这些jar文件已经被添加至build path了:如果在工程目录下找不到名为Web App Libraries的Library,说明jar文件没有被添加至build path,需要进行手动添加。首先进入build path设置界面,选中Libraries 页,并点击Add JARs:在JAR Selection窗口中,选中lib下所有的jar文件。选中后点击OK:你将看到被选中的jar文件已经被添加至build path:在工程中会出现一个名为Referenced Libraries的Libraries。这说明jar文件已经被添加至build path:以上两种方法都可以将jar文件添加至build path,它们的效果是一样的。配置web.xml添加filter在web.xml中添加一个filter: struts2 org.apache.struts2.dispatcher.FilterDispatcher filter-name表示filter的名字,你可以任意决定这个名字。filter-class表示使用哪个类作为filter,从这个类的全称来判断,可以发现FilterDispatcher是Struts2提供的一个类。它是Struts2转发请求的起点。在web.xml中添加一个filter-mapping: struts2 /* filter-mapping用来映射url和filter的映射关系。filter-name表示filter的名字,这个名字必须和之前filter声明中的filter-name一致。url-pattern表示哪些格式的url会被此filter滤中。/*表示在此web应用域名下,所有的地址都会被filter滤中,换言之,所有的http请求都会通过Struts2进行转发。filter的作用通过以上的配置,FilterDispatcher和url与filter-name联系在了一起。由于在web容器中注册了FilterDispatcher这个filter,Struts2可以收到所有http:/localhost:8080/tyland-b2b 的http请求。随后,FilterDispatcher会根据我们定义的action-mapping规则,将请求分发到指定的action类以及它的拦截器栈。最后,Struts2按照action-mapping规则,将后台计算的结果返回给指定页面。笼统地来说,Struts2就是这样工作的,所以说,FilterDispatcher是Struts2工作的入口。编写代码,测试Struts2Struts2的环境已经配置好了,基于action-mapping的转发机制已经可以运行了。为了证明这一点,请编写一些测试jsp页面和java代码。在编写代码的过程中,请确保代码文件的位置如下图所示:代码清单如下:Java代码UserVO.javapackage com.tyland.b2b.vo;/ 一个Value Object(Data Model),用来存放用户名、密码public class UserVO private String username;private String password;/ 成员变量password的getter方法。/ 在Strtus2中,用来在页面和服务器间传值的Value Object必须有getter方法public String getPassword() return password;/ 成员变量password的setter方法。/ 在Strtus2中,用来在页面和服务器间传值的Value Object必须有setter方法public void setPassword(String password) this.password = password;/ 同passwordpublic String getUsername() return username;/ 同passwordpublic void setUsername(String username) this.username = username;BaseAction.javapackage com.tyland.b2b.web.base;import com.opensymphony.xwork2.ActionSupport;/ 为了代码的灵活性和可扩展性,请声明一个BaseAction基类/ BaseAction继承Struts2的ActionSupport,因为我们想使用Struts2的一些额外帮助。/ 对于ActionSupport的继承不是必须的public class BaseAction extends ActionSupport private static final long serialVersionUID = 1492640280374952195L;UserAction.javapackage com.tyland.b2b.web;import com.tyland.b2b.vo.UserVO;import com.tyland.b2b.web.base.BaseAction;/ 自定义的Action类,继承BaseAction/ 由于继承了ActionSupport,我们可以使用Struts2默认的action方法execute()/ 由于继承了ActionSupport,我们可以使用Struts2默认的校验方法validate()public class UserAction extends BaseAction private static final long serialVersionUID = -7178605703943684190L;/ 用来在页面和服务器之间传递用户名、密码的Value Object。变量名任意。private UserVO userVO;/ 用来在页面和服务器之间传递message变量。名称任意。private String message;/用来在页面和服务器之间传递sayHiTo变量。名称任意。private String sayHiTo;/ 用来传值的变量必须有getter方法public UserVO getUserVO() return userVO;/用来传值的变量必须有setter方法public void setUserVO(UserVO userVO) this.userVO = userVO;public String getMessage() return message;public void setMessage(String message) this.message = message;public String getSayHiTo() return sayHiTo;public void setSayHiTo(String sayHiTo) this.sayHiTo = sayHiTo;/ Override声明说明这个方法复写或实现了父类或接口方法。/ 如action-mapping中不显示指定别的方法,struts2会将execute()作为默认的action方法执行。/ 返回的SUCCESS常量,来自ActionSupport,值为success。/ action-mapping会根据不同的返回值采取不同的转发或页面跳转动作。Overridepublic String execute() throws Exception System.out.println(*execute*);System.out.println(userVO.getUsername() + logins);return SUCCESS;/ 在Struts2执行execute()之前,会先执行validateExecute()进行用户输入验证/ 这个方法名必须符合Struts2验证框架所规定的命名规范public void validateExecute() System.out.println(*validateExecute* + userVO.getUsername();if (null = userVO.getUsername() | userVO.getUsername().length() 5) this.addFieldError(username, USERNAME ERROR);if (null = userVO.getPassword() | userVO.getPassword().length() 5) this.addFieldError(password, PASSWORD ERROR);/ 一个自定义方法。通过在action-mapping中的设置,可以实现使用POJO的自定义服务配置public String sayHi() throws Exception System.out.println(say hi to + getSayHiTo();return SUCCESS;/ 符合验证框架命名规范的、真对于sayHi()的验证方法public void validateSayHi() System.out.println(*validateSayHi* + getSayHiTo();if (null = getSayHiTo() | getSayHiTo().length() 5) this.addFieldError(sayHiTo, SAYHITO ERROR);Exampl

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论