<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 功能強大 支持多語言、二開方便! 廣告
                Web 技術成為當今主流的互聯網 Web 應用技術之一,而 Servlet 是 Java Web 技術的核心基礎。這篇博客主要幫助大家了解一個 Web 工程在 Servlet 容器中是如何啟動的? S用戶的請求是如何被分配給指定的 Servlet 的? Servlet 容器如何管理 Servlet 生命周期?cookie和session是如何應用的? ?什么是Servlet? 1)Servlet是Java類 2)Servlet是一個繼承httpServlet類的類 3)這個在服務器端進行,用來處理客戶端的請求 ?Servlet容器 要介紹Servlet要先從Servlet容器說起,Servlet與Servlet容器的關系就像槍和子彈的關系,槍為子彈而生,子彈讓槍有了很大的殺傷力。它們彼此依存、又相互獨立發展。而從技術層面來講,它們為了解耦,通過標準化接口來相互協作。 在Tomcat的容器等級中Context容器直接影響Servlet的工作方式。 ![](https://box.kancloud.cn/2016-03-10_56e132d708e34.jpg) 從圖中可以看出,真正管理Servlet的容器是Context容器,一個Context容器對應一個web工程。 ? 初始化Servlet 初始化 Servlet 在 StandardWrapper 的 initServlet 方法中,這個方法很簡單就是調用 Servlet 的 init 的方法,同時把包裝了 StandardWrapper 對象的 StandardWrapperFacade 作為 ServletConfig 傳給 Servlet。Tomcat 容器為何StandardWrapperFacade 給 Servlet 對象將在后面做詳細解析。 如果該 Servlet 關聯的是一個 jsp 文件,那么前面初始化的就是 JspServlet,接下去會模擬一次簡單請求,請求調用這個 jsp 文件,以便編譯這個 jsp 文件為 class,并初始化這個 class。 這樣 Servlet 對象就初始化完成了,事實上 Servlet 從被 web.xml 中解析到完成初始化,這個過程非常復雜,中間有很多過程,包括各種容器狀態的轉化引起的監聽事件的觸發、各種訪問權限的控制和一些不可預料的錯誤發生的判斷行為等等。但是我們只需要先抓住框架,對Servlet有一個基本的了解。 下面是一幅關于初始化Servlet的時序圖(選自[Servlet 工作原理解析](http://www.ibm.com/developerworks/cn/java/j-lo-servlet/)) ![](https://box.kancloud.cn/2016-03-10_56e132d7261f2.jpg) ? Servlet的生命周期 Servlet生命周期就是指創建Servlet實例后,存在的時間以及何時銷毀的整個過程. --Servlet生命周期有三個方法   init()方法:   service()方法:Dispatches client requests to the protected?service?method    destroy()方法:Called by the servlet container to indicate to a servlet that the servlet is being taken out of service. --Servlet生命周期的各個階段   ----實例化:Servlet容器創建Servlet實例   ----初始化:調用init()方法   ----服務:如果有請求,調用service()方法   ----銷毀:銷毀實例前調用destroy()方法   ----垃圾收集:銷毀實例 ? 關于Servlet的實例 ~~~ <span style="font-family:FangSong_GB2312;font-size:18px;">package cn.dragon.servlet; //導入相應的Jar包 import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class ServletExample extends HttpServlet {      //用于獲取請求     public void doGet(HttpServletRequest request, HttpServletResponse response)        throws ServletException, IOException {         response.setContentType("text/html;charset=GB2312"); //這條語句指明了向客戶端發送的內容格式和采用的字符編碼,當程序出現漢字的亂碼,可以通過修改此處的字符編碼來解決問題。        PrintWriter out = response.getWriter();          out.println(" 您好!"); //利用PrintWriter對象的方法將數據發送給客戶端         out.close();      }      //用于處理客戶端發送的POST請求      public void doPost(HttpServletRequest request, HttpServletResponse response)        throws ServletException, IOException {        doGet(request, response); //這條語句的作用是,當客戶端發送POST請求時,調用doGet()方法進行處理      } }</span> ~~~ ? Cookie和Session Session 與 Cookie 的作用都是為了保持訪問用戶與后端服務器的交互狀態。它們有各自的優點也有各自的缺陷。然而具有諷刺意味的是它們優點和它們的使用場景又是矛盾的,例如使用 Cookie 來傳遞信息時,隨著 Cookie 個數的增多和訪問量的增加,它占用的網絡帶寬也很大,試想假如 Cookie 占用 200 個字節,如果一天的 PV 有幾億的時候,它要占用多少帶寬。所以大訪問量的時候希望用 Session,但是 Session 的致命弱點是不容易在多臺服務器之間共享,所以這也限制了 Session 的使用。 cookie建立在客戶端,默認在指定路徑下生成txt文件,cookie分為兩種,一種是屬于窗口(或子窗口)放在內存中;另一種屬于文本(有生命周期)。當cookie被設置生命周期后,在生命周期的范圍內,該cookie文件會被保留,一旦超出便會自動刪除,釋放空間資源。瀏覽器可以阻止服務器寫入信息,也就是“選項”中“禁用cookies”. session : 是一個會話,下面是一張圖: ![](https://box.kancloud.cn/2016-03-10_56e132d7449ba.jpg) 圖中是張三和李四訪問服務器的情況,首次訪問該服務器時系統會自動為張三和李四分配一個session區域,且該區域具有一個唯一的sessionId。當瀏覽器關閉后,會斷開與服務器的連接,當用戶第二次訪問該瀏覽器,會通過自身攜帶的sessionId來搜索對應的session區域。進而實現相應信息的判斷,讀寫等操作。和cookie一樣,都有一個生命周期,session超時后,該session資源會自動釋放。 但是一旦cookie被瀏覽器禁用后,session將無法使用。這就需要使用“重寫URL”的方法: ![](https://box.kancloud.cn/2016-03-10_56e132d75ebba.jpg) 以上就是這段時間我對Servlet的理解了,如有問題或者好的建議歡迎大家不吝賜教!
                  <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>

                              哎呀哎呀视频在线观看