struts2

1,Struts2颠覆了web编程的传统,Action中完全去掉了request,response等Servlet API,并自动完成数据转换,赋值。

JSP提交的数据全部是String类型的。Struts2也是通过request.getParameter(name)获取到String类型数据,并通过拦截器将String转换各种常用的数据类型,如Date,Time,Timestamp等,然后通过getter、setter方法设置到Action对应的属性上。

Struts2默认的转换器并不是总满足需求。例如,输入时间,Struts2只能转换形如12:00:00的格式,而输入12:00就会抛错。也有一些数据类型struts2转换不了

数据类型转换器都需要实现ognl.TypeConverter接口。一般地,直接集成DefaultTypeConverter类,并实现convertValue()方法就可以了。

DefaultTypeConverter是位于ognl包下的,是ognl开源标准中的一部分。从此可以看出Struts2中集成了许多其他的技术。

转化器需要配置到xwork-conversion.properties中。"xwork-conversion.properties"是又一个struts2的配置文件,只是名字还保留着webwork的特征。同其他配置文件一样放在/WEB-INF/classes/下。Properties属性对的key为需要转化的类型,value为转换器的类名。

xwork-conversion.properties

java.sql.Date=com.helloweenvsfei.struts2.convertor.DateTimeConvertor

该配置对所有Action都生效。另外,转换器还可配置只对某个Action生效。

除了在xwork-conversion.properties中,转换器还可以配置在struts.xml的Action中。这时候,转换器将只作用于当前的Action,而不是所有的Action.配置代码如下:

<action name="convertor" class="com.action.ConvertorAction" converter="com.struts2.convertor.DateTimeConvertor">

<result name="input">/convertor.jsp</result>

<result name="success">/convertorSuccess.jsp</result>

</action>

2,ServletActionContext的静态方法

struts2利用ServletActionContext类用来维护Servlet对象,把Servlet对象放到了ServletActionContext中,例如request,response,application,Session等。

ServletActionContext利用ThreadLocal来维护不同县城的Servlet对象,因此可以使用ServeltActionContext类获取到。这种方式也可以叫做非注射方式(非IOC方式)

HttpServletRequest request=ServletActionContext.getRequest();

HttpServletResponse response=ServletActionContext.getResponse();

HttpSession session=request.getSession(true);

session.setAttribute("account",account);

ServletContext contest=ServletActionContext.GetServletContext();

虽然是使用静态方法获取的request,response,仍然能保证获取的当前用户,当前线程的request,response,不会发生混淆,因为Struts2利用ThreadLocal来维护当前线程的request,response等数据。

3Aware接口

实现了相关Aware接口的Action能够感知相应的资源。Struts在实例化一个Action实例时,如果发现它实现了相应的Aware接口,会把相应的资源通过Aware接口方法注射进去。这种方式也可以叫做注射方式(IOC方式)

Servlet API中常用对象application,request,response,Session对应的Aware接口分别为ServletContextAware,ServletRequestAware,ServletResponseAware,SessionAware.

4,使用Validator校验数据。

struts2提供数据校验,这种数据校验是配置式的,既可以用XML配置,也可以用Java注解配置,Struts2提供了许多默认的校验器,例如,数字校验器,电子邮件校验器等,配置一下即可以使用。

1,使用XML配置时,需要在Action类所在的package内添加一个XML文件,文件名格式为Action类名-Validation.xml或者Action类名-Action别名-validation.xml

如果action中有多个方法,一般使用后者。例如BookAction-addBook-validation.xml等。支持校验的Validateable接口,一般集成ActionSupport就可以了。

2,例如,下面对addBook.action进行校验,首先将BookAction继承ActionSupport以支持校验。校验配置XML,文件名应为BookAction-addBook-validation.xml,位置与BookAction.class位于同一个包下,添加书籍时,书籍名称与作者必须填写,如果填写了日期,日期格式必须正确,并位于指定的格式内。校验配置代码如下:

<validators>

<field name="book.name">

<field-validator type="requiredstring"><!--必须得>

<param name="trim">true</param><!--检查时去掉前后空格-->

<message>请输入书籍名称</message><!--提示信息-->

</field>

<field name="book.publisheDate">

<field-validator type="date">

<param name="min">1900-01-01</param>

<param name="max">2200-01-01</param>

<message>日期必须位于----</message>

 

</validators>

配置完毕后,不需要更改任何的JSP代码。Struts2的表单标签支持校验错误信息显示。

以上是在服务器端完成的。Struts2也支持客户端javaScript校验。再将JSP的<struts:form>标签添加validate="true"属性即可

5,struts2标签库

Struts2标签库主要使用OGNL语言,除此之外还可以使用Groovy与Velcity等,Groovy是一种动态的脚本语言,类似于Python,Ruby和Smarttalk,是Apache的一个子项目,是一种模板引擎。

Struts2支持EL表达式

struts 2的标签都统一包括在struts-tags.tld文件中(位于struts2-core-2.0.jar的META-INF文件夹下),都使用统一的前缀

struts2标签大致分为控制标签、数据标签、表单UI标签、非表单UI标签。

 6,OGNL(Object-Graph Navigation Language)是一种操作对象属性的开源表达式语言。

OGNL优点:

1,能够访问对象的方法,list.size();

2,能够访问静态属性与静态方法,方法是在类名前加上、方法前@,如@java.lang.Math@PI,

3,支持赋值操作和表达式串联;如赋值#value=5;

4,访问OGNL上下文(OGNL context)和ActionContext(所有的Servlet资源);

5,操作集合类对象。

OGNL有三个符号:#、%与$

1,#:三种用途

能够访问OGNL上下文与ActionContext资源,相当于ActionContext.getContext();

#parameters代表request提交的所有参数,#parameters.id返回的是String[]类型,相当于JSP中的request.getParameterValues("id")。一般使用#parameters.id[0]第一个id的值,parameters.id[1]第二个id的值。

#request代表request里的所有属性#request.account相当于JSP中的request.getAttribute("account");

#session代表session里所有的属性#session.account相当于JSP中的session.getAttribute("account");

application。。。。。。,

#attr代表request或session或application的所有属性#attr.account相当于EL表达式中的${account},一次查request、session、application的属性,找到为止。

2,用于过滤或筛选集合,例如:books.{?#this.price<20},表示所有的price<20的书。

3,构造Map,如#{'fool':'bar','fooo2':'bar2'}。

 

%显式声明OGNL:

%用于表示某字符串为一个OGNL表达式。某些标签中既能接受字符串,又能接受OGNL表达式。这时候,标有%的被当做OGNL表达式被执行,没有的被当做普通的字符串,

<struts:label label="#request.account"></struts:label>

<struts:label label="%{#request.account}"></struts:label>

第一行代码会输出字符串#request.account,而第二行代码会输出request的account属性值。

$在资源文件中引用OGNL表达式

$主要用于在资源国际化文件中或者struts.xml中引用OGNL表达式,

Resources.properties

validation.require=${getText(fileName)} is required

 

struts.xml

<action name="AddPhoto" class="addPhoto">配置Action

<result type="redirect">ListPhotos.action? albumId=${albumId}</result>

</action>

if elseif else 标签控制流程

<struts:if test="#parameters.name[0]=='Kurt'">

append标签连接多个List

append标签用于将多个List连成一个List,相当于Java中的list1.addAll(list2),

 

 <s:append id="myAppendList"><!--在myAppendList后面追加数据-->

<s:param value="%{maleList}"/><!--追加maleList-->

<s:param value="%{femaleList}"/><!--追加femaleList-->

 </s:append>

generator标签将字符转化为List

generator标签用于将字符串转化为list,相当于Java中的split

<s:gernerator val="%{'李宁,安踏,双星,阿达,耐克'}" separator=",">

<s:iterator>

<s:property>

<br/>

</s:iterator>

</s:generator>

 

iterator 标签便利集合

iterator 标签用于便利结合(包括List、Set、Map),数组等。

可以使用OGNL表达式对数据进行过滤。例如只便利价格大于18的对象

<struts:iterator value="magazineList.{?#this.price>18}"输出价格大于18的对象

merge标签取集合的并集,类似于append标签,将两个list连接成一个List。他们用法完全一致。

不同的是,appand标签是先添加maleList中的所有元素,后添加femaleList的所有元素,后添加femaleList的所有元素。而merge标签是先添加maleList的第一个元素,再添加femaleList的第一个元素;再添加maleList的第二个元素,总是依次添加,添加的次序不一样。

subset标签过滤集合元素

subset标签用于筛选即合里元素。它使用一个Filter,将不合格的元素过滤掉,剩下原集合的一个子集

<s:subset source="maleList" decider="decider">筛选标签

<s:iterator>遍历筛选后的结果

<s:property/>

</s:iterator>

</s:subset>

maleList是action中的集合属性,decider是Action中的Filter属性。decider必须实现SubsetIteratorFilter.Decider接口以及decide()方法。

数据标签包括JavaBean相关标签、资源国际化标签等。

action标签用于访问某个Action,并将结果包含进来,相当于JSP中的include,参数ignoreContextParams表示是否将本页面的参数传给被调用的Action

<s:action name="login" executeResult="true" ignoreContextParams="false"/>当前页面的参数会被传到Action中

bean标签引用JavaBean

bean标签用于引用某个JavaBean,一遍访问其getter、setter方法

<struts:bean name="com.struts2.bean.Magazine" id="magazine">

<struts:param name="name" value="%{'瑞丽杂志'}"/>通过setter方法把字符串set到name属性上

<struts:property value="name"/>调用name属性的getter方法输出属性的值

</struts:bean>

date标签输出日期

date标签用于格式化时间输出,属性format设置时间格式字符串,farmat支持JDK中的日期格式。

date标签还有一个nice属性,默认为false。如果nice属性为true,会输出形如20days,6hours ago等的时间格式。nice属性为true时format属性不起作用。

<struts:date name="date" format="yyyy/MM-dd"/>格式化日期

<struts:date name="date"/>默认日期格式

<struts:date name="date" nice="true"/> 输出nice格式

include 标签包含JSP页面

include标签用于包含一个JSP页面,将JSP的执行结果包含到本页面内,相当于JSP行为里的<jsp:include/>

<struts:include value="/login.jsp"></struts:include>

param标签用于给其他标签传递参数

<struts:bean name="java.util.Date" id="date">

<struts:param name="time" value="#date.time-70*343"></struts:param>

</struts:bean>

set标签用于定义一个变量,并设置变量的值

<s:set name="technologyName" value="%{'Java'}"/>

<s:set name="account" value="%{#parameters.account[0]}"/>

property标签输出变量值

property标签用于输出一个变量或者变量的属性。也可以直接输出当前Action的属性

<s:property value="account"/>

<s:property value="#parameters.account[0]"

 非表单UI标签

非表单UI标签只用于显示一些信息,而不会向Action提交数据。非表单UI标签中一部分DOJO提供的Ajax控件,例如数、标签页等。

debug标签输出调试信息

debug标签用于显示服务器、Action的信息,一般调试程序时使用

<struts:debug/>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/zrfmmhy/p/3504400.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值