文档库 最新最全的文档下载
当前位置:文档库 › Struts2 数据标签

Struts2 数据标签

Struts2 数据标签
Struts2 数据标签

3. Struts2 数据标签【DataTagLib】

数据标签主要用于提供各种数据访问相关的功能,包含显示一个Action里的属性,生成国际化输出等功能

property标签

property标签用于输出值栈中的对象的属性(property)值,使用value属性来指定要输出的对象属性,如果没有指定value属性,那么默认输出栈顶对象。

?属性:

–default:可选属性,如果需要输出属性值null,则显示default属性指定的值

–escape:可选属性,指定是否需要escape HTML代码;默认值为true

–value:可选属性,指定需要输出的属性值,如果没有指定则输出ValueStack栈顶值

Set标签

Set标签将一个值赋给指定范围内变量,且将一个已有的值复制给新变量,并且可以将新变量放到指定的范围内

?属性:

–scope:可选属性,指定变量范围,可以接受application、session、request、page或action(request范围,并且放入StackContext);默认值action

–value:可选属性,指定赋给变量的值;如果没有指定,则将ValueStack栈顶的值赋给新变量

–var:可选属性,如果指定了该属性,则会将该值放入ValueStack中

push标签

push标签用于把一个值压入值栈(位于栈顶),注意和set标签的区别,set标签是将值放到action上下文中。当push标签结束后,push标签放入值栈中的对象将被删除,换句话说,要访问push标签

压入栈中的对象,需要在标签内部去访问。

param标签

param标签被用作其他标签的子标签,用于为其他标签提供参数,例如:为bean标签和include标签提供参数。

?参数:

–name:可选属性,参数名;

–value:可选属性,参数值

?用法:

(1)blue

(2)//blue对象,不存在为null

//blue字符串

bean标签

?bean标签用于实例化一个JavaBean对象(必须遵照JavaBean规范),bean标签的标签体内可以

包含多个param标签,用于设置Bean的属性(必须有相应的setter方法)

?如果需要使用标签获取或传入JavaBean属性值应该为该JavaBean提供对应setter和

getter方法

?属性:

–name:必选属性,JavaBean的实现类

–var:必选属性,对象名

?注意:在bean标签体内,bean标签创建的对象位于ValueStack顶端,一旦该标签结束了,则

bean标签创建的对象被移除ValueStack,将无法再次访问,除非指定了var属性,则可通过

StackContext来访问该对象

action标签

使用action标签可以允许在JSP页面中直接调用Action,需要指定name及namespace;如果指定了executeResult参数的属性值为true,该标签还会把Action的处理结果包含到本页面中

?属性:

–var:可选属性,一旦定义该属性,该Action放入Stack Context中

–name:必选属性,决定调用哪个Action

–namespace:调用Aciton所在的namespace

–executeResult:可选属性,指定是否要将result包含到页面中;默认为false

–ignoreContextParams:可选属性,页面请求参数是否传入调用的Action;默认值为false

include标签

include标签用来在页面上包含一个JSP页面或者Servlet文件

?属性:

–value:必选属性,指定需要包含的JSP页面或Servlet

?通过多个子标签,将多个参数值传入被包含的JSP页面或者Servlet

date标签

date标签用于格式化输出一个日期,计算指定日期和当前时刻的时间差

?属性:

–format:可选属性,如果指定了该属性,根据属性指定的格式来格式化日期

–nice:可选属性,指定是否输出指定日期和当前时刻之间的差值;默认为false

–name:必选属性,指定格式化的日期值

–var:可选属性

?注意:nice属性和format属性不能同时指定;如果既指定了nice=“true”,也指定了format属性,

则会输出时间差

debug标签

主要用于辅助调试,它在页面上生成一个超链接,通过该链接可以查看到ValueStack和StackContext中所有的值信息

4.Struts2 表单标签【FormTagLib】

表单标签

?Struts的表单标签,可以分为两种:form标签本身和单个表单元素的标签

?所有表单标签处理类都继承了UIBean类,UIBean包含了一些通用属性,这些通用属性分为

三种:

?模板相关属性

–templateDir:指定表单所用的模板文件目录

–theme:指定该表单所用的主题

–template:指定表单所用的模板

Struts2提供了四种主题ajax, simple, css_xhtml,xhtml,它默认的是xhtml主题,开发时我们一般都选simple。这4个主题的模板文件放在Struts2的核心类库里(struts2-core.jar包)。

设置主题的方法有以下几种:

1.通过设定特定UI标签上的theme属性来指定主题。

2.通过设定特定UI标签外围的Form标签的theme属性来指定主题。

3.通过取得page会话范围内以theme为名称的属性来确定主题。

4.通过取得request会话范围内以theme为名称的属性来确定主题。

5.通过取得session会话范围内以theme为名称的属性来确定主题。

6.通过取得application会话范围内以theme为名称的属性来确定主题。

7.通过取得名为struts.ui.theme的常量(默认值是xhtml)来确定主题,该常量可以在struts.properties文件

或者struts.xml文件中确定。如:

上面介绍的几种指定UI标签主题的方式,它们的优先级也是按照上面的顺序来的。

Struts2的模板目录是通过struts.ui.templateDir常量来指定的,该常量的默认值是template,即意味着Struts2会从Web应用的template目录,CLASSPATH(包括Web应用的WEB-INF\classes路径和WEB-INF\lib路径)的template目录来依次加载特定模板文件。如果我们只使用一个select标签,且指定主题为xhtml,则加载模板文件的顺序为:

1,搜索Web应用里/template/xhtml/select.ftl文件

2,搜索CLASSPA TH路径下的template/xhtml/select.ftl文件

Struts2的模板文件是.ftl文件,它是FreeMarker的模板文件。用户也可以通过修改struts.ui.templateSuffix常量的值来改变Struts2默认的模板技术,该常量接受如下几个值:

ftl:基于FreeMarker的模板技术

vm:基于Velocity的模板技术

jsp:基于JSP的模板技术

?JavaScript相关属性

?通用属性

?Struts2中大部分表单标签和HTML表单元素一一对应。

?标签不仅生成

标记,还会生成标记

?对于表单标签而言,name和value属性之间存在一个特殊的关系:

–因为每个表单元素会被映射成Action属性,所以如果某个表单对应的Action已经被实例化(表单被提交)、且属性有值时,则该Action对应表单里的元素会显示出该属性的值,这个值作为表单标签的value

–name属性设置表单元素的名字,表单元素的名字实际上封装着一个请求参数,而请求参数是被封装到Action属性的

–所以在使用Struts2的标签库时,无须指定value属性,Struts2标签会自动处理

select标签

select标签用于生成一个下拉列表框,使用该标签必须指定list属性,系统会使用list属性指定的集合来生成下拉列表框的选项

?属性

?list:要迭代的集合,使用集合中的元素来设置各个选项,如果list的属性为Map则Map的key成为选项的value,Map的value会成为选项的内容

?listKey:指定集合对象中的哪个属性作为选项的value

?listValue:指定集合对象中的哪个属性作为选项的内容

?headerKey:设置当用户选择了header选项时提交的value,如果使用该属性,不能为该属性设置空值?headerValue:显示在页面中header选项内容

?emptyOption:是否在header选项后面添加一个空选项

?multiple:是否多选

?size:显示的选项个数

optgroup标签

optgroup标签用于生成一个下拉列表框的选项组

?该标签必须放在中使用

?一个下拉列表可以包含多个选项组

?使用optgroup标签时,一样需要指定list、listKey和listValue等属性

?optgroup标签可以指定label属性,而该label属性时选项组的组名

?浏览者无法选中选项组的label

updownselect标签

类似select标签,区别是该标签生成的列表可以上下移动选项。另外与select相同都要指定list、listkey和listvalue等属性

?其他属性:

–allowMoveUp:是否显示“上移”按钮,默认为true

–allowMoveDown:是否显示“下移”按钮,默认为true

–allowSelectAll:是否显示“全选”按钮,默认为true

–moveUpLabel:设置“上移”按钮文本,默认是“^”

–moveDownLabel:设置“下移”按钮文本,默认是“v”

–selectAllLabel:设置“全选”按钮文本,默认是“*”

doubleselect标签

级联列表,当选择第一个列表时,第二个列表框的内容会随之改变

?属性:

因为两个都是下拉列表,因此需要指定两个下拉列表框的选项

–list:指定输出第一个下拉列表框中选项集合

–listKey:第一个下拉列表框的值

–listValue:第一个下拉列表框的标签

–doubleList:指定输出第二个下拉列表框中选项集合

–doubleListKey:第二个下拉列表框的值

–doubleListValue:第二个下拉列表框的标签

–doubleName:第二个下拉列表框的name属性

?注意:

1.使用doubleselect标签时,必须放在标签中使用

2.默认情况下,第一个下拉列表框只支持两项,如果要包含更多的值list和doubleList就不能直接设定;可以采用一种迂回方式来实现,首先定义一个Map对象,该Map对象的value都是集合,这样就能以Map对象的多个key创建第一个下拉列表框的列表项,而每个key对应的集合则用于创建第二个下来列表框的列表项

keySet:将map集合中所有的键存入到Set集合,因为Set具备迭代器。

所有可用迭代方式取出所有的键,再根据get方法,获取每一个键对应的值。

optiontransferselect标签

联动列表,optiontransferselect会生成两个列表选择框,并生成系列的按钮用于控制各选项在两个下拉列表之间的移动、升降等;当提交表单时,两个列表框对应的请求参数都会提交

?属性:

–addAllToLeftLabel:设置全部移动到左边按钮的文本

–addAllToRightLabel:设置全部移动到右边按钮的文本

–addToLeftLabel:设置左移动按钮的文本

–addToRightLabel:设置右移动按钮的文本

–allowAddAllToLeft:设置是否出现全部移动到左边的按钮

–allowAddAllToRight:设置是否出现全部移动到右边的按钮

–allowAddToLeft:设置是否出现全部移动到左边的按钮

–allowAddToRight:设置是否出现全部移动到右边的按钮

–leftTitle:设置左边列表的标题

–rightTitle:设置右边列表的标题

–allowSelectAll:设置全选按钮

–list:第一个下拉选择框的集合

–listKey:第一个下拉选择框的value属性

–listValue:第一个下拉选择框的label属性

–name:设置第一个下拉选择框的name属性

–value:设置第一个下拉选择框的value属性

–multiple:设置第一个下拉选择框是否允许多选

–doubleList:第二个下拉选择框的集合,必选属性

–doubleListKey:第二个下拉选择框的value属性

–doubleListValue:第二个下拉选择框的label属性

–doubleName:设置第二个下拉选择框的name属性,必选

–doubleValue:设置第二个下拉选择框的value属性,必选

–doubleMultiple:设置第二个下拉选择框是否允许多选

radio、checkbox、checkboxlist标签

?checkbox的属性:

?id和name:指的是该标签的标识id和标识名。

?value:指是否选中,其值只能为True或False,相当于传统checkbox中的checked。?fieldValue:相当于传统checkbox中的value值。

?label:对于该checkbox显示在页面上方框后面的描述。

hidden标签

hidden标签输出一个HTML隐藏表单元素,等价于HTML代码:

submit标签

submit标签输出一个提交按钮。submit标签和form标签一起使用可以提供异步表单提交功能。

?submit标签可以输出以下三种类型的提交按钮。

?input:等价于HTML代码

?image:等价于HTML代码

?button:等价于HTML代码

名称必需默认类型描述

type 否input String 要使用的提交按钮的类型,有效值:input button image

src 否无String 为image类型的提交按钮设置图片地址。该属性对input和button类

型的提交按钮无效

action 否无String 指定处理提交请求的action

method 否无String 指定处理提交请求的action的方法

?struts2提供的一种特性,即使用一些预定义的前缀来命名一个按钮,通过按钮的名字来改变执

行的行为。Struts2定义了4个前缀,如下:

?method:使用method前缀,来取代action默认的execute()方法的执行

?action:使用action前缀,取代form标签指定的action,将请求导向到另外的action进行处理。

?redirect:使用redirect前缀将请求重定向到其他的URL,甚至可以是Web应用程序外部的URL。

?redirection-action:使用redirect-action前缀将请求重定向到其他的action。在内部,struts2使用ServletRedirectResult来执行这个任务。

使用formaction属性可以实现取代form标签指定的action

reset标签

reset标签输出一个重置按钮。

如果是类型为input的重置按钮,则只能通过value属性来设置重置按钮上的文本。

label标签

Xhtml主题下的label标签输出两个HTML的label标签(simple主题下的label标签只输出一个HTML label标签),分别位于一行的两列,左边的label标签起提示作用,右列的label标签用于显示只读的action属性数据。

token标签

防止重复提交表单;如果需要该标签起作用,则应该在Struts2的配置启动TokenInterceptor拦截器或TokenSessionStoreInterceptor拦截器

?原理:在表单中增加一个隐藏域,每次加载该页面时,该隐藏域的值都不相同。而

TokenInterceptor拦截器则拦截所有用户请求,如果两次请求时该token对应的隐藏域的值相同(前一次提交时token隐藏域的值保存在session里),则阻止表单提交

5. 非表单标签【NoFormTagLib】

component标签

使用component标签可以自定义组件,当需要多次使用某些代码段是,就可以自定义一个组件在页面中使用component标签多次调用。

?该标签的主要属性有:

?theme属性:该属性用来指定自定义组件所使用的主题,默认值为xhtml。

?templateDir属性:该属性用来指定自定义组件使用的主题目录,默认值为template。

?template属性:该属性用来指定自定义组件所使用的模板文件,自定义模板文件可以采用JSP、FreeMarker 和Velocity这3中技术编写代码。

actionerror 、actionmessage、fielderror标签

actionerror和actionmessage用法一样,都是负责输出Action对象封装的信息;

区别:

actionerror标签负责输出Action对象的getActionError()方法的返回值,而actionmessage负责输出Action对象的getActionMessages()方法的返回值

第五章

Struts2高级应用

1.Struts2 类型转换

所有页面与控制器传递的数据均为String类型,而我们在对其进行处理时可能会

用到各种数据类型,程序无法自动完成数据类型的转换,需要我们在代码中手动完成,这个过程称为类型转换。String Object

Struts2能自动处理类型转换过程中出现的未知异常.

Struts2框架提供了下列数据类型与String类型相互转换的功能:

?boolean/Boolean、char/Character、int/Integer、float/Float、double/Double

?Date:使用当前区域(Local)的Short格式转换

?数组:将同名多值参数转换成特定类型的数组;在默认情况下,数组元素是字符串,如果用户

提供了自定义类型转换器,也可以是其他符合类型数组;对于数组的类型转换将按照数组元素的类型来单独转换每一个元素,如果数组元素的类型转换本身无法完成,系统将出现类型转换错误

?集合(Collection)类型:将同名多值参数转换成集合类型

基于OGNL的类型转换

借助OGNL表达式的支持,Struts2允许以另一种简单方式将请求参数转换成引用类型

?注意:

1.因为struts2将通过反射来创建一个引用对象,因此系统必须为该类提供无参构造

2.Action中必须提供get和set方法

?如果要访问Action的Map类型属性,那么表单域的属性设置为“Action属性名['key值'].

属性名”的形式,其中“Action属性名”是Action类里包含的Map类型属性,后一个属性名则是Map对象里引用类型对象的属性名【OgnlObjectMap】

指定集合元素的类型【noGenericList】【noGenericMap】

Struts2允许开发者通过局部类型转换文件来指定集合元素的类型

?类型转换文件就是一个普通的Properties文件

?命名规则:ActionName-conversion.properties形式,其中ActionName是需要Action的

类名,后面的-conversion.properties字符串则是固定部分

?类型转换文件放在和Action类文件相同的位置

对于List集合的转换:

为了指定List集合里元素的数据类型,需要指定两个部分:

–List集合属性的名称

–List集合里元素的类型

通过在局部类型转换文件中指定如下key-value即可:

Element_=

–ListPropName:List集合属性的名称

–ElementType:集合元素类型

对于Map集合的转换:

需要同时指定Map的key类型和value类型

–key的类型转换

在局部类型转换文件中增加:Key_=

–value的类型转换

在局部类型转换文件中增加:Element_=

自定义类型转换器

Struts2默认的转换器并不总是满足需求。例如,输入时间,Struts2只能转换形如12:00:00的格式,而输入12:00就会抛出错误。因此需要自定义数据转换器

Struts2的类型转换器依然基于ONGL框架的,在OGNL中有一个TypeConverter接口,这个接口是自定义类型转换器必须实现的接口

public interface TypeConverter{

public Object convertValue(Map context,Object targe,Member member,String propertyName,Object value,Class toType);

}

但这个接口里的方法太复杂,所以OGNL还为该接口提供了一个实现类:DefaultTypeConverter,通常都采用扩展该类来实现自定义类型转换器。实现时需要重写convertValue()方法

?Struts 2框架提供了转换器类定义的方法,一般有两种方法来定义转换器类。

(1)继承DefaultTypeConverter类来定义转换器类。【CustomConvert】

继承DefaultTypeConvertor类来定义转换器类通常须重写其中的convertValue()方法。public Object convertValue(Map context,Object target,Class toType)

–context是表示OGNL上下文的Map对象

–target是需要转换的对象

–toType是要转换的目标类型。

convertValue方法的作用非常简单,负责完成类型的转换,但是这种转换是双向的:字符串转换为对象或对象转换为字符串

为了实现双向转换,程序通过判断toType判断转换的方向,toType为引用类型时表明要将字符串转换成引用类型;当toType为String类型时表明需要对象转换成字符串类型

(2)继承StrutsTypeConverter类来定义转换器类。【StrutsTypeConverter】

?为了简化类型转换器的实现,Struts2提供了一个StrutsTypeConverter抽象类,这个抽象类

是DefaultTypeConverter类的子类。

?StrutsTypeConverter类简化了类型转换器的实现,已经实现了DefaultTypeConverter的

convertValue()方法,实现该方法时,将两个不同转换方向替换成不同方法,当把字符串转换为复合类型时,调用convertFromString()抽象方法;当需要把复合类型转换成字符串时,调用convertToString()抽象方法

?继承StrutsTypeConverter类通常需要重写两个方法:convertFromString()和

convertToString()。

public Object convertFromString(Map context,String[] values,Class toClass)

功能:将字符串转换为一个对象,该方法由拦截器调用,返回目标类的对象

Map context:代表Action组件的环境,通过它可访问值栈、引用session、application等元素

String[] values:代表客户端提交的请求参数

Class toClass:代表要转换的目标类

public String convertToString(Map context,Object obj)

功能:将对象转换成一个字符串,该方法由拦截器调用

Object obj:要转换的对象

注册类型转换器

仅仅为该应用提供类型转换器还不够,因为Struts2依然不知道何时使用这些类型转换器,所以必须将类型转换器注册在Web应用中,Struts2框架才可以正常使用该类型转换器

Struts2支持三种注册类型转换器方式:

–注册局部类型转换器:仅仅对某个Action的属性起作用

–注册全局类型转换器:对所有Action的特定类型的属性生效

–注解方式注册类型转换器

?基于应用的全局配置【GlobalConverter】

全局类型转换器不是对指定Action的指定属性起作用,而是对指定类型起作用

所有Action组件都可以使用

1.在CLASSPATH的根路径下(通常是WEB-INF/classes目录)创建一个名为

xwork-conversion.properties的文件

2.提供一个属性定义,属性名是要转换的类的名称,属性值是类型转换器的类名称。

例如,为所有的java.util.Date对象提供一个DateTypeConverter转换器,你需要在xwork-conversion.properties文件中添加下列内容:

Java.util.Date=com.ibm.converter.DateTypeConverter

?基于Action的局部配置【ActionConverter】

仅对指定的Action起作用

1.方法是在Action类所在的包中创建ClassName-conversion.properties文件

2.提供一个属性定义,左边是要转换的类的属性名,右边是类型转换器的类名称。例如:要为User类指

定一个类型转换器,你需要在该类所在的包中创建User-conversion.properties文件,并添加下列内容:birthday=com.ibm.converter.DateTypeConverter

注意:局部类型转换器对指定Action的指定属性起作用,一个属性只调用convertValue()方法一次;全局类型转换器对所有Action的特定类型起作用,因此可能对一个属性多次调用convertValue()方法;例如:属性是一个数组或集合,数组或集合中包含几个该类型的元素,就会调用convertValue()方法几次

处理类型转换异常【errorHandler】【errorHandler2】

?当发生了类型转换错误后,struts2会将转换错误放到ActionContext中一个名为

conversionErrors的Map对象中。在出现类型转换错误后,你可以选择是否向用户提示转换错误。

?在struts2中有两个拦截器负责类型转换错误,如下所示:

com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor: conversionErrorInterceptor把在ActionContext的conversionErrors Map中找到的所有错误都添加为action的字段错误(Action需要实现ValidationAware接口,ActionSupport基类实现了该接口),此外,它还把有转换错误的字段的原始值保存下来,这样之后对这个值的请求得到的就是原始值而不是action中的值。

org.apache.struts2.interceptor.StrutsConversionErrorInterceptor

StrutsConversionErrorInterceptor继承自ConversionErrorInterceptor类,但是它只在字段值不是null、不是“”或者不是{“”}(表示只有一个空字符串元素的字符串数组)的情况下,把转换错误从

ActionContext添加到action的字段错误。这在Web环境下是有用的。

?当发生了转换错误后,struts2会将请求导向到”input”结果代码映射的视图,因此要向用

户提示转换错误信息,你还需要在Action的配置中添加input结果映射。

?总结一下:要向用户报告类型错误,需要实现下面三个步骤:

1、引用defaultStack拦截器栈(包含了conversionError拦截器)

2、让Action类从ActionSupport继承(实现了ValidationAware接口)

3、为Action配置添加input结果映射

2.Struts2 数据校验

数据校验概述

?客户端校验

通过JavaScript编写客户端表单验证代码,在提交给服务器前首先执行这些验证代码,如果用户输入的数据未通过验证,则不能提交给服务器端进行处理。

?服务器端校验

–将数据提交给服务器端应用程序,在做业务逻辑处理之前对数据进行校验,如果数据未通过校验,则不能继续进行业务处理,而是转到客户端要求重新输入

–服务器端校验的实现方式主要有两种:通过Action中的validate方法实现和使用XWork校验框架实现。

手动编程方式

?方式一:重写validate()方法,在struts2框架中,专门用来校验数据的方法是validate()方

法。开发者可以通过继承ActionSupport类,并重写validate()方法来完成输入校验。

【overrideValidate】

SCME_STRUTS2试卷

--------------------------------------装--------------------------------------订------------------------------线---------------------------------------- **学院课程考试试卷 课程名称:《使用Struts2开发基于MVC设计模式的企业级应用》(A)卷 年级:班级: 姓名:_______________ 学号:_________________ 考试(考查) 闭卷 选择题(每题2分,共计100分) 1.在控制器类中一般需要添加相应属性的( A )和(C )。(选两项) A.setter方法 B.as方法 C.getter方法 D.is方法 2.业务控制器需要在( B )配置文件中进行配置 A.web.xml B.struts.xml C.struts2.xml D.webwork.xml 3.不属于Struts 2表单标签库的是( D )。 A. B. C. D.标签的property属性指定字段的名字,对应ActionForm bean中的一个属性,代码如下: 的对应的userForm bean属性 private String login_Name; public String getLogin_Name() { return login_Name; } public void setLogin_Name(String login_Name) { this.login_Name = login_Name; } 3,:生成HTML标签,使用方法与相同。 启用 停用 4,:生成HTMLchecked="checked" />${name} (2)checked="checked"/> 其中,pieFunType和roworCol为后台传过来的字符串

Struts2知识点总结

Struts2基础知识 Struts2概述 1.Struts2框架应用javaee三层结构中的web层框架。 2.Struts2框架在struts1和webwork基础之上发展的全新框架。 3.Struts2所解决的问题: 在以往实现一个功能时,都需要写很多的servlet,从而造成后期维护上的不方便。 图解: 4.现在比较稳定的Struts2版本 struts-2.3.24-all.zip 5.web层常见框架 1.struts 2.springMVC Struts2框架入门 1.导入jar包 1.在lib里面有jar包,但不能全部导入,因为里面含有一些spring 包,是不能使用的,导入会导致程序不能运行。 2.到app目录里面复制案例的jar包是最好的方法。 2.创建action 3.配置action类的访问路径

1.创建struts2核心配置文件,该核心配置文件位置和名称是固定的, 位置必须在src下面,名称为struts.xml 。 2.引入dtd约束,可以在案例文件中找到,复制在struts.xml文件中即 可。 3.action的配置 *注意访问路径: http://域名/端口号/项目名/action名.action 注意:.action可以省略,但建议不要省略,为了兼容一些老版本的浏览器。 4.配置Struts2的过滤器,可以在案例中的web.xml文件中找到,复制粘贴 即可。 Struts2执行过程 图解:

Struts2配置

1.是一种常量标签 2.修改Struts2的默认常量值 1.常用方式 在struts.xml中进行配置。 2.其它两种方式 1.在src下面创建struts.properties文件并修改。 2.在web.xml文件中进行修改。 3.Struts2最常用的常量 struts.il8n.encoding=UTF-8,解决表单在通过post方式提交中文时,中文乱码的问题。

struts2常用标签

常用的Struts 2.0的标志(Tag )介绍 在上一篇文章《为Struts 2.0做好准备》中,我过于详细地介绍了Struts 2.0开发环境和运行环境的配置,所以,本文很少涉及的以上两方面的细节。如果,您看完《为Struts 2.0做好准备》后,还有什么不明白,或者没法运行文中例子,请联系我。我的E-MAIL :Max.M.Yuan@https://www.wendangku.net/doc/9e12352100.html, 。 在介绍常用标志前,我想先从总体上,对Struts 1.x 与Struts 2.0的标志库(Tag Library )作比较。 分类 将标志库按功能分成HTML 、Tiles 、Logic 和Bean 等几部分 严格上来说,没有分类,所有标志都在URI 为“/struts -tags” 命名空间下,不过,我们可以从功能上将其分为两大类:非UI 标志和UI 标志 表达式语言(expression languages ) 不支持嵌入语言(EL ) OGNL 、JSTL 、 Groovy 和Velcity 以上表格,纯属个人总结,如有所不足或错误,请不吝指正 好了,我要开始介绍“常用”(这里所谓的“常用”,是指在已往工作中使用Struts 里经常用到的)的标志了。 要在JSP 中使用Struts 2.0标志,先要指明标志的引入。通过在JSP 的代码的顶部加入以下代码可以做到这点。 <%@taglib prefix ="s" uri ="/struts-tags" %> 1. 非UI 标志 o if 、elseif 和else 描述: 执行基本的条件流转。 参数: 名称 必需 默 认 类型 描述 备注 test 是 Boolean 决定标志里内容是否显示的表达式 else 标志没有这个参数

struts2面试题(自己总结)

Struts2面试题 1、struts2工作流程 Struts 2框架本身大致可以分为3个部分: 核心控制器FilterDispatcher、业务控制器Action和用户实现的企业业务逻辑组件。核心控制器FilterDispatcher是Struts 2框架的基础,

包含了框架内部的控制流程和处理机制。 业务控制器Action和业务逻辑组件是需要用户来自己实现的。 用户在开发Action和业务逻辑组件的同时,还需要编写相关的配置文件, 供核心控制器FilterDispatcher来使用。 Struts 2的工作流程相对于Struts 1要简单,与WebWork框架基本相同, 所以说Struts 2是WebWork的升级版本。基本简要流程如下: 1 、客户端初始化一个指向Servlet容器的请求; 2、这个请求经过一系列的过滤器(Filter) (这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器, 这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin) 3 、接着FilterDispatcher被调用, FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action 4、如果ActionMapper决定需要调用某个Action, FilterDispatcher把请求的处理交给ActionProxy 5、ActionProxy通过Configuration Manager询问框架的配置文件, 找到需要调用的Action类 6、ActionProxy创建一个ActionInvocation的实例。 7、ActionInvocation实例使用命名模式来调用, 在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。 8、一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可能是另外的一个Action链)一个需要被表示的JSP 或者FreeMarker的模版。在表示的过程中可以使用Struts2 框架中继承的标签。在这个过程中需要涉及到ActionMapper 9、响应的返回是通过我们在web.xml中配置的过滤器 10、如果ActionContextCleanUp是当前使用的,则FilterDispatecher将不会清理sreadlocal ActionContext;如果ActionContextCleanUp不使用,则将会去清理sreadlocals。 2、说下Struts的设计模式 MVC模式: web应用程序启动时就会加载并初始化ActionServler。用户提交表单时,一个配置好的ActionForm对象被创建,并被填入表单相应的数据,ActionServler根据Struts-config.xml文件配置好的设置决定是否需要表单验证,如果需要就调用ActionForm的Validate()验证后选择将请求发送到哪个Action,如果Action不存在,ActionServlet会先创建这个对象,然后调用Action的execute()方法。Execute()从ActionForm对象中获取数据,完成业务逻辑,返回一个ActionForward对象,ActionServlet再把客户请求转发给ActionForward对象指定的jsp组件,ActionForward对象指定的jsp生 成动态的网页,返回给客户。

STRUTS2模拟(答案)

STRUTS2模拟测试(开卷——定时90分钟) 一、填空题 1.Struts2框架由___Struts1________和____WebWork_______框架发展而来。(Struts&WebWork ) 2.Struts2以___WebWork______为核心,采用____拦截器_______的机制来处理用户的请求。(WebWork,拦截器)3.构建Struts2应用的最基础的几个类库是struts-core-2.1.6.jar___________、__xwork-2.1.2.jar_________、__ognl-2.6.11.jar_________ 、_freemarket-2.3.13、_commons-logging-1.0.4.jar_________以及 ___commons-fileupload-1.2.1.jar________。 4.Struts2中的控制器类是一个普通的_____class______。Class 5.如果要在JSP页面中使用Struts2提供的标签库,首先必须在页面中使用taglib编译指令导入标签库,其中taglib编译指令为_<%@ taglib prefix=”s” uri=”/struts-tags”%>__________。<%taglib uri="/struts-tags" prefix="s"%> 6.在Struts2表单标签库中,表单标签为___________。 7.ActionSupport类实现了____Action_______接口和_Validateable__________等接口。 8.通过控制器类中的___validate()________方法来输出校验错误信息。 二、选择题 1.不属于Action接口中定义的字符串常量的是_____B______。B A.SUCCESS B.FAILURE C.ERROR D.INPUT 2.在控制器类中一般需要添加相应属性的____A_______和____C_______。AC A.setter方法 B.as方法 C.getter方法 D.is方法 3.控制器需要在____B_______配置文件中进行配置。B A.web.xml B.struts.xml C.struts2.xml D.webwork.xml 4.不属于Struts 2表单标签库的是_____D______。D A. B. C. D.