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){
return session.getAttribute(key.toString());
}
}
b.要Action实现以下Aware接口,利用接口约定的方法注入.(推荐)
原因:减少了Struts2框架API对Action类的侵入,提高Action的灵活性.
RequestAware
SessionAware
ApplicationAware
ServletRequestAware
ServletResponseAware
ServletContextAware
3)Action属性注入技术
Action类中定义的属性,可以通过
class="com.tarena.action.ProjectListAction"> 3
4)在配置Action时,通配符*的使用
在
可以在method,class,
5)动态方法调用
可以在发送请求时,指定要执行的Action的业务方法名.
请求格式: "请求名!方法名.action"
6)在
ASP编码教程:如何实现/使用缓存
[ASP]2015年4月15日ASP编码教程:asp缓存的分类
[ASP]2015年4月15日ASP编码教程:何谓ASP缓存/为什么要缓存
[ASP]2015年4月15日ASP编码教程:asp实现的sha1加密解密代码
[ASP]2015年4月15日ASP编码教程:asp执行带参数的sql语句实例
[ASP]2015年4月14日