现在的位置: 首页 > 综合 > 正文

Struts2知识宝库

2013年12月09日 ⁄ 综合 ⁄ 共 4581字 ⁄ 字号 评论关闭

 

Struts2知识宝库

 

struts2

参考书

javaweb程序设计与项目实践》古乐声

版本说明

struts2.3.8为例

项目配置步骤

一、必备的jar文件(这里只针对struts2.3.8版本),导入到\WEB-INF\lib目录,这11jar文件包括:

asm-3.3.jar

asm-commons-3.3.jar

asm-tree-3.3.jar

commons-fileupload-1.2.2.jar

commons-io-2.0.1.jar

commons-lang3-3.1.jar

freemarker-2.3.19.jar

javassist-3.11.0.GA.jar

ognl-3.0.6.jar

struts2-core-2.3.8.jar

xwork-core-2.3.8.jar

(若需其它更多功能,可能需要更多的jar文件)

二、影响web.xml:配置核心Filter过滤器类为StrutsPrepareAndExecuteFilter

三、建立struts.xml:是struts自己的配置文件,主要用于管理业务控制器Action

DTD标签<!DOCTYPE…>中的如http://struts.apache.org/dtds/struts-2.1.dtd指定了所用DTD版本

四、编写action类;

……

 

 

 

实现MVC

Controller:主要指struts.xml文件和action类产生的控制作用

Model  
主要指action类中的方法去调用的其它业务逻辑相关的组件服务

View   
主要指struts.xml文件指定的目标页面

类型转换(基于OGNL)

功能:

页面Stringaction类属性之间的相互转换

内置转换

1.String<——>基本数据类型、基本数据类型包装类;

2.String<——>Date

3.request.getParameterValues(…)<——>String[]、基本数据类型[]、基本数据类型包装类[]Collection<String>Set<String>

自定义转换器

步骤如下:

1.自定义转换器类

建议继承Struts TypeConverter类;

也可继承其父DefaultTypeConverter。(更上层接口TypeConverter

2.注册局部或全局类型转换器

局部:aciton类名-conversion.property文件(aciton类目录)

全局:xwork-conversion. property文件(class目录)

内容:键值对:action类属性名=自定义转换器类名

类型转换出错时,信息的输出

类型转换出错时,程序员应去影响该属性相关的FieldError变量。以便<s:fllederror name= "属性名"/>能输出出错提示。

程序员可以自定义该属性相关的出错提示,即影响FieldError变量。如果程序员没有定义出错提示,系统会自行影响FieldError变量(此时<s:fllederror
name= "
属性名"/>会输出:Invalid field value for field "属性名")。

1、程序员自定义出错提示,影响FieldError变量的手段

1)全局定义:所有属性共用一套提示

class目录下的struts.xml添加:

<constant name="struts.custom.i18n.resources" value="国际化资源文件名前缀"></constant>

国际化资源文件名_后缀.properties内容为:

xwork.default.invalid.fieldvalue={0}提示信息

{0}会被系统用属性名替代

需用native2ascii命令处理国际化资源文件

2)局部定义:可专门为某个属性指定出错提示

aciton类名.property文件(aciton类目录)

内容:invalid.fieldvalue.属性名=错误提示信息

2、系统默认影响FieldError变量的办法,会使<s:fllederror name= "属性名"/>输出:Invalid
field value for field "
属性名"

输入校验

自定义校验代码

action类需继承ActionSupport类,改写validate()方法,执行校验,若要添加出错信息可选用

1.addActionError("")    
(影响ActionError变量)

2.addFieldError("",)
。(影响FieldError变量。这会覆盖类型转换出错时对FieldError变量的影响)

这两个方法都会导致跳转到<result name="input">指定的页面。选用哪个要根据需要。

显示出错信息的方式

1.<s:actionerror/>

能取出之前addActionError("")被执行时加入的字符串

2.<s:fielderror><s:param>键名</s:param></s:fielderror>

能取出之前addFieldError("",)为键名设置的字符串。多用于表单。

3.表单form的标签整体用struts2的。

(既替代了表单的输入标签,又能回显上次的已输入信息--参见P173,又能显示field的出错信息--参见P175。十分强大。)

<s:textfield name=”age” lable=”年龄”></s:textfield >

使用校验框架

校验规则文件:aciton类名-validation.xml(风格:字段优先和校验器优先)

内置校验器:满足大部分的校验需求。说明文件在xwork-core-x.x.x.jar

/com/opensymphony/xwork2/validator/validators/default.xml

动态校验

拦截

(核心机制)

自定义拦截器开发步骤

.自己的拦截器类必须扩展 Interceptor接口或Abstract Interceptor(适配器),改写intercept()

决定一:如果拦截器欲调用下一个拦截器,则必须

return invocation.invoke()//将把后续拦截器的结果作为返回值

 

决定二:如果拦截器欲结束调用后续拦截器,则仅需返回一个String值,

返回值将在struts.xml中的:

<result name="String">/目标页面地址</result>

起作用。该值需使用Action接口的常量,如:

SUCCESS = "success";NONE = "none";ERROR = "error";

INPUT = "input";LOGIN = "login";

 

.配置struts.xml的拦截参数

1.
拦截器名与拦截器类的关联

<package>下的<interceptors>下的<interceptor>

2.
拦截器栈名与拦截器名的关联

<package>下的<interceptors>下的<interceptor-stack><interceptor-ref>

3.
拦截器(栈)名与aciton类的关联

<package>下的<action>下的<interceptor-ref>

 

.配置struts.xml的目标页面地址(针对于拦截器的返回值)

<result name="String">/目标页面地址</result>

使用内建拦截器(栈)

内建拦截器说明文档在:struts-default.xml,其中有很多拦截器可被选使用,当然也包括系统默认拦截器栈defualtStack

系统默认的拦截器(栈)defualtStack

"defualtStack"的功能依次是:文件上传、、类型转换、输入校验、

欲使用defualtStack,可:

法一:<action>下添加<interceptor-ref name="defualtStack"

法二:把默认拦截器栈"defualtStack"加入到自定义的拦截器栈中

为多个action类配置默认拦截器(栈)

struts.xml文件中,

<interceptors>节点后,所有<action>节点前,添加节点:

       <default-interceptor-ref name="拦截器(栈)"></default-interceptor-ref>

这样,该拦截器(栈)会拦截所有action请求。

为拦截器传入参数的时机以及覆盖效果

本单元格中,">"是覆盖的意思,"定义"是指在节点<interceptors>下配置拦截,"使用"是指在<action>下使拦截生效。

(a)定义拦截器时

(b)使用拦截器时>a

(c)定义拦截器栈时为某拦截器指定param,一旦该栈被使用,就>a

(d)使用拦截器栈时,为其中的某拦截器指定param,就>c

    
格式<param name="拦截器名.参数名">

重要类及对象

1.ActionInvocation

AbstractInterceptor接口的intercept(ActionInvocation invocation)
方法中的参数,该参数可调用getInvocationContext()来得到ActionContext,接着一步步地去抓取与Servlet有关的各对象。

2.ActionContextAction运行的上下文;可调用getSession()来得到Action自己的session,该session实际上是一个Map对象。

 

另外,ActionContext ServletActionContextActionContextsessionHttpSession的联系,以及互相操作、获取、线程安全性,请见相关资料。

国际化

 

 

文件上传

 

 

struts标签库Taglib

 

 

其它一些知识点

1ActionError其实是ArrayList结构,addActionError("")可以往其中加入很多个字符串。

2FieldError其实是Map结构,addFieldError("",)
可以为某个""多次的add值,这些值会自动用换行符连接起来。

action类通常去扩展的类/接口:ActionSupport类、Action接口。(其中ActionSupport实现了Action和其它接口)

配置struts.xml的节点有这些:根<struts><package><action><result><interceptors><constant>

执行顺序:validate() 
execute()之前

请求既可以是表单提交,也可以是点击链接

类型转换失败、输入校验出错(执行了addActionError("")addFieldError("",))、execute()返回input

 

都会使页面跳转到<result name="input">指定的页面

目标页面取action类属性的办法

1EL表达式:${param.属性名}

2struts标签:<s:property value="属性名"/>

表单提交信息回显的办法

1${param.name}

2struts标签如“<s:textfield…>…</s:field>”具有回显功能

 

抱歉!评论已关闭.