读书人

struts2学习札记1

发布时间: 2012-08-21 13:00:22 作者: rapoo

struts2学习笔记1
一、struts2的基本流程:
struts2框架由3个部分组成,核心控制器FilterDispatcher,业务控制器和用户实现的业务逻辑组件,
struts2框架获得了*.action请求后,将根据*.action请求的前面部分决定调用哪个业务逻辑组件,
struts2用于处理用户请求的action实例,并不是用户实现的业务控制器,而是action代理--因为用户实现的
业务控制器并没有与servlet API耦合,显然无法处理用户请求,而Struts2框架提供了系列拦截器,该系列拦截器
负责将HttpServletRequest请求中的请求参数解析出来,传入到action中,并回调action的execute方法来处理用户
请求,显然,上面的处理过程是典型的AOP(面向切面编程)处理方式:
----------------------------------------
被转入的请求-->系统的action代理-->拦截器1-->拦截器n-->action类
----------------------------------------
用户实现的Action类仅仅是Struts 2的Action代理的代理目标,用户实现的业务控制器(action)则包含了对
用户请求的处理,用户的请求数据包含在HttpServletRequest对象里,而用户的action类无需访问HttpServletRequest
对象,拦截器负责将HttpServletRequest里的请求数据解析出来,并传给业务逻辑组件Action实例

二、#$%的作用
"#"的主要用途:
1.访问OGNL上下文和Action上下文,#相当于ActionContext.getContext();下表有几个ActionContext中有用的属性:
名称 作用 例子
parameters 包含当前HTTP请求参数的Map #parameters.id[0]作用相当于request.getParameter("id")
request 包含当前HttpServletRequest的属性 (attribute)的Map #request.userName相当于request.getAttribute("userName")
session 包含当前HttpSession的属性(attribute)的Map #session.userName相当于session.getAttribute("userName")
application 包含当前应用的ServletContext的属性(attribute)的Map #application.userName相当于application.getAttribute("userName")
attr 用于按request > session > application顺序访问其属性(attribute) #attr.userName相当于按顺序在以上三个范围(scope)内读取userName属性,直到找到为止
2.用于过滤和投影(projecting)集合,如books.{?#this.price<100};
3.Map,如#{'foo1':'bar1', 'foo2':'bar2'}。

"%"的主要用途:
在标志的属性为字符串类型时,计算OGNL表达式的值

"$"的主要用途:
1.用于在国际化资源文件中,引用OGNL表达式
2.在struts2配置文件中,引用OGNL表达式

读书人网 >软件架构设计

热点推荐