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

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                雖然Servlet已經使用很多了,但是一直都僅局限在其使用操作上。 最近有空想對它進行一個相對全面的了解。 下面是博主整理的一篇博文。 ### 一、Servlet簡介 Servlet(Server Applet),全稱Java Servlet,未有中文譯文。是用Java編寫的服務器端程序。其主要功能在于交互式地瀏覽和修改數據,生成動態Web內容。狹義的Servlet是指Java語言實現的一個接口,廣義的Servlet是指任何實現了這個Servlet接口的類,一般情況下,人們將Servlet理解為后者。 Servlet運行于支持Java的應用服務器中。從原理上講,Servlet可以響應任何類型的請求,但絕大多數情況下Servlet只用來擴展基于HTTP協議的Web服務器。 ### 二、Servlet 工作原理 **web應用的初始化工作(創建servlet對象)** 一般在Java Web項目中,我們使用Servlet,其配置是在web.xml中的。而應用的初始化主要是解析web.xml文件。 Web應用的初始化工作是在ContextConfig的configureStart方法中實現的,應用的初始化主要是解析web.xml文件,這個文件描述了一個Web應用的關鍵信息,也是一個Web應用的入口。web.xml文件中的各個配置項將會解析成相應的屬性保存在WebXml對象中。WebXml對象中的屬性又會被設置到Context容器中,這里包括創建Servlet對象、filter、listener等,所以說Context容器才是真正運行Servlet的Servlet容器。一個Web應用對應一個Context容器,容器的配置屬性由應用的web.xml指定。 **Servlet如何工作** 用戶從瀏覽器向服務器發起的一個請求通常會包含如下信息:[http://hostname:port/contextpath/servletpath](http://hostname:port/contextpath/servletpath),hostname和port用來與服務器建立TCP連接,后面的URL才用來選擇在服務器中哪個子容器服務用戶的請求。在Tomcat中URL與Servlet容器通過類org.apache.tomcat.util.http.mapper來完成映射,Mapper會根據請求的hostname和contextpath將host和context容器設置到Request的mappingData屬性中。 Servlet能幫我們完成所有工作,但是現在的Web應用很少直接將交互的全部頁面用Servlet來實現,而是采用更加高效的MVC框架來實現。這些MVC框架的基本原理是將所有的請求都映射到一個Servlet,然后去實現service方法,這個方法也就是MVC框架的入口。 當Servlet從Servlet容器中移除時,也表明該Servlet的生命周期結束了,這時Servlet的destroy方法將被調用,做一些掃尾工作 **Servlet 生命周期** Servlet 生命周期可被定義為從創建直到毀滅的整個過程。以下是 Servlet 遵循的過程: ~~~ Servlet 通過調用 init () 方法進行初始化。 Servlet 調用 service() 方法來處理客戶端的請求。 Servlet 通過調用 destroy() 方法終止(結束)。 最后,Servlet 是由 JVM 的垃圾回收器進行垃圾回收的。 ~~~ ~~~ init() 方法 init 方法被設計成只調用一次。它在第一次創建 Servlet 時被調用,在后續每次用戶請求時不再調用。因此,它是用于一次性初始化,就像 Applet 的 init 方法一樣。 Servlet 創建于用戶第一次調用對應于該 Servlet 的 URL 時,但是您也可以指定 Servlet 在服務器第一次啟動時被加載。 當用戶調用一個 Servlet 時,就會創建一個 Servlet 實例,每一個用戶請求都會產生一個新的線程,適當的時候移交給 doGet 或 doPost 方法。init() 方法簡單地創建或加載一些數據,這些數據將被用于 Servlet 的整個生命周期。 ~~~ ~~~ service() 方法 service() 方法是執行實際任務的主要方法。Servlet 容器(即 Web 服務器)調用 service() 方法來處理來自客戶端(瀏覽器)的請求,并把格式化的響應寫回給客戶端。 每次服務器接收到一個 Servlet 請求時,服務器會產生一個新的線程并調用服務。service() 方法檢查 HTTP 請求類型(GET、POST、PUT、DELETE 等),并在適當的時候調用 doGet、doPost、doPut,doDelete 等方法。 ~~~ ~~~ doGet() 方法 GET 請求來自于一個 URL 的正常請求,或者來自于一個未指定 METHOD 的 HTML 表單,它由 doGet() 方法處理。 ~~~ ~~~ doPost() 方法 POST 請求來自于一個特別指定了 METHOD 為 POST 的 HTML 表單,它由 doPost() 方法處理。 ~~~ ~~~ destroy() 方法 destroy() 方法只會被調用一次,在 Servlet 生命周期結束時被調用。destroy() 方法可以讓您的 Servlet 關閉數據庫連接、停止后臺線程、把 Cookie 列表或點擊計數器寫入到磁盤,并執行其他類似的清理活動。 ~~~ ### 三、Servlet使用實例 實例使用前提:已經配置好了JDK和Tomcat 下面我們準備好如下東西: **(1)Servlet:HelloWorld.java** ~~~ // 導入必需的 java 庫 import java.io.*; import javax.servlet.*; import javax.servlet.http.*; // 擴展 HttpServlet 類 public class HelloWorld extends HttpServlet { private String message; public void init() throws ServletException { // 執行必需的初始化 message = "Hello World"; } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 設置響應內容類型 response.setContentType("text/html"); // 實際的邏輯是在這里 PrintWriter out = response.getWriter(); out.println("<h1>" + message + "</h1>"); } public void destroy() { // 什么也不做 } } ~~~ **(2)servlet-api.jar** 需要依賴servlet-api.jar包無須做過多解釋,這里面包含了Servlet相關接口類。 博主已經提供了相應的jar包供猿友們下載:? [http://download.csdn.net/detail/u013142781/9446459](http://download.csdn.net/detail/u013142781/9446459) 接下來還需要如下操作: (1)將HelloWorld.java和servlet-api.jar放到D:\servlettest下。(猿友如果放到其他目錄,下面的設置應作相應修改) (2)環境變量CLASSPATH中添加servlet-api.jar存放路徑,博主的是D:\servlettest\servlet-api.jar (3)打開cmd,進入到D:\servlettest(cd D:\servlettest),然后執行命令javac HelloWorld.java,編譯 Servlet。 (4)編譯成功后發現D:\servlettest下多了個HelloWorld.class文件。 (5)將HelloWorld.class文件放到tocmat的webapps\ROOT\WEB-INF\classes下(如果沒有classes,自己新建一個放進去) (6)tocmat的webapps\ROOT\WEB-INF\web.xml文件添加如下配置: ~~~ <servlet> <servlet-name>HelloWorld</servlet-name> <servlet-class>HelloWorld</servlet-class> </servlet> <servlet-mapping> <servlet-name>HelloWorld</servlet-name> <url-pattern>/HelloWorld</url-pattern> </servlet-mapping> ~~~ 博主的web.xml配置后是這樣的: ~~~ <?xml version="1.0" encoding="ISO-8859-1"?> <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0" metadata-complete="true"> <display-name>Welcome to Tomcat</display-name> <description> Welcome to Tomcat </description> <servlet> <servlet-name>HelloWorld</servlet-name> <servlet-class>HelloWorld</servlet-class> </servlet> <servlet-mapping> <servlet-name>HelloWorld</servlet-name> <url-pattern>/HelloWorld</url-pattern> </servlet-mapping> </web-app> ~~~ (7)接下來雙擊tomcat的bin目錄下的startup.sh來啟動tomcat。 (8)訪問路徑:[http://localhost:8080/HelloWorld](http://localhost:8080/HelloWorld),效果如下: ![](https://box.kancloud.cn/2016-03-15_56e77dbad5386.jpg)
                  <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>

                              哎呀哎呀视频在线观看