编程开发 > JAVA > 文章内容

java基础知识总结(181)

2016-9-30编辑:ljnbset

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时,通配符*的使用

       在元素的name属性中可以使用*号,可以使用若干个.

可以在method,class,引用*号所代表的信息.引用方式{1},{2},{3}

      5)动态方法调用

       可以在发送请求时,指定要执行的Action的业务方法名.

       请求格式: "请求名!方法名.action"

      6)在配置中可以使用EL表达式获取Action属性值

     

         /${viewName}.jsp

     

java基础知识总结(180)

热点推荐

登录注册
触屏版电脑版网站地图