Struts2介绍_struts2标签介绍

2020-02-28 其他范文 下载本文

Struts2介绍由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“struts2标签介绍”。

Struts2集成指南

关于Struts2 Struts是Apache软件基金会(ASF)赞助的一个开源项目。它最初是Jakarta项目中的一个子项目,并在2004年3月成为ASF的顶级项目。它通过采用Java Servlet/JSP技术,实现了基于Java EE Web应用的Model-View-Controller〔MVC〕设计模式的应用框架〔Web Framework〕,是MVC经典设计模式中的一个经典产品。

Struts,a history 在Java EE的Web应用发展的初期,除了使用Servlet技术以外,普遍是在JavaServer Pages(JSP)的源代码中,采用HTML与Java代码混合的方式进行开发。因为这两种方式不可避免的要把表现与业务逻辑代码混合在一起,都给前期开发与后期维护带来巨大的复杂度。为了摆脱上述的约束与局限,把业务逻辑代码从表现层中清晰的分离出来,2000年,Craig McClanahan采用了MVC的设计模式开发Struts。后来该框架产品一度被认为是最广泛、最流行JAVA的WEB应用框架。

Craig McClanahan 2006年,WebWork与Struts这两个优秀的Java EE Web框架(Web Framework〕的团体,决定合作共同开发一个新的,整合了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 cla LogonAction extends Action {

public ActionForward execute(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response){

} }

Struts 2 Action 类可以实现一个Action接口,也可以实现其他接口,甚至不实现任何接口。这使得可选的和定制的服务成为可能。e.g.public cla ExampleAction {

public String doSomething(){

return “succe”;} }

线程模式

Struts 1 Action类 是单例模式并且必须是线程安全的,因为在web容器中,仅有Action类 的一个实例来处理所有的请求。

Struts2 Web容器为每一个请求产生一个Action类实例,因此没有线程安全问题。可测试性

Struts1 由于对Servlet API的依赖,使得针对于自定义Action类的测试变得复杂。

Struts2 由于自定义Action可以为POJO,所以可以向测试一个POJO一样来测试Action类。

请求参数封装

Struts1 使用ActionForm 对象封装用户的请求参数,所有的 ActionForm 必须继承一个基类:ActionForm。普通的JavaBean 不能用作ActionForm,并且需要在配置文件中定义ActionForm。e.g.public cla LogonForm extends ActionForm {

private String userpaword;

private String username;}

Struts2 直接使用Action属性来封装用户请求属性,避免了开发者需要大量开发ActionForm类的烦琐,实际上,这些属性还可以是包含子属性的 Rich对象类型。e.g.public cla ExampleAction {

private String responseMeage;private String requestMeage;

public String getResponseMeage(){

return responseMeage;}

public void setResponseMeage(String responseMeage){

this.responseMeage = responseMeage;}

public String getRequestMeage(){

return requestMeage;

} } public void setRequestMeage(String requestMeage){ } this.requestMeage = requestMeage;public String doSomething(){

} setMeage(“Hi, ” + getRequestMeage());return “succe”;EL Struts1 整合了 JSTL,因此可以使用JSTL 表达式语言。JSTL有基本对象图遍历,但在对集合和索引属性的支持上则功能不强。在向视图绑定值时,Struts1 使用标准JSP 机制把对象绑定到视图页面。

Struts2 Struts 2 可以使用JSTL,但它整合了一种更强大和灵活的表达式语言:OGNL(Object Graph Notation Language),因此,Struts 2 下的表达式语言功能更加强大。在向视图绑定值时,Struts2 使用“ValueStack ”技术,使标签库能够访问值,而不需要把对象和视图页面绑定在一起。

校验框架

Struts1 Struts1 支持在 ActionForm 重写validate 方法中手动校验,或者通过整合 Commons-validator 框架来完成数据校验。

Struts2 Struts 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 javaist.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-cla表示使用哪个类作为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工作的入口。

编写代码,测试Struts2 Struts2的环境已经配置好了,基于action-mapping的转发机制已经可以运行了。为了证明这一点,请编写一些测试jsp页面和java代码。

在编写代码的过程中,请确保代码文件的位置如下图所示:

代码清单如下:

Java代码

UserVO.java package com.tyland.b2b.vo;

// 一个Value Object(Data Model),用来存放用户名、密码 public cla UserVO {

private String username;private String paword;

// 成员变量paword的getter方法。

// 在Strtus2中,用来在页面和服务器间传值的Value Object必须有getter方法

public String getPaword(){

return paword;

} } // 成员变量paword的setter方法。

// 在Strtus2中,用来在页面和服务器间传值的Value Object必须有setter方法 public void setPaword(String paword){ } this.paword = paword;// 同paword

public String getUsername(){ } return username;// 同paword

public void setUsername(String username){ } this.username = username;BaseAction.java package com.tyland.b2b.web.base;

import com.opensymphony.xwork2.ActionSupport;

// 为了代码的灵活性和可扩展性,请声明一个BaseAction基类

// BaseAction继承Struts2的ActionSupport,因为我们想使用Struts2的一些额外帮助。// 对于ActionSupport的继承不是必须的public cla BaseAction extends ActionSupport {

private static final long serialVersionUID = ***74952195L;} UserAction.java package 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 cla UserAction extends BaseAction {

private static final long serialVersionUID =-7***3684190L;

// 用来在页面和服务器之间传递用户名、密码的Value Object。变量名任意。

private UserVO userVO;

执行。// 用来在页面和服务器之间传递meage变量。名称任意。private String meage;//用来在页面和服务器之间传递sayHiTo变量。名称任意。private String sayHiTo;// 用来传值的变量必须有getter方法 public UserVO getUserVO(){ return userVO;}

//用来传值的变量必须有setter方法

public void setUserVO(UserVO userVO){ } this.userVO = userVO;public String getMeage(){ } return meage;public void setMeage(String meage){ } this.meage = meage;public String getSayHiTo(){ } return sayHiTo;public void setSayHiTo(String sayHiTo){ } this.sayHiTo = sayHiTo;// Override声明说明这个方法复写或实现了父类或接口方法。

// 如action-mapping中不显示指定别的方法,struts2会将execute()作为默认的action方法// 返回的SUCCESS常量,来自ActionSupport,值为“succe”。

// action-mapping会根据不同的返回值采取不同的转发或页面跳转动作。@Override

public 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()

} System.out.println(“say hi to ” + getSayHiTo());return SUCCESS;// 符合验证框架命名规范的、真对于sayHi()的验证方法 public void validateSayHi(){

} System.out.println(“******validateSayHi******” + getSayHiTo());if(null == getSayHiTo()|| getSayHiTo().length()

import com.tyland.b2b.web.base.BaseAction;

public cla ExampleAction extends BaseAction {

private static final long serialVersionUID =-***7281L;

private String meage;private String sayHiTo;

public String getMeage(){

return meage;}

public void setMeage(String meage){

this.meage = meage;}

public String getSayHiTo(){

return sayHiTo;}

} public void setSayHiTo(String sayHiTo){ } this.sayHiTo = sayHiTo;public String finish(){

} System.out.println(“example finished”);setMeage(getSayHiTo());return SUCCESS;JSP代码

index.jsp <%@ page language=“java” contentType=“text/html;charset=UTF-8”

pageEncoding=“UTF-8”%>

<%@ taglib uri = “http://java.sun.com/jsp/jstl/core” prefix = “c” %>

Hello World

《Struts2介绍.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
Struts2介绍
点击下载文档
相关专题 struts2标签介绍 struts2标签介绍
[其他范文]相关推荐
    [其他范文]热门文章
      下载全文