第2章Struts2核心组件详解_第1页
第2章Struts2核心组件详解_第2页
第2章Struts2核心组件详解_第3页
第2章Struts2核心组件详解_第4页
第2章Struts2核心组件详解_第5页
已阅读5页,还剩176页未读 继续免费阅读

下载本文档

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

文档简介

第2章Struts2核心组件详解,1,第2章Struts2核心组件详解,2.1Struts2的struts.xml配置文件2.2Struts2的核心控制器FilterDispatcher2.3Struts2的业务控制器Action2.4Struts2的OGNL表达式2.5Struts2的标签库,2,2.1Struts2的struts.xml配置文件,2.1.1struts.xml配置文件结构2.1.2Bean配置2.1.3常量配置2.1.4包含配置2.1.5包配置2.1.6命名空间配置2.1.7Action配置2.1.8结果配置2.1.9拦截器配置,3,2.1.1struts.xml配置文件结构,Struts2的核心配置文件是struts.xml,struts.xml具有重要的作用,所有用户请求被Struts2核心控制器FilterDispatcher拦截,然后通过查询配置文件struts.xml中由哪个Action处理。Struts2框架有两种配置文件:struts.xml和perties,一般建议使用struts.xml。,4,配置struts.xml文件自动弹出提示的操作,1)电脑能上网就行2)在elipse中打开window-Preferences-XML-XMLcatalogKeyType选择PublicID;Key则填入xml文档头部跳转或者设置表单的action属性/test/login如果是如下设置则不能获取request信息/main.jsp,61,2.3Struts2的业务控制器Action,2.3.1Action接口和ActionSupport类2.3.2Action实现类2.3.3Action访问ActionContext2.3.4Action直接访问ServletAPI2.3.5Action中的动态方法调用,62,2.3.4Action直接访问ServletAPI,Struts2中直接访问ServletAPI有IoC方式和非IoC方式。在Web应用中,需要访问的ServletAPI就是HttpServletRequest、HttpSession和ServletContext,这3个类包含了JSP内置对象中所对应的request、session和application对象。,63,2.3.4Action直接访问ServletAPI,IoC方式访问ServletAPI,Action必须实现一些接口。非IoC方式访问ServletAPI是使用Struts2提供的辅助类来访问ServletAPI,在Action直接访问ServletAPI中提供的辅助类是ServletActionContext。,64,实例:struts5,在action(java类)中实现相应接口,然后Struts框架运行时注入request,session和application和response对象IOC方式/main.jspP51-52,65,实例:struts5,在action(java类)中通过ServletActionContext类的静态方法先得到request,session和application对象,接着往这些对象里设置信息,然后在jsp文件中获取这些信息非IOC方式/main.jspP53-54,66,小结,比较以上介绍的三种方式注意:后两种方式实际上都先获得了request、session等对象,因此在使用eclipse开发时,要在libraries添加tomcat运行环境,具体操作如下:加了tomcat运行环境后,还可解决在jsp文件中输入对象名无提示的问题。,67,68,69,实例:struts6,登陆实例,70,2.3Struts2的业务控制器Action,2.3.1Action接口和ActionSupport类2.3.2Action实现类2.3.3Action访问ActionContext2.3.4Action直接访问ServletAPI2.3.5Action中的动态方法调用,71,第2章Struts2核心组件详解,2.1Struts2的struts.xml配置文件2.2Struts2的核心控制器FilterDispatcher2.3Struts2的业务控制器Action2.4Struts2的OGNL表达式2.5Struts2的标签库,72,2.4Struts2的OGNL表达式,2.4.1Struts2的OGNL表达式2.4.2Struts2的OGNL集合,73,OGNL(Object-GraphNavigationLanguage,对象图导航语言),它是一种功能强大的表达式语言(ExpressionLanguage,简称为EL),通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,自动实现字段类型转化等功能。,74,2.4.1Struts2的OGNL表达式,OGNL有三个参数,表达式、根对象和上下文环境。表达式是OGNL的核心,所有的OGNL操作都是通过解析表达式后进行的。表达式指出了OGNL操作要做的工作。例如,name、等表达式,表示取name或者student中的name的值。根对象是OGNL要操作的对象,在表达式规定了要完成的工作后,需要指定工作的操作对象。例如,中,request就是对象,这个对象取出name属性的值。上下文环境是OGNL要操作的地点。如果使用OGNL需要访问的不是根对象,则需要使用名称空间,用“#”来表示;如果访问的是一个根元素,则不用使用名称空间,可以直接访问根对象的属性。在Struts2中堆值就是OGNL的根对象。获取堆值的属性可以使用$属性获取属性的值,如$name获取name的值。如果访问其他上下文路径中的对象,由于不是跟对象,在访问时需要加“#”前缀。,75,本实例使用OGNL表达式实现对注册页面数据的显示。下面是项目的开发步骤。1.项目介绍该项目有一个注册页面(register.jsp),代码如【例2-19】所示;注册页面对应的业务控制器OGNLAction类,代码如【例2-21】所示,如果注册后到注册成功页面registerSuccess.jsp页面,页面代码如【例2-20】所示,该页面中也使用了OGNL表达式。其中还需要配置web.xml,代码和1.3.1中【例1-3】相同;配置struts.xml配置文件,如【例2-22】所示。登录系统的文件结构如图2-9所示。,76,77,2.在web.xml中配置核心控制器FilterDispatcher参照1.3.1中的【例1-3】。,78,3.编写视图组件(JSP页面)注册页面如图2-10所示。代码如【例2-19】所示。登录成功页面,如【例2-20】所示。,79,【例2-19】注册页面(register.jsp)使用OGNL表达式获取数据学号:姓名:性别:年龄:,80,【例2-20】注册成功页面(registerSuccess.jsp)使用OGNL表达式获取数据,注册成功$name获取action属性:获取reqeust属性:获取session属性:获取application属性:,81,4.编写业务控制器Action业务控制器LoginRegisterAction是处理注册页面(register.jsp)的,代码如【例2-21】所示。【例2-21】注册页面对应的业务控制器(OGNLAction.java)packageognl;importcom.opensymphony.xwork2.ActionContext;importcom.opensymphony.xwork2.ActionSupport;importjava.util.Map;importjavax.servlet.http.HttpServletRequest;importorg.apache.struts2.ServletActionContext;publicclassOGNLActionextendsActionSupportprivateStringno;/学号privateStringname;/姓名privateStringsex;/性别privateintage;/年龄,82,publicStringgetNo()returnno;publicvoidsetNo(Stringno)this.no=no;publicStringgetName()returnname;publicvoidsetName(Stringname)=name;publicStringgetSex()returnsex;publicvoidsetSex(Stringsex)this.sex=sex;publicintgetAge()returnage;publicvoidsetAge(intage)this.age=age;,83,publicStringexecute()throwsException/获取request,并添加信息HttpServletRequestrequest=ServletActionContext.getRequest();request.setAttribute(name,getName();/获取session,并添加信息Mapsession=ActionContext.getContext().getSession();session.put(name,getName();/获取application,并添加信息Mapapplication=ActionContext.getContext().getApplication();application.put(name,getName();returnSUCCESS;,84,5.修改struts.xml配置Action配置struts.xml配置文件,如【例2-22】所示。【例2-22】在struts.xml中配置Action(struts.xml)/ognlExpression/registerSuccess.jsp,85,6.项目部署和运行运行后如图2-10所示,在图2-10输入数据后如图2-11所示,点击“注册”,出现如图2-12所示。,86,87,2.4Struts2的OGNL表达式,2.4.1Struts2的OGNL表达式2.4.2Struts2的OGNL集合,88,2.4.2Struts2的OGNL集合,OGNL提供了对Java集合API非常好的支持,创建集合并对其操作是OGNL的一个基本特性。如果需要一个集合元素时,如List对象或者Map对象,可以使用OGNL中同集合相关的表达式。OGNL中使用List对象格式如下:e1,e2,e3,该表达式会直接生成一个List对象,生成的List对象中包含3个元素:e1、e2、e3。如果需要更多元素,可以继续加元素。OGNL中使用Map对象格式如下:#key1:value1,key2:value2,key3:value3,该表达式会直接生成一个Map对象。,89,对于集合元素,OGNL表达式可以使用in和notin。in表达式用来判断某个元素是否在指定的集合对象中;notin用于判断某个元素是否不在指定的集合对象中。例如:或者,90,除了in和notin之外,OGNL还允许使用某些规则获取集合对象的子集,常用的相关操作有:?:用于获取多有符合逻辑的元素。:用于获取符合逻辑的第一个元素。$:用于获取符合逻辑的最后一个元素。例如:Student.sex?#this.sex=male/获取Student的所有male的sex集合,91,第2章Struts2核心组件详解,2.1Struts2的struts.xml配置文件2.2Struts2的核心控制器FilterDispatcher2.3Struts2的业务控制器Action2.4Struts2的OGNL表达式2.5Struts2的标签库,92,2.5Struts2的标签库,2.5.1Struts2标签库的概述2.5.2Struts2的表单标签2.5.3Struts2的非表单标签2.5.4Struts2的数据标签2.5.5Struts2的控制标签,93,2.5.1Struts2标签库的概述,Struts2框架提供了丰富的标签库用来构建视图组件。Struts2标签库大大简化视图页面的开发,并且提高了视图组件的可维护性。按照标签库提供的功能可以把Struts2标签库分为3大类:UI标签、非UI标签和Ajax标签。用户界面标签(UI标签):主要用来生成HTML元素的标签。非用户界面标签(非UI标签):主要用来数据访问、逻辑控制。Ajax标签:主要用来支持Ajax技术。,94,用户界面标签(UI标签)又可以分为如下两大类:表单标签:主要生成HTML中的表单信息。非表单标签:主要包含一些常用的功能标签,如显示日期或者树形菜单。非用户界面标签(非UI标签)又可以分为如下两大类:数据标签:主要用来数据存储与处理。控制标签:主要用来条件和循环流程控制。,95,96,2.5Struts2的标签库,2.5.1Struts2标签库的概述2.5.2Struts2的表单标签2.5.3Struts2的非表单标签2.5.4Struts2的数据标签2.5.5Struts2的控制标签,97,2.5.2Struts2的表单标签,Struts2中大部分表单标签和HTML表单元素一一对应。例如:对应着:对应着:用户名:对应着:密码:,98,1.标签checkbox标签是复选框标签,格式如下:常用属性:label:设置显示的字符串,可选项。name:设置表单元素的名字,表单元素的名字实际上封装着一个请求参数,而该请求参数是被Action封装到其中,当该表单对应的Action需要使用参数的值时,且对应的属性有值时,该值就是表单元素value的值。name属性是表单元素的通用属性,每个表单元素都会使用,必选项。value:该属性是对应的值,可选项。例如:,99,2.标签checkboxlist标签可以一次创建多个复选框,在HTML中可以使用多行实现。常用属性:list:指定集合为复选框命名,可以使用List集合或者Map对象,必选项。例如:,100,3.标签combobox标签生成一个单行文本框和一个下拉列表框的组合,两个表单元素对应一个请求,单行文本框中的值对应请求参数,下拉列表框只是起到辅助功能。常用属性:list:指定集合将生成的下拉列表项,可以使用List集合或者Map对象,必选项。readonly:指定文本框是否可编辑,为true不可编辑,为false可编辑,默认为false,可选项。,101,102,【例2-23】combobox标签的使用(combobox.jsp)combobox标签的使用,103,4.标签doubleselect标签生成一个相互关联的列表框,在第一个列表框中选择某一项后,那么第二个列表框中将自动为在第一个列表框选定项的相关信息。常用属性:headerValue:指定列表框默认值。headerKey:指定列表框默项的值。doubleName:指定第二个下拉列表框的名字。list:指定第一个下拉列表框中选项的集合。doubleList:指定第二个下拉列表框中的选项集合。top:指定是第一列表框。,104,105,【例2-24】doubleselect标签的使用(doubleselect.jsp),106,5.标签file标签用于在页面上生成一个上传文件的元素。上传文件的具体实现参考3.4。【例2-25】file标签的使用(file.jsp),107,108,6.标签select标签用来生成一个下拉列表框,通过指定list属性,系统会使用list属性指定的下拉列表内容。常用属性:size:指定下拉文本框中可以显示的选择项个数,可选项。multiple:设置该列表框是否允许多选,默认值为false,可选项。,109,6.标签select标签用来生成一个下拉列表框,通过指定list属性,系统会使用list属性指定的下拉列表内容。常用属性:size:指定下拉文本框中可以显示的选择项个数,可选项。multiple:设置该列表框是否允许多选,默认值为false,可选项。【例2-26】select标签的使用(select.jsp),110,7.标签radio标签为一个单选框,用法和checkboxlist标签相似。例如:,111,8.标签textarea标签用来生成一个文本区域,有行和列组成。例如:,112,9.标签token标签的目的是为了防止用户多次提交表单,避免恶意刷新页面。例如:,113,10.标签optiontransferselect标签用来创建两个选项以及转移下拉列表项,该标签会自动生成两个下拉列表框,同时生成相关的按钮,这些按钮可以控制选项在两个下拉列表之间的移动、排序。常用属性:addAllToLeftLabel:设置实现全部左移动功能的按钮上的文本。addAllToRightLabel:设置实现全部右移动功能的按钮上的文本。addToLeftLabel:设置实现左移动功能的按钮上的文本。addToRightLabel:设置实现右移动功能的按钮上的文本。addAddAllToLeft:设置全部左移动功能的按钮。addAddAllToRight:设置全部右移动功能的按钮。addAddToLeft:设置左移动功能的按钮。addAddToRight:设置右移动功能的按钮。leftTitle:设置左边列表框的标题。rightTitle:设置右边列表框的标题。allowSelectAll:设置全部选择功能的按钮。selectAllLabel:设置全部选择功能按钮上的文本。multiple:设置第一个列表框是否多选,默认是true。doubleName:设置第二个列表框的名字。doubleList:设置第二个列表框的集合。doubleMultiple:设置第二个列表框是否多选,默认是true。,114,115,【例2-27】optiontransferselect标签的使用(optiontransferselect.jsp)optiontransferselect标签的使用,116,11.标签updownselect标签用来在页面中生成一个下拉列表框,可以在选项内容上上下移动。常用属性:allowMoveUp:设置上移功能的按钮,默认值为true,即显示该按钮。allowMoveDown:设置下移功能的按钮,默认值为true,即显示该按钮。allowSelectAll:设置全选功能的按钮,默认值为true,即显示该按钮。MoveUpLabel:设置上移功能按钮上的文本,默认值为。MoveDownLabel:设置下移功能按钮上的文本,默认值为。selectAllLabel:设置全选功能按钮上的文本,默认值为*。,117,118,【例2-28】updownselect标签的使用(updownselect.jsp)updownselec标签的使用,119,2.5Struts2的标签库,2.5.1Struts2标签库的概述2.5.2Struts2的表单标签2.5.3Struts2的非表单标签2.5.4Struts2的数据标签2.5.5Struts2的控制标签,120,2.5.3Struts2的非表单标签,非表单标签主要用于在页面中生成非表单的可视化元素。,121,1.标签a标签主要用于超链接。例如:注册,122,2.和标签actionerror标签和actionmessage标签的作用基本一样,这两个标签都是在页面上输出Action中方法添加的信息。其中,actionerror标签输出Action中addActinErrors()方法添加的信息;而actionmessage标签标签输出的是Action中AddActionMessage()方法添加的信息。,123,publicclassActionErrorActionMessageextendsActionSupportpublicStringexecute()/使用addActionError()方法添加信息addActionError(使用ActionError添加错误信息!);addActionMessage(使用ActionMessage添加普通信息!);returnSUCCESS;,124,actionerror标签和actionmessage标签的使用,125,3.标签使用component标签可以自定义组件,当需要多次使用某些代码段是,就可以自定义一个组件在页面中使用component标签多次调用。该标签的主要属性有:theme属性:该属性用来指定自定义组件所使用的主题,默认值为xhtml。templateDir属性:该属性用来指定自定义组件使用的主题目录,默认值为template。template属性:该属性用来指定自定义组件所使用的模板文件,自定义模板文件可以采用JSP、FreeMarker和Velocity这3中技术编写代码。,126,在component标签内还可以使用param标签,通过param标签向模板标签中传递参数。首先编写一个模板文件(myTemplate.jsp)代码如【例2-32】所知。【例2-32】模板页面(myTemplate.jsp)自定义模板,127,编写完模板文件后,通过component标签使用模板文件,component标签的使用,如【例2-33】所示。【例2-33】使用component标签使用模板(component.jsp),128,2.5Struts2的标签库,2.5.1Struts2标签库的概述2.5.2Struts2的表单标签2.5.3Struts2的非表单标签2.5.4Struts2的数据标签2.5.5Struts2的控制标签,129,2.5.4Struts2的数据标签,Struts2中数据标签主要用于提供各种数据访问相关的功能,常用于显示Action中的属性以及国际化输出。,130,1.标签action标签用于在JSP页面中直接调用Action。常用属性:id:指定被调用Action的引用ID,可选项。name:指定Action的名字,必选项。namespace:指定被调用Action所在的namespace,可选项。executeResult:指定将Action处理结果包含到当前页面中,默认值为false,即不包含,可选项。ignoreContextParams:指定当前页面的数据是否需要传给被调用的Action,默认值为false,即默认将页面中的参数传给被调用Action,可选项。,131,2.标签bean标签是用于在在JSP页面中创建JavaBean实例。在创建JavaBean实例时,可以使用标签为JavaBean实例传入参数。常用属性:name:指定实例化JavaBean的实现类,必选项。id:为实例化对象指定id名称,可选项。,132,例如一个Student类,是一个JavaBean,代码如【例2-39】所示。【例2-39】Student类的JavaBean用于封装数据(Student.java)packagebeanTag;publicclassStudentprivateStringname;/姓名privateStringsex;/性别privateintage;/年龄setter和getter方法,133,【例2-40】访问bean的页面(beanTag.jsp)姓名:性别:年龄:,134,135,3.标签include标签用来在页面上包含一个JSP页面或者Servlet文件。例如:或者,136,4.标签param标签用来为其他标签提供参数,如include标签、bean标签等。,137,5.标签set标签用来定义一个新的变量,并把一个已有的变量值赋值给这个新变量,同时可把新变量放到指定的范围内,如session、application范围内。常用属性:name:指定新变量的名字,必选项。scope:指定新变量的使用范围,如action、page、request、response、session、application,可选项。value:为新标量赋值,可选项。id:指定应用的ID。,138,【例2-40】使用set标签设置新变量(setTag.jsp)scope属性值为action范围:scope属性值为session范围:,139,6.标签property标签用来输出value属性指定的值。值可以使用OGNL表达式操作。,140,7.标签url标签主要用来在页面中生成一个URL地址。常用属性:action:指定一个Action作为URL地址。method:指定使用Action的方法。id:指定该元素的应用ID。valu:用来指定生成URL的地址,如果不指定该属性,则使用action属性指定Action作为URL地址。encode:指定编码请求方法。names:指定名称空间。includeContext:指定指定是否将当前上下文包含在URL地址中,默认值为true。includeParams:指定是否包含请求参数,值有none、get、all,默认为get。,141,8.标签date标签用于格式化输出一个日期,还可以计算指定日期和当前时刻之间的时差。常用属性:format:使用日期格式化。nice:指定是否输出指定日期与当前时刻的时差,默认值为false,即不输出时差。name:指定要格式化的日期值。id:指定该元素的应用ID。var:指定格式化后的字符串将被放入StacContext中,该属性可以用id属性代替。,142,143,【例2-41】date标签的使用(dateTag.jsp)nice=false,且指定format=dd/MM/yyyynice=true,且指定format=dd/MM/yyyy指定nice=true,144,nice=false,且没有指定format属性nice=false,没有指定format属性,指定了var$requestScope.abc,145,2.5Struts2的标签库,2.5.1Struts2标签库的概述2.5.2Struts2的表单标签2.5.3Struts2的非表单标签2.5.4Struts2的数据标签2.5.5Struts2的控制标签,146,2.5.5Struts2的控制标签,控制标签主要用来完成流程的控制,如条件分支、循环操作,也可以实现对集合的排序和合并。,147,1.标签、标签和标签这3个标签是用来流程控制的与Java语言中的中的if、elseif、else语句相似。,148,【例2-42】控制标签的使用(ifTag.jsp)=90优秀=80良好=70中等=60及格不及格,149,150,2.标签iterator标签主要是对集合进行迭代操作,集合可以使List、Map、Set和数组。常用属性:id:指定集合元素的ID。value:指定迭代输出的集合,该集合可以是OGNL表达式,也可以通过Action返回一个集合类型。status:指定集合中元素的status属性。,151,【例2-43】iterator标签的使用(iteratorTag.jsp)iterator标签的使用,152,153,另外,iterator标签的statu属性,可以实现一些很有用的功能。指定status属性后,每次迭代都会产生一个IteratorStatus实例对象,该对象常用的方法有:intgetCount():返回当前迭代元素的个数。intgetIndex():返回当前迭代元素的索引值。booleanisEven():返回当前迭代元素的索引值是否为偶数。booleanisOdd():返回当前迭代元素的索引值是否为奇数。booleanisFirst():返回当前迭代元素的是否是第一个元素。booleanisLast():返回当前迭代元素的是否是最后一个元素。使用iterator标签的属性status时,其实例对象包含以上的方法,而且也包含的有对应的属性,如#status.count、#status.even、#status.odd、#status.first等。,154,【例2-44】iterator标签status属性的使用(iteratorTag1.jsp)iterator标签的使用style=background-color:red,155,156,3.标签append标签用来将多个集合对象连接起来,组成一个新的集合,从而允许通过一个iterator标签完成对多个集合的迭代。常用属性:id:指定连接生成的新集合的名字。,157,【例2-45】append标签的使用(appendTag.jsp)append标签的使用style=background-color:red,158,159,4.标签merge标签和append标签所实现的功能一样,也是将多个集合连接成一个新集合,但是在两个标签生成的新集合中,元素的排序方式有所不同。,160,【例2-46】merge标签和append标签比较(mergeTag.jsp)merge标签的使用,161,迭代输出由append标签产生的新集合迭代输出由merge标签产生的新集合,162,163,5.标签generator标签用来将一个字符串按指定的分隔符分割成多个子串,新生成的多个子字符串可以使用iterator标签进行迭代。常用属性:id:如果指定该属性,新生成的集合会放在pageContext属性中。val:指定被解析的字符串,必选项。count:指定所生成集合中元素的总数。separator:用来指定分隔符,必选项。converter:指定一个转换器,该转换器将集合中的每个字符串转换

温馨提示

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

评论

0/150

提交评论