Struts2基础总结-2

来源:互联网 发布:淘宝开店预存金额 编辑:程序博客网 时间:2024/04/29 16:57

Struts2总结-2

跟struts2基础总结-1 一样图片太多了,懒得链接图片,可以下载我的资源中的文档看。
http://download.csdn.net/download/tanghui20/9731751

3-1 jsp从域中获取值:

之前我么介绍了从jsp 中封装数据到action,今天我们介绍怎么从action获取数据到jsp

这个功能需要使用到ognl 值栈

 

3-1-1理解ognl

就是一中表达式,类似于EL表达式

3-1-2理解值栈

struts2里面提供值栈,类似于域对象,值栈应用在struts2action里面,在值栈中可以存值和取值

 

3-1-3 值栈存储位置

值栈存在于每个action对象里面

1servletaction区别

* servlet默认在第一次访问时候创建,创建一次,单实例对象

* action在访问时候,每次访问action时候都会创建一个action对象,多实例对象

 

2)每次访问action时候,都会创建action对象,

在每个action对象里面存在一个值栈对象

 

3-1-4值栈使用范围

1)值栈使用在action范围的

3-1-5获取值栈对象

1)使用ActionContext类,得到ActionContext对象

2)使用ActionContext对象里面的方法得到值栈对象

 

 

3-1-6 值栈内部结构

1rootlist集合

一般操作数据指的都是操作root里面数据

2contextmap集合

存储对象引用,

Context里面key名称是固定的,requestsessionapplicationparametersattr

3-2向值栈放数据 -- jsp中从值栈中获取数据

有三种方式:

第一种方式: 获取值栈对象,调用值栈对象里面的set方法

 

Jsp中获取:

 

 

第二种方式:获取值栈对象,调用值栈对象里面的push方法

 

Jsp中获取:

 

 

第三种方式:在action成员变量位置定义变量,生成这个变量的get方法 (常用)

 

3-2-1 向值栈放字符串(方法3)

 

3-2-2 jsp中获取字符串

 

3-2-3 向值栈放对象(方法3)

1 实现步骤

第一步 声明对象变量,生成变量的get方法

 

第二步 action具体的方法中向对象里面设置值

 

 

3-2-4  jsp中获取对象

 

3-2-5 向值栈集合(list方法3)

第一步 action声明list集合变量,生成变量的get方法

第二步 在具体执行的方法里面,向值栈的list集合中设置值

 

3-2-6  jsp中获取集合(list <3种方法>

1 第一种方式

 

 

2 第二种方式

1)在struts2标签里面有遍历操作,类似于jstlforeach标签

<s:iterator>

 

 

3 第三种方式

 

3-2-7 向值栈集合(map)(方法3)

第一步 action声明map集合变量,生成变量的get方法

第二步 在具体执行的方法里面,向值栈的map集合中设置值

 

 

 

 

 

3-2-8  jsp中获取集合(map)

 

 

3-2-9 获取值栈数据 set/push 方法存放的数据(了解)

 

 

4-1拦截器 interceptor

4-1-1拦截器的原理

1、分为两个部分

a) aop思想:面向切面(方面)编程

aop底层实现动态代理(增强类的方法)

在不修改源代码的基础上扩展新的功能

b) 责任链模式:类似于过滤链

过滤链:一个请求,可以有多个过滤器进行过滤,每个过滤器只有做放行,才能到下一个过滤器

  2拦截器执行过程

1)拦截器在action对象创建之后,action里面的方法执行之前执行

2)在struts2里面执行默认的拦截器,在action不需要调用拦截器的方法,使用配置方式执行--- aop思想

3)执行很多的拦截器,比如有三个拦截器,首先执行拦截器1,做放行,执行拦截器2,之后放行,执行拦截器3,放行之后,之后action里面的方法

 

 

 

4-1-2拦截器与过滤器的区别

1 过滤器:理论上可以过滤任意内容,过滤jsp、过滤html、过滤图片路径、过滤servlet过滤action

 

2 拦截器:可以拦截的内容,拦截器只能拦截action

 

3 actionservlet区别

1action每次访问创建新的对象,多实例

2servlet第一次访问时候创建,创建一次,单实例

4-1-3自定义拦截器

第一种创建类,继承AbstractInterceptor

第二种创建类,继承 MethodFilterInterceptor  (常用)

 

案例:自定义登录拦截器

 

需求:在系统中,有很多action的超链接,实现只有登录之后,才可以点击这些action的超链接,如果不是登录状态,点击action超链接,回到登录页面

 

实现:

1、登录的时候在session中保存一个指定的值。

 

2、自定义拦截器中判断session中是否有这个指定的值,

a) 有这个指定值放行

b) 没有这个指定的值

 

 

3、struts2.xml中配置自定义的拦截器

3-1 声明拦截器

 

3-2 在具体的action标签中使用声明的拦截器

 

3-3 当我们使用了自定义的拦截器struts2中默认的拦截器就不执行了需要我们手动配置

 

3-4 配置action类中的那些方法不经过拦截器

 

 

 

4-1-4 struts2的标签

常用的标签

1<s:debug>标签:查看值栈存储结构

 

2<s:property value=ognl表达式>:jsp中获取值栈数据

 

3<s:iterator>标签: 遍历得到值栈集合内容

4-1-5 struts2 的表单标签

1 html表单标签

1form: 属性actionmethodenctype

2)输入项

- input标签输入项

- text:普通输入项

- password:密码输入项

- radio:单选

- checkbox:复选

- hidden:隐藏项

- file:文件上传项

- submit:提交

- button:普通按钮

- image:图片提交

- reset:重置

* select:下拉框

* textarea:文本域

 

2 struts2里面提供表单标签,html中表单标签,在struts2里面大部分都对应的标签

属性总结:

Name: action 类中获取时使用的参数

Label:  在页面中显示

Value/list: 传给action 类的值

 

 

 

 

 

 

3 注意问题:

使用struts2s:form标签时候,里面的action属性值,不能写完全路径

 

如果上面写法,出错

写法,直接在action属性里面写action名称

 

 

 

 

 

4-2 国际化资源

4-2-1国际化资源文件定义

a) 全局资源文件

 

源码某个目录创建资源文件,然后在struts.xml里面配置路径:

<constant name="struts.custom.i18n.resources" value="messages/msg" />

资源文件必须”_语言_国家代码结尾

b) package资源文件

 

Package资源可以放到任意一个包下面,

但是名字是固定的就是package_zn_CN.properties

c) action资源文件

 

Action资源文件和action放到同一目录,

且必须和action的名字对应命名 ,Action类名_zn_CN.properties

资源文件里面的内容是以键值对的形式

login_success=欢迎登陆

msg_action=..............

msg_package=.........

 

 

以上三类资源文件的搜索顺序

Action资源 ->Package资源 ->全局资源

4-2-2使用资源

前提:Action继承ActionSupport

1. Action里面使用getText方法

 

2. Jsp页面里面使用<s:text>标签

3. 配置文件里面使用${}和ognl表达式

4-2-3切换语言

两种方式:

1. struts.xml里面定义locale常量 (注意浏览器的缓存)

<constant name="struts.locale" value="en_US" />

2. 在请求url后面加上request_locale参数 (i18nIntercepter

http://localhost/struts_demo/login.action?request_locale=en_US

 

 

4-3表单校验器

4-3-1 定义一个Action类使用模型封装方法获取表单数据

 

4-3-2自定义一个校验器

文件命名:Action类名-Action标签名字-validation.xml

 

4-3-3 struts2.xml配置文件中配置校验器出错是的跳转页面

校验器的执行流程:

 

 

 

 

4-3-4针对表单进行校验

 

 

 

4-3-5使用国际化资源消息

 

0 0
原创粉丝点击