Struts2值棧和OGNL

1、首先關於Struts2框架:java

    ①特色:web

     一、通用性app

     二、可擴展性框架

        struts2能夠自定義類型轉換器(尚待深刻)、自定義攔截器。jsp

     三、非侵入式ui

        不會污染其餘模塊spa

    ②配置code

    一、Web工程的web.xml文件配置filter攔截器(攔截*.action請求)xml

    二、struts.xml首先要關聯約束文檔對象

 <package name="default" namespace="/" extends="strutd-default">
     <action name="saveBook" class="com.atguigu.bean.Book" method="save">
         <result name="toDetailPage">detailpage.jsp</result>
    </action>
</package>

標籤package的做用是定義一個功能模塊,其name屬性做爲標識是必填項,便於其餘package引用,extends是繼承了默認的配置。namespace也採用了默認配置,若是採用自定義名稱空間,則訪問這個package中定義的action時,必須在路徑中加上名稱空間值。

action對應着請求,class屬性指定處理請求的類,method屬性爲處理請求的具體方法,result則對應響應,注意其name屬性值。

    ③Action類

    類中的set方法是注入請求參數,get方法做用是在jsp文件中利用EL表達式取出數據顯示出來。固然,在標籤action中指定了method的屬性值爲save,這個save就是Action類中處理請求的具體方法,此方法有固定的格式:

            1)public 權限

            2)String返回值類型

           3) 沒有參數

 

2、值棧

Struts2中的request對象不是Servlet容器建立的request對象了。

 public class StrutsRequestWrapper extends HttpServletRequestWrapper{
 public Object getAttribute(String key){
  if(key==null){
    throw new NullPointerException("You must specify a key value");
  }
  if(){
    return super.getAttribute(key);
  }
  ActionContext ctx=ActionContext.getContext();
  Object attribute=super.getAttribute(key);
      if(ctx!=null&&attribute==null){
       boolean alreadyIn=isTrue((Boolean)ctx.get(REQUEST_WRAPPER_GET_ATTRIBUTE));
       if(!alreadyIn&&!key.contains("#")){
        try{
             ctx.put(REQUEST_WRAPPER_GET_ATTRIBUTE, Boolean.TRUE);
             ValueStack stack=ctx.getValueStack();
             if(stack!=null){
                  attribute=stack.findValue(key);
       }catch(Exception e){
          ...
       }finally{
      ctx.put(REQUEST_WRAPPER_GET_ATTRIBUTE, Boolean.FALSE);
     }
    }
   }
  }
  return attribute;
 }
}

它修改了getAttribute()方法,但除了request以外,獲取的response和ServletContext對象依然是原生的,太晚了,明天繼續,但願本身能堅持下來

相關文章
相關標籤/搜索