JavaEE基础应用教程之Struts2应用.ppt

上传人:wuy****n92 文档编号:70799172 上传时间:2023-01-28 格式:PPT 页数:87 大小:1.06MB
返回 下载 相关 举报
JavaEE基础应用教程之Struts2应用.ppt_第1页
第1页 / 共87页
JavaEE基础应用教程之Struts2应用.ppt_第2页
第2页 / 共87页
点击查看更多>>
资源描述

《JavaEE基础应用教程之Struts2应用.ppt》由会员分享,可在线阅读,更多相关《JavaEE基础应用教程之Struts2应用.ppt(87页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第3章 Struts 2应用3.1 Struts 2概述概述3.2 Struts 2基本应用及工作流程基本应用及工作流程3.3 Struts 2标签库应用标签库应用3.4 Struts 2拦截器拦截器3.5 Struts 2国际化应用国际化应用3.6 Struts 2文件上传文件上传3.7 Struts 2综合应用实例综合应用实例添加学生信息添加学生信息3.1 Struts 2概述3.1.1 MVC简介简介MVC有以下优点:多个视图可以对应一个模型。按MVC设计模式,一个模型对应多个视图,可以减少代码的复制及代码的维护量,一旦模型发生改变,也易于维护。模型返回的数据与显示逻辑分离。模型数据可以

2、应用任何显示技术,例如,使用JSP页面、Velocity模板或者直接产生Excel文档等。应用被分隔为三层,降低了各层之间的耦合,提供了应用的可扩展性。控制层的概念也很有效,由于它把不同的模型和不同的视图组合在一起,完成不同的请求,因此控制层可以说是包含了用户请求权限的概念。MVC更符合软件工程化管理的精神。不同的层各司其职,每一层的组件具有相同的特征,有利于通过工程化和工具化产生管理程序代码。3.1.2 Struts 2体系结构Struts 2的基本流程如下:Web浏览器请求一个资源。过滤器Dispatcher查找请求,确定适当的Action。拦截器自动对请求应用通用功能,如验证和文件上传等

3、操作。Action的execute方法通常用来存储和(或)重新获得信息(通过数据库)。结果被返回到浏览器。可能是HTML、图片、PDF或其他。其实,Struts 2框架的应用着重在控制上。简单的流程是:页面控制器页面。最重要的是控制器的取数据与处理后传数据的问题。Struts 2的体系结构还可以参考图3.1,更直观地展现出其流程。图3.1Struts2体系结构3.2 Struts 2基本应用及工作流程3.2.1 简单简单Struts 2实例开发实例开发1.下载下载Struts 2框架框架MyEclipse6没有对Struts2的支持,所以需要用户自己下载Struts2开发包。登录下载Strut

4、s2完整版,本书使用的是。将下载的Zip文件解压缩,它是一个典型的Web结构。打开其文件夹,里面包含以下4个文件:apps:包含基于Struts2的示例应用,是学习Struts2非常有用的资料。docs:包含Struts2的相关文档,如Struts2快速入门、Struts2文档、API文档等内容。lib:包含Struts2框架的核心类库,以及Struts2的第三方插件类库。src:包含Struts2框架的全部源代码。2.建立一个建立一个Web项目项目打开MyEclipse,建立一个Web项目,命名为“Struts2.0”。3.2.1 简单Struts 2实例开发3.加载加载Struts 2基本

5、类库基本类库下面把这几个类库添加到项目中。右击项目名,选择【Build Path】【Configure Build Path】菜单项,出现如图3.2所示的对话框。单击【Add External JARs】按钮,进入下载的Struts 2目录的lib文件夹,选中上面的5个Jar包,单击【OK】按钮完成类库的添加。图3.2添加Struts2的Jar包3.2.1 简单Struts 2实例开发4.修改修改web.xml文件文件打开项目中的WebRoot/WEB-INF/web.xml文件,修改其代码如下:struts2org.apache.struts2.dispatcher.FilterDispat

6、cherstruts2/*3.2.1 简单Struts 2实例开发5.创建创建hello.jsp选择【WebRoot】【new】【jsp】菜单项,在File Name中输入文件名“hello.jsp”,修改后的代码如下:struts 2应用 请输入姓名:3.2.1 简单Struts 2实例开发6.Action实现类实现类右击src文件夹,选择【new】【Package】菜单项,在name框中输入包名“org.action”,右击该包,依此类推,建立class,命名为“StrutsAction”,修改后的代码如下:package org.action;import java.util.Map;i

7、mport com.opensymphony.xwork2.ActionContext;import com.opensymphony.xwork2.ActionSupport;public class StrutsAction extends ActionSupportprivate String name;public String getName()return name;public void setName(String name)this.name=name;public String execute()throws Exception if(!name.equals(HelloW

8、orld)Map request=(Map)ActionContext.getContext().get(request);request.put(name,getName();return success;elsereturn error;3.2.1 简单Struts 2实例开发7.创建并配置创建并配置struts.xml文件文件任何一个Struts 2程序都不能缺少struts.xml文件,它是Struts 2运行的核心。右击src文件夹,选择【new】【file】菜单项,在File name框中输入“struts.xml”,修改后的代码如下:/welcome.jsp/hello.jsp3

9、.2.1 简单Struts 2实例开发8.创建创建welcome.jsp创建welcome.jsp,其步骤和上面创建hello.jsp类似,这里不再重复叙述。其代码如下:struts 2应用 hello!3.2.1 简单Struts 2实例开发9.部署和运行部署和运行启动Tomcat后,在浏览器中输入“http:/localhost:8080/Struts2.0/hello.jsp”,会看到如图3.3所示的界面。当在输入框中输入“张三”时,会出现如图3.4所示界面。如果输入“HelloWorld”,就会返回当前页面。图3.3运行界面图3.4运行成功界面3.2.2 Struts 2工作流程及各种

10、文件详解1.Struts 2的工作流程的工作流程Struts2框架中的配置文件struts.xml会起映射作用,它会根据“*”来决定调用用户定义的哪个Action类。例如在项目Struts2.0中,请求为struts.action,前面“*”的部分是“struts”,所以在struts.xml中有个Action类的name为“struts”,这表示该请求与这个Action来匹配,就会调用该Action中class属性指定的Action类。但是在Struts2中,用户定义的Action类并不是业务控制器,而是Action代理,其并没有和ServletAPI耦合。所以Struts2框架提供了一系列

11、的拦截器,它负责将HttpServletRequest请求中的请求参数解析出来,传入到用户定义的Action类中。3.2.2 Struts 2工作流程及各种文件详解2.Struts 2中各种文件详解中各种文件详解(1)web.xml文件后面的webapp标签中配置了下面这样一段:struts2 org.apache.struts2.dispatcher.FilterDispatcher struts2 /*可以看出,里面配置了一个过滤器,那么就先来介绍过滤器的使用。Filter过滤器是Java项目开发中的一种常用技术。它是用户请求和处理程序之间的一层处理程序。它可以对用户请求和处理程序响应的内

12、容进行处理,通常用于权限控制、编码转换等场合。3.2.2 Struts 2工作流程及各种文件详解所有过滤器必须实现接口,这个接口中含有3个过滤器类必须实现的方法:linit(FilterConfig):Servlet过滤器的初始化方法,Servlet容器创建Servlet过滤器实例后将调用这个方法。ldoFilter(ServletRequest,ServletResponse,FilterChain):完成实际的过滤操作,当用户请求与过滤器关联的URL时,Servlet容器将先调用过滤器的doFilter方法,返回响应之前也会调用此方法。FilterChain参数用于访问过滤器链上的下一个过

13、滤器。ldestroy():Servlet容器在销毁过滤器实例前调用该方法,这个方法可以释放Servlet过滤器占用的资源,过滤器类编写完成后,必须要在web.xml中进行配置,格式如下:过滤器名 过滤器对应类参数名称参数值 3.2.2 Struts 2工作流程及各种文件详解过滤器的关联方式有3种:与一个URL关联、与一个URL目录下的所有资源关联、与一个Servlet关联。与一个URL资源关联:过滤器名xxx.jsp与一个URL目录下的所有资源关联:过滤器名/*与一个Servlet关联:过滤器名Servlet名称3.2.2 Struts 2工作流程及各种文件详解(2)struts.xml文件

14、struts.xml文件通常放在Web应用程序的WEB-INF/classes目录下,该目录下的struts.xml将被Struts2框架自动加载。struts.xml文件是一个XML文件,文件前面是XML的头文件,然后是标签,位于Struts2配置的最外层,其他标签都是包含在它里面的。(3)package元素与Java中的包不同的是,Struts2中的包可以扩展另外的包,从而“继承”原有包的所有定义,并可以添加自己包的特有配置,以及修改原有包的部分配置。从这一点上看,Struts2中的包更像Java中的类。package有以下几个常用属性:lname:该属性是必选的,指定包的名字,这个名字将

15、作为引用该包的键。lextends:该属性是可选的,允许一个包继承一个或多个先前定义的包。labstract:该属性是可选的,将其设置为true,可以把一个包定义为抽象的。3.2.2 Struts 2工作流程及各种文件详解lnamespace:该属性是可选的,将保存的action配置为不同的名称空间。看下面这个例子:/foo.jsp/bar.jsp/moo.jsp/bar.jsp3.2.2 Struts 2工作流程及各种文件详解(4)Action元素当一个请求匹配到某个Action名字时,框架就使用这个映射来确定如何处理请求。/welcome.jsp/hello.jsp如果一个请求要调用Act

16、ion类中的其他方法,就需要在Action配置中加以配置。例如,如果在中有另外一个方法为:public String find()throws Exceptionreturn SUCCESS;那么如果想要调用这个方法,就必须在Action中配置method属性,其配置方法为:/welcome.jsp/hello.jsp3.2.2 Struts 2工作流程及各种文件详解(5)result元素一个result代表一个可能的输出。当Action类中的方法执行完成时,返回一个字符串类型的结果代码,框架根据这个结果代码选择对应的result,向用户输出。参数值param中的name属性有两个值:lloc

17、ation:指定逻辑视图。lparse:是否允许在实际视图名中使用OGNL表达式,参数默认为true。lresult中的name属性有如下值:lsuccess:表示请求处理成功,该值也是默认值。lerror:表示请求处理失败。lnone:表示请求处理完成后不跳转到任何页面。linput:表示输入时如果验证失败应该跳转到什么地方(关于验证后面会介绍)。llogin:表示登录失败后跳转的目标。3.2.2 Struts 2工作流程及各种文件详解type(非默认类型)属性支持的结果类型有以下几种:lchain:用来处理Action链。lchart:用来整合JFreeChart的结果类型。ldispat

18、cher:用来转向页面,通常处理JSP,该类型也为默认类型。lfreemarker:处理FreeMarker模板。lhttpheader:控制特殊HTTP行为的结果类型。ljasper:用于JasperReports整合的结果类型。ljsf:JSF整合的结果类型。lredirect:重定向到一个URL。lredirect-action:重定向到一个Action。lstream:向浏览器发送InputStream对象,通常用来处理文件下载,还可用于返回AJAX数据。ltiles:与Tiles整合的结果类型。lvelocity:处理Velocity模板。lxslt:处理XML/XLST模板。lpl

19、aintext:显示原始文件内容,如文件源代码。3.2.2 Struts 2工作流程及各种文件详解edirect-action类型用于当一个Action处理结束后,直接将请求重定向到另一个Action。如下列配置:/welcome.jsp/hello.jspstruts3.2.2 Struts 2工作流程及各种文件详解(6)ActionSupport类ActionSupport类为Action提供了一些默认实现,主要包括预定义常量、从资源文件中读取文本资源、接收验证错误信息和验证的默认实现。下面是ActionSupport类所实现的接口:public class ActionSupport i

20、mplements Action,Validateable,ValidationAware,TextProvider,LocaleProvider,Serializable Action接口同样位于包,定义了一些常量和一个execute()方法。public interface Action public static final String SUCCESS=success;public static final String NONE=none;public static final String ERROR=error;public static final String INPUT=i

21、nput;public static final String LOGIN=login;public String execute()throws Exception;3.2.2 Struts 2工作流程及各种文件详解由于节的例子中继承了ActionSupport类,所以可以看出,在execute的返回值中,其代码可以改为:publicStringexecute()throwsExceptionif(!name.equals(HelloWorld)Maprequest=(Map)ActionContext.getContext().get(request);request.put(name,g

22、etName();returnSUCCESS;elsereturnERROR;3.2.3 Struts 2数据验证及验证框架的应用1.数据校验数据校验下面来看其实现,可以把节的例子中的Action类改写成。如果执行该方法之后,Action类的fieldErrors中已经包含了数据校验错误信息,将把请求转发到input逻辑视图处,所以要在Action配置中加入以下代码:/welcome.jsp/hello.jsp/hello.jsp/result3.2.3 Struts 2数据验证及验证框架的应用把JSP页面改写一下(标签的具体应用会在3.3节具体讲解):struts 2 3.2.3 Strut

23、s 2数据验证及验证框架的应用修改之后,部署运行。不输入任何姓名直接提交,将会看到如图3.5所示的界面。图3.5校验结果3.2.3 Struts 2数据验证及验证框架的应用2.Struts 2验证框架的应用验证框架的应用Struts 2提供了校验框架,只需要增加一个校验配置文件,就可以完成对数据的校验。Struts 2提供了大量的数据校验器,包括表单域校验器和非表单域校验器两种。(1)必填字符串校验器其校验规则定义文件如下:true姓名是必需的!3.2.3 Struts 2数据验证及验证框架的应用下面具体介绍其他校验框架的应用。(2)必填校验器该校验器的名字是required,也就是属性中的t

24、ype=required,该校验器要求指定的字段必须有值,与必填字符串校验器最大的区别就是可以有空字符串。如果把上例改为必填校验器,其代码应为:姓名是必需的!3.2.3 Struts 2数据验证及验证框架的应用(3)整数校验器该校验器的名字是int,该校验器要求字段的整数值必须在指定范围内,故其有min和max参数。如果有个age输入框,要求其必须是整数,且输入值必须在18与100之间,该校验器的配置应该为:18100年龄必须在18至100之间3.2.3 Struts 2数据验证及验证框架的应用(4)日期校验器该校验器的名字是date,该校验器要求字段的日期值必须在指定范围内,故其有min和m

25、ax参数。其配置格式如下:1980-01-012009-12-31日期必须在1980-01-01至2009-12-31之间3.2.3 Struts 2数据验证及验证框架的应用(5)邮件地址校验器该校验器的名称是email,该校验器要求字段的字符如果非空,就必须是合法的邮件地址。如下面的代码:必须输入有效的电子邮件地址3.2.3 Struts 2数据验证及验证框架的应用(6)网址校验器该校验器的名称是url,该校验器要求字段的字符如果非空,就必须是合法的URL地址。如下面的代码:必须输入有效的网址 3.2.3 Struts 2数据验证及验证框架的应用(7)字符串长度校验器该校验器的名称是stri

26、nglength,该校验器要求字段的长度必须在指定的范围内,一般用于密码输入框。如下面的代码:620密码长度必须在6到20之间3.2.3 Struts 2数据验证及验证框架的应用(8)正则表达式校验器该校验器的名称是regex,它检查被校验字段是否匹配一个正则表达式。如下面的代码:学号必须是6位的数字 3.3 Struts 2标签库应用3.3.1 Struts 2的的OGNL表达式表达式在介绍标签库前,有必要先来学习Struts2的OGNL表达式。1.OGNL表达式表达式OGNL表达式是Struts2框架的特点之一。标准的OGNL会设定一个根对象(root对象)。假设使用标准OGNL表达式来求

27、值(不是Struts2OGNL),如果OGNL上下文有两个对象foo对象和bar对象,同时foo对象被设置为根对象(root),则利用下面的OGNL表达式求值。#foo.blah/返回foo.getBlah()#bar.blah/返回bar.getBlah()blah/返回foo.getBlah(),因为foo为根对象3.3.1 Struts 2的OGNL表达式在Struts2框架中,值栈(ValueStack)就是OGNL的根对象。假设值栈中存在两个对象实例Man和Animal,这两个对象实例都有一个name属性,Animal有一个species属性,Man有一个salary属性。假设Ani

28、mal在值栈的顶部,Man在Animal后面,如图3.6所示。图3.6一个包含了Animal和Man的值栈 3.3.1 Struts 2的OGNL表达式下面的代码片段能更好地理解OGNL表达式。species /调用animal.getSpecies()salary /调用man.getSalary()name /调用animal.getName(),因为Animal位于值栈的顶部最后一行实例代码返回的是animal.getName()返回值,即返回了Animal的name属性,因为Animal是值栈的顶部元素,OGNL将从顶部元素搜索,所以会返回Animal的name属性值。如果要获得Man

29、的name值,则需要如下代码:man.nameStruts 2允许在值栈中使用索引,实例代码如下:0.name /调用animal.getName()1.name /调用man.getName()3.3.1 Struts 2的OGNL表达式Struts2中的OGNLContext是ActionContext,如图3.7所示。图3.7Struts2的OGNLContext结构示意图3.3.1 Struts 2的OGNL表达式由于值栈是Struts 2中OGNL的根对象。如果用户需要访问值栈中的对象,则可以通过如下代码访问值栈中的属性:$foo /获得值栈中的foo属性如果访问其他Context中

30、的对象,由于不是根对象,在访问时需要加#前缀。lapplication对象:用来访问ServletContext,如#application.userName或者#application userName,相当于调用Servlet的getAttribute(userName)。lsession对象:用来访问HttpSession,如#session.userName或者#sessionuserName,相当于调用session.getAttribute(userName)。lrequest对象:用来访问HttpServletRequest属性的Map,如#request.userName或者#

31、requestuserName,相当于调用request.getAttribute(userName)。如在节中StrutsAction类中代码:Map request=(Map)ActionContext.getContext().get(request);request.put(name,getName();这就是先得到request对象,然后把值放进去,在该例的success.jsp中有:其中#request.name相当于调用了request.getAttribute(name)。3.3.1 Struts 2的OGNL表达式2.OGNL集合操作集合操作使用如下代码直接生成一个List对

32、象:e1,e2,e3下面的代码可以直接生成一个Map对象:#key:value1,key2:value2,对于集合类型,OGNL表达式可以使用in和notin两个元素符号。其中,in表达式用来判断某个元素是否在指定的集合对象中;notin判断某个元素是否不在指定的集合对象中,代码如下所示:或3.3.1 Struts 2的OGNL表达式除了in和not in之外,OGNL还允许使用某个规则获得集合对象的子集,常用的有以下3个相关操作符。?:获得所有符合逻辑的元素。:获得符合逻辑的第一个元素。$:获得符合逻辑的最后一个元素。如下面的代码:Person.relatives.?#this.gender

33、=male该代码可以获得Person的所有性别为male的relatives集合。3.3.2 数据标签数据标签属于非UI标签,主要用于提供各种数据访问相关的功能,数据标签主要包括以下几个。lproperty:用于输出某个值。lset:用于设置一个新变量。lparam:用于设置参数,通常用于bean标签和action标签的子标签。lbean:用于创建一个JavaBean实例。laction:用于在JSP页面直接调用一个Action。ldate:用于格式化输出一个日期。ldebug:用于在页面上生成一个调试链接,当单击该链接时,可以看到当前值栈和Stack Context中的内容。lil8n:用于

34、指定国际化资源文件的baseName。linclude:用于在JSP页面中包含其他的JSP或Servlet资源。lpush:用于将某个值放入值栈的栈顶。ltext:用于输出国际化(国际化内容会在后面讲解)。lurl:用于生成一个URL地址。3.3.2 数据标签1.标签标签lproperty标签的作用是输出指定值。property标签输出value属性指定的值。如果没有指定的value属性,则默认输出值栈栈顶的值。该标签有如下几个属性:ldefault:该属性是可选的,如果需要输出的属性值为null,则显示default属性指定的值。lescape:该属性是可选的,指定是否escape HTML

35、代码。lvalue:该属性是可选的,指定需要输出的属性值,如果没有指定该属性,则默认输出值栈栈顶的值。该属性也是最常用的,如前面用到的:lid:该属性是可选的,指定该元素的标志。3.3.2 数据标签2.标签标签该标签有如下几个属性:lname:该属性是必选的,重新生成新变量的名字。lscope:该属性是可选的,指定新变量的存放范围。lid:该属性是可选的,指定该元素的引用id。下面是一个简单例子,展示了property标签访问存储于session中的user对象的多个字段:使用set标签使得代码易于阅读:3.3.2 数据标签3.标签标签param标签主要用于为其他标签提供参数,该标签有如下几个

36、属性:lname:该属性是可选的,指定需要设置参数的参数名。lvalue:该属性是可选的,指定需要设置参数的参数值。lid:该属性是可选的,指定引用该元素的id。例如,要为name为fruit的参数赋值:apple或者如果想指定fruit参数的值为apple字符串,则应该这样写:3.3.2 数据标签4.标签标签该标签有如下几个属性:lname:该属性是必选的,用来指定要实例化的JavaBean的实现类。lid:该属性是可选的,如果指定了该属性,则该JavaBean实例会被放入Stack Context中,从而允许直接通过id属性来访问该JavaBean实例。下面是一个简单的例子:有一个Stud

37、ent类,该类中有name属性,并有其getter和setter方法:public class Student private String name;public String getName()return name;public void setName(String name)this.name=name;然后在JSP文件的body体中加入下面的代码:3.3.2 数据标签在项目中导入Struts2的5个重要Jar包,再把Student类放在项目的src文件夹下,标签内容放在一个JSP文件的body体内,再修改web.xml文件,就可以部署运行该项目,会得到如图3.8所示的界面。图3.8

38、bean标签实例界面如果把bean标签的内容改为:3.3.2 数据标签5.标签标签使用action标签可以允许在JSP页面中直接调用Action。该标签有以下几个属性:lid:该属性是可选的,该属性将会作为该Action的引用标志id。lname:该属性是必选的,指定该标签调用哪个Action。lnamespace:该属性是可选的,指定该标签调用的Action所在的namespace。lexecuteResult:该属性是可选的,指定是否要将Action的处理结果页面包含到本页面。如果值为true,就是包含,false就是不包含,默认为false。lignoreContextParam:该属性

39、是可选的,指定该页面中的请求参数是否需要传入调用的Action。如果值为false,将本页面的请求参数传入被调用的Action。如为true,不将本页面的请求参数传入到被调用的Action。3.3.2 数据标签6.标签标签date标签主要用于格式化输出一个日期。该标签有如下属性:lformat:该属性是可选的,如果指定了该属性,将根据该属性指定的格式来格式化日期。lnice:该属性是可选的,该属性的取值只能是true或false,用于指定是否输出指定日期和当前时刻之间的时差。默认为false,即不输出时差。lname:属性是必选的,指定要格式化的日期值。lid:属性是可选的,指定引用该元素的i

40、d值。lnice属性为true时,一般不指定format属性。因为nice为true时,会输出当前时刻与指定日期的时差,不会输出指定日期。当没有指定format,也没有指定nice=true时,系统会采用默认格式输出。其用法为:3.3.2 数据标签7.标签标签include标签用于将一个JSP页面或一个Servlet包含到本页面中。该标签有如下属性:lvalue:该属性是必选的,指定需要被包含的JSP页面或Servlet。lid:该属性是可选的,指定该标签的id引用。用法如下:3.3.3 控制标签控制标签有以下几个:lif:用于控制选择输出的标签。lelseif:用于控制选择输出的标签,必须和

41、if标签结合使用。lelse:用户控制选择输出的标签,必须和if标签结合使用。lappend:用于将多个集合拼接成一个新的集合。lgenerator:用于将一个字符串按指定的分隔符分隔成多个字符串,临时生成的多个子字符串可以使用iterator标签来迭代输出。literator:用于将集合迭代输出。lmerge:用于将多个集合拼接成一个新的集合,但与append的拼接方式不同。lsort:用于对集合进行排序。lsubset:用于截取集合的部分元素,形成新的子集合。3.3.3 控制标签1./标签标签这3个标签可以组合使用,但只有if标签可以单独使用,而elseif和else标签必须与if标签结合

42、使用。if标签可以与多个elseif标签结合使用,但只能与一个else标签使用。其用法格式如下:标签体 标签体 .标签体3.3.3 控制标签2.标签标签该标签主要用于对集合进行迭代,这里的集合包含List、Set,也可以对Map类型的对象进行迭代输出。该标签的属性如下:lvalue:该属性是可选的,指定被迭代的集合,被迭代的集合通常都由OGNL表达式指定。如果没有指定该属性,则使用值栈栈顶的集合。lid:该属性是可选的,指定集合元素的id。lstatus:该属性是可选的,指定迭代时的IteratorStatus实例,通过该实例可判断当前迭代元素的属性。如果指定该属性,其实例包含如下几个方法:i

43、nt getCount():返回当前迭代了几个元素。int getIndex():返回当前被迭代元素的索引。boolean isEven:返回当前被迭代元素的索引元素是否是偶数。boolean isOdd:返回当前被迭代元素的索引元素是否是奇数。boolean isFirst:返回当前被迭代元素是否是第一个元素。boolean isLast:返回当前被迭代元素是否是最后一个元素。3.3.3 控制标签应用举例:控制标签trstyle=background-color:silver3.3.3 控制标签通过添加Struts 2必须的Jar包,再建立上面JSP文件,修改web.xml后,就可以部署运行

44、,运行结果如图3.9所示。图3.9iterator标签实例运行结果3.3.3 控制标签3.标签标签应用举例,可以把上例的JSP文件进行修改,其代码为:控制标签 tr style=background-color:silver 3.3.3 控制标签部署运行,运行结果如图3.10所示。图3.10append标签实例运行界面3.3.3 控制标签4标签标签假设有2个集合,第一个集合包含3个元素,第二个集合包含2个元素,分别用append标签和merge标签方式进行拼接,它们产生新集合的方式有所区别。下面分别列出:用append方式拼接,新集合元素顺序为:l第1个集合中的第1个元素l第1个集合中的第2个

45、元素l第1个集合中的第3个元素l第2个集合中的第1个元素l第2个集合中的第2个元素用merge方式拼接,新集合元素顺序为:l第1个集合中的第1个元素l第2个集合中的第1个元素l第1个集合中的第2个元素l第2个集合中的第2个元素l第1个集合中的第3个元素3.3.4 表单标签大部分的表单标签和HTML表单元素是一一对应的关系,如下面的代码片段:对应着:对应着:用户名:对应着:密码:还有下面这种情况,如果有这样一个JavaBean类,类名为“User”,该类中有两个属性:一个是username;另一个是password,并分别生成它们的getter和setter方法,在JSP页面的表单中可以这样为表

46、单元素命名:3.3.4 表单标签1.标签标签该标签需要指定一个list属性。用法举例:或者为:这两种方式的区别:前一种根据name取值时取的是选中字符串的值;后一种在页面上显示的是value的值,而根据name取值时取的却是对应的key,这里就是1、2、3或4。2.标签标签combobox标签生成一个单行文本框和下拉列表框的组合。两个表单元素只能对应一个请求参数,只有单行文本框里的值才包含请求参数,下拉列表框只是用于辅助输入,并没有name属性,故不会产生请求参数。用法举例:3.3.4 表单标签3.标签标签datetimepicker标签用于生成一个日期、时间下拉列表框。当使用该日期、时间列表

47、框选择某个日期、时间时,系统会自动将选中日期、时间输出指定文本框中。用法举例:4.标签标签select标签用于生成一个下拉列表框,通过为该元素指定list属性的值,来生成下拉列表框的选项。用法举例:或者为:3.3.4 表单标签5.标签标签radio标签的用法与checkboxlist用法很相似,唯一的区别就是checkboxlist生成的是复选框,而radio生成的是单选框。用法举例:或者为:6.标签标签head标签主要用于生成HTML页面的head部分。在介绍标签时说过,要在head中加入该标签,主要原因是标签中有一个日历小控件,其中包含了JavaScript代码,所以要在head部分加入该

48、标签。3.3.5 非表单标签非表单标签主要用于在页面中生成一些非表单的可视化元素。这些标签不经常用到,下面大致介绍一下这些标签:la:生成超链接。lactionerror:输出Action实例的getActionMessage()方法返回的消息。lcomponent:生成一个自定义组件。ldiv:生成一个div片段。lfielderror:输出表单域的类型转换错误、校验错误提示。ltablePanel:生成HTML页面的Tab页。ltree:生成一个树形结构。ltreenode:生成树形结构的节点。3.4 Struts 2拦截器3.4.1 拦截器配置拦截器配置定义拦截器使用元素。其格式为:只要

49、在与之间配置子元素即可传入相应的参数。其格式如下:参数值.通常情况下,一个Action要配置不仅一个拦截器,往往多个拦截器一起使用来进行过滤。这时就会把需要配置的几个拦截器组成一个拦截器栈。定义拦截器栈用元素,由于拦截器栈是由各拦截器组合而成的,所以需要在该元素下面配置子元素来对拦截器进行引用。其格式如下:3.4.1 拦截器下面是默认拦截器的配置方法:3.4.2 拦截器实现类Struts2提供了一些接口或类供程序员自定义拦截器。如Struts2提供了接口,程序员只要实现该接口就可完成拦截器实现类。该接口的代码如下:importjava.io.Serializable;importcom.ope

50、nsymphony.xwork2.ActionInvocation;publicinterfaceInterceptorextendsSerializablevoidinit();Stringintercept(ActionInvocationinvocation)throwsException;voiddestroy();该接口中有三个方法:linit():该方法在拦截器被实例化之后、拦截器执行之前调用。lintercept(ActionInvocationinvocation):该方法用于实现拦截的动作。ldestroy():该方法与init()方法对应,拦截器实例被销毁之前调用,用于销毁

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁