<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                ## 三種方式 1. 通過ActionContext. 2. 實現特定接口的方式. 3. 通過ServletActionContext對象靜態方法實現. ## 通過ActionContext(數據中心) ActionContext是application域,session域,request域三域合一.每次請求時都會創建一個與請求對應的ActionContext.請求處理完ActionContext銷毀. struts2將ActionContext創建好之后,將ActionContext與當前線程綁定,我們 要獲得ActionContext只需從ThreadLocal中獲取即可. ~~~ ActionContext context = ActionContext.getContext(); //獲取application域 Map<String, Object> application = context.getApplication(); //獲取session域 Map<String, Object> session = context.getSession(); //獲取request域(struts2不推薦使用request域,因為request生命周期和ActionContext是一樣的) Map<String, Object> request = (Map<String, Object>) context.get("request"); //推薦使用下面的方式 context.put("name", "jack"); ~~~ ## ServletActionContext對象靜態方法實現(不推薦) ~~~ //獲取原生request ServletActionContext.getRequest(); //獲取原生response ServletActionContext.getResponse(); //獲取原生servletContext ServletActionContext.getServletContext(); //獲取原生session ServletActionContext.getRequest(); ~~~ ## 實現特定接口的方式(不推薦) 必須把request和response放在私有的屬性中其他方法才能使用. 但是servlet是單實例的.會引發線程危機.所以我們幾乎不在servlet中定義成員屬性. ~~~ public class HelloAction extends ActionSupport implements ServletRequestAware, ServletResponseAware { private javax.servlet.http.HttpServletRequest httpServletRequest; private HttpServletResponse httpServletResponse; @Override public void setServletRequest(javax.servlet.http.HttpServletRequest httpServletRequest) { } @Override public void setServletResponse(HttpServletResponse httpServletResponse) { } } ~~~ ## 線程危機:什么情況下有線程危機? 當多個線程操作了共享的數據(單實例),就容易發生線程安全問題. ## Action是單實例還是多實例? 多實例.以下例子可以證明,每次訪問構造方法都會執行.所以是多實例. ~~~ public class HelloAction extends ActionSupport { public HelloAction(){ System.out.println("action create"); } public String index() { ActionContext context = ActionContext.getContext(); return SUCCESS; } } ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看