1.课程回顾(理解)
1)ValueStack结构和数据存储状态
ValueStack包含3个组成
a. OGNL引擎:负责解析OGNL表达式
b. root对象:CompountRoot(栈结构)
存放了当前请求的Action对象(处于栈顶位置)
c. context对象:Map结构
存放了其他象.
request:Object
session:Object
application:Object
2) ValueStack原理
a.当客户发送一个请求后,控制器会创建一个ValueStack对象
b.控制器创建请求对应的Action对象,并压入到ValueStack的root栈中
c.将request,session等对象的引用,存入到ValueStack的context中
d.将ValueStack再存入到request对象中,struts.valueStack
e.客户再发新请求,重复以上操作.
*2.重构列表显示示例
3.EL表达式在Struts2中的使用(理解)
EL为什么可以获取Action对象的属性?
可以访问pageContext,request,action,session,application范围数据
在原有的JavaWeb程序中,JSP如果使用${username},会调用如下方法查找.
HttpServletRequest接口
request.getAttribute("username")
session.getAttribute("username")
application.getAttribute("username")
在Struts2中,将request对象进行了封装,类型为StrutsRequestWapper.
public class StrutsRequestWapper
extends HttpServletRequestWrapper{
//重写了getAttribute
public Object getAttribute(String expression){
//首先去原始的request中查找
Object val = super.getAttribute(expression));
//如果找不到,去valuestack查找
if(val == null){
val = ValueStack.findValue(expression);
}
return val;
}
}
JSP使用 ${"username"} -->先去原有request中查找
找不到调用ValueStack.findValue("username");
触发Ognl.getValue("username")//获取root中栈顶action的username属性
4. Struts2中Action组件的核心应用
1)Action组件原理
a.当客户发生一个请求,控制器会创建一个Action对象
不必担心线程并发,不安全问题.
b.Action对象创建后会放入ValueStack中,当root对象的栈顶
c.Action对象提供一个业务方法,默认是execute
d.Action对象在请求处理完毕后销毁
2)Action如何使用request,session,application
a.利用工具类ActionContext,ServletActionContext
如何将HttpServletRequest,HttpSession等对象转换成Map结构
public class SessionMap extends AbstractMap{
private HttpSession session;
public SessionMap(HttpSession session){
this.session = session;
}
public void put(Object key,Object value){
session.setAttribute(key.toString(),value);
}
public Object get(Object key){
2015年全国职称计算机考试教材(2007模 .. 定价:¥225 优惠价:¥213 更多书籍 | |
全国职称计算机考试速成过关系列套装:W .. 定价:¥133 优惠价:¥133.0 更多书籍 |