Struts2知识宝库
来源:互联网 发布:人大 网络教育二学位 编辑:程序博客网 时间:2024/05/20 20:18
Struts2知识宝库
struts2
参考书
《javaweb程序设计与项目实践》古乐声
版本说明
以struts2.3.8为例
项目配置步骤
一、必备的jar文件(这里只针对struts2.3.8版本),导入到\WEB-INF\lib目录,这11个jar文件包括:
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)
功能:
页面String与action类属性之间的相互转换
内置转换
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.ActionContext:Action运行的上下文;可调用getSession()来得到Action自己的session,该session实际上是一个Map对象。
另外,ActionContext与 ServletActionContext,ActionContext的session与HttpSession的联系,以及互相操作、获取、线程安全性,请见相关资料。
国际化
文件上传
struts标签库Taglib
其它一些知识点
1、ActionError其实是ArrayList结构,addActionError("")可以往其中加入很多个字符串。
2、FieldError其实是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类属性的办法
(1)EL表达式:${param.属性名}
(2)struts标签:<s:property value="属性名"/>
表单提交信息回显的办法
(1)${param.name名}
(2)struts标签如“<s:textfield…>…</s:field>”具有回显功能
- Struts2知识宝库
- linux知识宝库
- java知识宝库
- jQuery知识宝库
- Hibernate知识宝库
- Spring知识宝库
- yii知识宝库
- 疯狂Java学习笔记(46)------------知识学习宝库!
- Java学习笔记(46)------------知识学习宝库!
- struts2知识
- struts2知识
- [推荐]中国网管的知识宝库-网管之家
- [推荐]中国网管的知识宝库-网管之家
- baidu宝库
- 资源宝库
- 有关struts2的知识
- struts2知识总结
- Struts2 OGNL学习知识
- Tomcat默认编码方式
- CformView滚动条!!!
- Android内存管理机制详解
- 如何成为一名软件架构师
- 利用HTTP进行拒绝服务攻击的一些构思
- Struts2知识宝库
- 第五次上机报告
- JAVA wait(), notify(),sleep详解
- 搜索引擎相关资源
- Entiy Framework研究 - 项目架构搭建
- 域名与域名解析-DNS原理
- Hibernate知识宝库
- childNote and children
- ibatIS中返回结果map 并使用list获取