Struts2基础总结-2

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里面提供值栈,类似于域对象,值栈应用在struts2的action里面,在值栈中可以存值和取值

 

3-1-3 值栈存储位置

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

(1)servlet和action区别

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

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

 

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

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

 

3-1-4值栈使用范围

(1)值栈使用在action范围的

3-1-5获取值栈对象

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

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

 

 

3-1-6 值栈内部结构

1、root是list集合

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

2、contextmap集合

存储对象引用,

Context里面key名称是固定的,request、session、application、parameters、attr

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标签里面有遍历操作,类似于jstl的foreach标签

<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 action和servlet区别

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

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

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表单标签

(1)form : 属性action、method、enctype

(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 注意问题:

使用struts2的s: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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值