<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    java學(xué)習(xí)

    java學(xué)習(xí)

     

    Context上下文的區(qū)別

    在 java 中, 常見的 Context 有很多, 

     像: ServletContext, ActionContext, ServletActionContext, ApplicationContext, PageContext, SessionContext ...

     那么, Context 究竟是什么東西呢? 直譯是上下文、環(huán)境的意思。比如像: "今天我收到了一束花, 男朋友送的!" 又或者 "今天我收到了一束花, 送花的人送錯了的!"

     同樣是收到一束花, 在不同的上下文環(huán)境中表達的意義是不一樣的。

     同樣的, Context 其實也是一樣, 它離不開所在的上下文環(huán)境, 否則就是斷章取義了。

     另外, 在網(wǎng)絡(luò)上也有些人把 Context 看成是一些公用信息或者把它看做是一個容器的, 個人覺得這種解釋稍好。

     接下來說說 ServletContext, ActionContext, ServletActionContext。
     
     1> ServletContext

     一個 WEB 運用程序只有一個 ServletContext 實例, 它是在容器(包括 JBoss, Tomcat 等)完全啟動 WEB 項目之前被創(chuàng)建, 生命周期伴隨整個 WEB 運用。

     當在編寫一個 Servlet 類的時候, 首先是要去繼承一個抽象類 HttpServlet, 然后可以直接通過 getServletContext() 方法來獲得 ServletContext 對象。

     這是因為 HttpServlet 類中實現(xiàn)了 ServletConfig 接口, 而 ServletConfig 接口中維護了一個 ServletContext 的對象的引用。

     利用 ServletContext 能夠獲得 WEB 運用的配置信息, 實現(xiàn)在多個 Servlet 之間共享數(shù)據(jù)等。

     eg:
     

      
    <?xml version="1.0" encoding="UTF-8"?>

      <context-param>
        <param-name>url</param-name>
        <param-value>jdbc:oracle:thin:@localhost:1521:ORC</param-value>
      </context-param>
      <context-param>
        <param-name>username</param-name>
        <param-value>scott</param-value>
      </context-param>
      <context-param>
        <param-name>password</param-name>
        <param-value>tigger</param-value>
      </context-param>
      
      <servlet>
        <servlet-name>ConnectionServlet</servlet-name>
        <servlet-class>net.yeah.fancydeepin.servlet.ConnectionServlet</servlet-class>
      </servlet>
      <servlet-mapping>
        <servlet-name>ConnectionServlet</servlet-name>
        <url-pattern>/ConnectionServlet.action</url-pattern>
      </servlet-mapping>
      
      <servlet>
        <servlet-name>PrepareConnectionServlet</servlet-name>
        <servlet-class>net.yeah.fancydeepin.servlet.PrepareConnectionServlet</servlet-class>
      </servlet>
      <servlet-mapping>
        <servlet-name>PrepareConnectionServlet</servlet-name>
        <url-pattern>/PrepareConnectionServlet.action</url-pattern>
      </servlet-mapping>

    </web-app>
      

     

      
    package net.yeah.fancydeepin.servlet;

    import java.io.IOException;
    import javax.servlet.ServletContext;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;

    public class PrepareConnectionServlet extends HttpServlet {

        private static final long serialVersionUID = 1L;

        public void init() throws ServletException {
            
            ServletContext context = getServletContext();
            String url = context.getInitParameter("url");
            String username = context.getInitParameter("username");
            String password = context.getInitParameter("password");
            context.setAttribute("url", url);
            context.setAttribute("username", username);
            context.setAttribute("password", password);
        }

        protected void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{
            
            doPost(request, response);
        }

        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            
            response.sendRedirect("ConnectionServlet.action");
        }
    }

      

     

      
    package net.yeah.fancydeepin.servlet;

    import java.io.IOException;
    import javax.servlet.ServletContext;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.http.HttpServlet;

    public class ConnectionServlet extends HttpServlet {

        private static final long serialVersionUID = 1L;

        public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
            
            ServletContext context = getServletContext();
            System.out.println("***************************************");
            System.out.println("URL: " + context.getAttribute("url"));
            System.out.println("Username: " + context.getAttribute("username"));
            System.out.println("Password: " + context.getAttribute("password"));
            System.out.println("***************************************");
            super.service(request, response);
        }
    }
      

     
     當訪問 PrepareConnectionServlet.action 時, 后臺打印輸出:
     

      
    ***********************************************
    URL:  jdbc:oracle:thin:@localhost:1521:ORC
    Username:  scott
    Password:  tigger
    ***********************************************
      


     
     2> ActionContext
     
     ActionContext 是當前 Action 執(zhí)行時的上下文環(huán)境, ActionContext 中維護了一些與當前 Action 相關(guān)的對象的引用, 

     如: Parameters (參數(shù)), Session (會話), ValueStack (值棧), Locale (本地化信息) 等。
     
     在 Struts1 時期, Struts1 的 Action 與 Servlet API 和 JSP 技術(shù)的耦合度都很緊密, 屬于一個侵入式框架:

      
    public ActionForward execute(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response){
        // TODO Auto-generated method stub
        return null;
    }
      


     到了 Struts2 時期, Struts2 的體系結(jié)構(gòu)與 Struts1 之間存在很大的不同。Struts2 在 Struts1 的基礎(chǔ)上與 WebWork 進行了整合, 成為了一個全新的框架。

     在 Struts2 里面, 則是通過 WebWork 來將與 Servlet 相關(guān)的數(shù)據(jù)信息轉(zhuǎn)換成了與 Servlet API 無關(guān)的對象, 即 ActionContext 對象。

     這樣就使得了業(yè)務(wù)邏輯控制器能夠與 Servlet API 分離開來。另外, 由于 Struts2 的 Action 是每一次用戶請求都產(chǎn)生一個新的實例, 因此, 

     ActionContext 不存在線程安全問題, 可以放心使用。

      
    package net.yeah.fancydeepin.action;

    import java.util.Map;
    import com.opensymphony.xwork2.ActionContext;
    import com.opensymphony.xwork2.ActionSupport;
    import com.opensymphony.xwork2.util.ValueStack;

    public class ContextAction extends ActionSupport {

        private static final long serialVersionUID = 1L;
        private String username;
        private String password;

        public String execute(){
            
            ActionContext context = ActionContext.getContext();
            ValueStack value = context.getValueStack();
            value.set("username", username);
            value.set("password", password);
            Map<String, Object> session = context.getSession();
            session.put("url", "http://www.tkk7.com/fancydeepin");
            return SUCCESS;
        }

        public void setUsername(String username) {
            this.username = username;
        }

        public void setPassword(String password) {
            this.password = password;
        }
    }

      

     

      
    <s:property value="username"/><BR>
    <s:property value="password"/><BR>
    <s:property value="#session.url"/><BR>
      

     

     當訪問 context.action 并傳給相應(yīng)的參數(shù)的時候, 在瀏覽器中會輸出相應(yīng)的信息。

     留意到上面 Struts2 的 Action 中并有沒添加屬性的 getting 方法, 而是手動的將參數(shù)值放到值棧(ValueStack)中的, 否則頁面是得不到參數(shù)來輸出的。

     3> ServletActionContext

     首先, ServletActionContext 是 ActionContext 的一個子類。ServletActionContext 從名字上來看, 意味著它與 Servlet API 緊密耦合。


     ServletActionContext 的構(gòu)造子是私有的, 主要是提供了一些靜態(tài)的方法, 可以用來獲取: ActionContext, ActionMapping, PageContext, 

     HttpServletRequest, HttpServletResponse, ServletContext, ValueStack, HttpSession 對象的引用。
     

      
    public String execute(){
            
        //或 implements ServletRequestAware
        HttpServletRequest request = ServletActionContext.getRequest();
        //或 implements ServletResponseAware
        HttpServletResponse response = ServletActionContext.getResponse();
        //或 implements SessionAware
        HttpSession session = request.getSession();
        //或 implements ServletContextAware
        ServletContext context = ServletActionContext.getServletContext();
            
        return SUCCESS;
    }
      

    posted on 2013-04-01 20:45 楊軍威 閱讀(201) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     

    導(dǎo)航

    統(tǒng)計

    常用鏈接

    留言簿

    隨筆檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲码国产精品高潮在线| 在线观看亚洲免费视频| 亚洲乱码中文字幕综合| 日韩在线一区二区三区免费视频 | 美女被免费网站视频在线| 午夜成人免费视频| 涩涩色中文综合亚洲| 在线成人a毛片免费播放| 亚洲AV无码一区二区三区性色| 暖暖免费高清日本中文| 狠狠入ady亚洲精品| 亚洲精品和日本精品| 国产精品美女久久久免费 | 无忧传媒视频免费观看入口| 日本中文一区二区三区亚洲| 一道本不卡免费视频| 日韩亚洲人成在线综合日本| 99久久久国产精品免费牛牛四川 | 亚洲码国产精品高潮在线| 日本在线免费播放| 亚洲AV无码乱码麻豆精品国产| AV免费网址在线观看| 国产91成人精品亚洲精品| 亚洲日韩中文字幕日韩在线 | 精品一区二区三区免费视频| 亚洲AV综合色区无码另类小说| 18以下岁毛片在免费播放| 亚洲私人无码综合久久网| 免费一级特黄特色大片在线观看| 一区在线免费观看| 久久精品国产亚洲77777| 大地资源在线观看免费高清| 国产精品亚洲综合天堂夜夜| 亚洲精品无码久久久影院相关影片| 91人人区免费区人人| 亚洲精品国产高清在线观看| 在线a亚洲v天堂网2019无码| 欧洲乱码伦视频免费| 免费人成视频在线观看免费| 亚洲欧洲日韩不卡| 四虎永久成人免费影院域名|