<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>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                [TOC] ## 問題01:Servlet的概念及體系結構。 * 繼承了HttpServlet的Java類(實現了Servlet接口) * 功能強大(Java API、Servlet API) * 性能高效(采用線程而非進程) > servlet在處理請求采用的是線程,而不是一個進程。web服務器會為每一個客戶端的訪問請求創建一個線程,并在這個線程上調用Servlet的service方法。 > 但是如果訪問了同一個資源的話,就有可能引發線程安全問題。 > 采用synchronized關鍵字解決 ![](https://img.kancloud.cn/81/14/8114fb8ec0fff6ca4e7aa39ee3c0a81d_622x398.png) * [ ] serializable是java.io包中的序列化接口; * [ ] servlet接口、servletConfig接口定義了servlet的基本方法(用于接收和響應用戶的請求)并封裝了servlet的相關配置信息; * [ ] GenericServlet對象是一個抽象類,實現了上述的3個接口,并為servlet接口及ServletConfig接口提供了部分實現; * [ ] httpServlet子類繼承了GenericServlet,并對其中http請求處理進行了實現。 ## 問題02:Servlet的生命周期。 ![](https://img.kancloud.cn/51/d1/51d1bb4bca19a061e2caaf86ff3fc686_512x416.png) * [ ] **constructor**創建實例 > 由服務器容器自動完成—— 當客戶端向Servlet容器**首次**發出HTTP請求訪問Servlet時——**只調用一次** * [ ] **init**初始化 > 由服務器容器自動完成—— 當客戶端向Servlet容器**首次**發出HTTP請求訪問Servlet時——**只調用一次** ``` public void init(ServletConfig config) throws ServletException { String code = config.getInitParameter("code"); System.out.println("Servlet初始化編碼為:"+code); } ``` * [ ] **service**運行 > 根據用戶請求進行執行—— 當客戶端向Servlet容器發出HTTP請求訪問Servlet時——**每次請求都會調用** ``` public void service(ServletRequest req, ServletResponse res) ``` > Dispatches client requests to the protected service method. There's no need to override this method. ``` protected void service(HttpServletRequest req, HttpServletResponse resp) ``` > Receives standard HTTP requests from the public service method and **dispatches** them to the **doMethod** methods defined in this class. This method is an HTTP-specific version of the javax.servlet.Servlet.service method. **There's no need to override this method**. * [ ] **destroy**銷毀 > 由服務器容器自動完成—— 當服務器**關閉**或web應用**被移除出容器**時——**只調用一次** ![](https://img.kancloud.cn/08/ec/08ec6ed56d56224429e82b54570e0534_862x430.png) ## 問題03:Servlet的創建與配置。 ### Servlet的創建 ![](https://img.kancloud.cn/4d/53/4d53bb4562c570fd865d71d4ad22c06c_1144x870.png) ### Servlet的注解配置 ![](https://img.kancloud.cn/8b/c1/8bc15cf1a0ace2756048895e245fc2f0_1045x225.png) ### Servlet的XML配置 ![](https://img.kancloud.cn/77/fe/77fe9fbca9563f27a1369797759f9961_999x386.png) ## 問題04:如何控制Servlet的加載 * [ ] 注解方式 ``` loadOnStartup=number ``` ![](https://img.kancloud.cn/ed/f8/edf843e49ed3025bb4874a4063ad2c33_165x75.png) * [ ] 配置文件 ``` <load-on-startup>number<load-on-startup> ``` ![](https://img.kancloud.cn/e6/92/e692b720b621da578e2d360951baa966_400x53.png) load-on-startup 是 web.xml 中的一個節點,是 servlet 元素的子元素,用來標記 Servlet 容器啟動時是否初始化當前 Servlet,以及當前 Servlet 的初始化順序。 load-on-startup 元素取值規則如下: 1. 它的取值必須是一個整數; 2. 當值小于 0 或者沒有指定時,則表示容器在該 Servlet 被首次請求時才會被加載; 3. 當值大于 0 或等于 0 時,表示容器在啟動時就加載并初始化該?Servlet,取值越小,優先級越高; 4. 當取值相同時,容器就會自行選擇順序進行加載。 > @WebServlet 注解的 loadOnStartup 屬性與 web.xml 中的 load-on-startup 元素相對應,取值的規則和含義相同。 ## 問題05:Servlet編碼初始化(讀取編碼) ### 配置默認值 ![](https://img.kancloud.cn/96/57/965792afc5ef55b9434b14d8d242b513_906x214.png) ### ServletConfig讀取配置 ![](https://img.kancloud.cn/9f/3d/9f3d923b6e60961dc80b21e6683832f8_824x188.png) ``` response.setContentType("text/html;charset="+code); response.getWriter().print("編碼已經設置為:"+code); ``` ![](https://img.kancloud.cn/6c/15/6c159fb60bdb25a81d9bcc5ac7f8f07a_377x120.png) ## 問題06:ServletContext的獲取 ``` ServletContext application = request.getServletContext(); ``` > 可以通過上述方法,來獲得Servlet的一些基本信息,或者是將部分數據存儲在該對象中。 ## 問題07:Servlet開發步驟 1. 處理編碼 2. 接收視圖層傳遞的參數 3. 進行必要的數據驗證和類型轉換,若驗證失敗跳轉到步驟9 4. 對數據進行封裝 5. 初始化模型層對象,并調用模型層方法 6. 初始化結果變量保存模型層方法處理結果 7. 對必要的信息或者是標識進行保存 8. 根據處理結果,如果符合預期,請求轉發或者重定向到**正確**頁面 9. 如果不符合預期,請求轉發或者重定向到**錯誤**頁面
                  <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>

                              哎呀哎呀视频在线观看