91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

servlet基礎是什么

發布時間:2021-10-19 16:01:05 來源:億速云 閱讀:123 作者:柒染 欄目:大數據

servlet基礎是什么,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

什么是servlet

Servlet是在服務器上運行的一個小程序,一個servlet就是一個java類,并且可以通過“請求-響應”編程模型來訪問的這個駐留在服務器內存里的servlet程序。如下圖所示: servlet基礎是什么

比如說瀏覽器去訪問部署在tomcat中的項目,既然是訪問,總得有一個訪問地址,而且訪問后要處理的事情處理完了也需要將該返回的東西給到瀏覽器,那么這個地址是怎么樣的呢?或者說這個請求是誰處理的呢?這里就需要使用到servlet的了,也就是servlet是用來接收瀏覽器的請求并且最后將結果返回的那一道處理程序。

servlet是javaWeb的三大組件之一,另外兩個是Filter(攔截器),Listener(監聽器)

tomcat容器等級

tomcat的容器分為四個等級,分別是container容器->engine容器->host(也就是主機容器)->servlet容器,等級是從大到小,也就是前面的容器時包含后面的容器,servlet容器管理context容器,一個context(上下文)對應一個web工程

編寫一個簡單的servlet的步驟

  • 自定義的類,該類有三種實現方式

    • 方式一就是編寫一個類之后去實現Servlet接口(必須重寫該接口里面所有的抽象方法)

    • 方式二就是編寫一個類繼承GenericServlet抽象類(重寫生命周期的service方法),GenericServlet抽象類實現了Servlet接口,還實現了GenericConfig接口,GenericServlet其實是定義的一個一般的、與協議無關的servlet。

    • 方式三就是編寫一個類去繼承HttpServlet抽象類(沒有抽象方法,根據頁面的提交方式重寫doGet或者doPost方法),HttpServlet這是基于http協議的,也是使用的最多的

  • 如果是繼承HttpServlet抽象類就需要重寫doGet()或者doPost()方法,這里取決于使用哪種方式提交,get請求就重寫doGet,post請求就重寫doPost(但是需要注意的是并不是只有這兩種提交方式,還有put,delele請求)。

    • 這里只是重寫doGet或者doPost方法是因為即使重寫service方法,但是service方法里面也是調用的doGet或者doPost方法,所以不需要重寫service方法

    • 至于為什么不重寫doPut或doDelete等方法,是因為最常用的是doPost和doGet,而且使用doPost方法也能實現doDelet和doPut請求的功能,所以也是沒有必要。

  • 在web.xml中注冊servlet,主要配置的是servlet和servlet-mapping標簽

    	<?xml version="1.0" encoding="UTF-8"?>
    	<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <!--servlet與servlet-mapping一定是成對出現的,servlet標簽是配置servlet處理的類,但是訪問規則并沒有配置,所以就需要使用servlet-mapping標簽來配置-->
    <servlet>
        <!--servlet的名字-->
        <servlet-name>ServletDemo</servlet-name>
        <!--具體的servlet的類-->
        <servlet-class>servletPackage.ServletDemo</servlet-class>
    </servlet>
    <servlet-mapping>
        <!--指定與映射的servlet的名字-->
        <servlet-name>ServletDemo</servlet-name>
        <!--servlet的具體映射路徑-->
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
    	</web-app>

    后面的url-pattern其實是我們配置的訪問路徑,比如這里配置的是/hello,那么在訪問的時候就需要是http://ip:端口/項目名/hello, 這樣就可以對應到這里的url-pattern,然后通過servlet-mapping里面的servlet-name找到與之匹配的servlet標簽里面的servlet-name,這樣就可以找到servlet標簽里面的servlet-class(也就是請求的處理類)。

eclipse中創建一個servlet

  • 第一種方式就是直接new一個servlet(這里建立的方式其實是實現HttpServlet抽象類) servlet基礎是什么

  • 第二種則是在創建類的時候實現Servlet接口 servlet基礎是什么

添加servl-api.jar包

如果使用第一種方式建立的servlet顯示沒有導包或者第二種方式時搜索servlet沒有結果則說明是沒有添加Servlet-api.jar包。 添加方式有兩步:

  • 在eclipse中配置tomcat 在window->perference中添加 servlet基礎是什么

  • 第二步就是添加將tomcat添加到運行環境 添加方式是選中項目右鍵打開Properties->java Bulid path->Libraries->Add Libraries->Server Runtime,選擇tomcat服務器即可。

在idea中創建一個servlet

參考文章

servlet的生命周期

從方法層面上看

主要是三個方法 init->service->destory

  • 當servlet被第一次訪問的時候init會被調用,說明servlt的實例默認情況下是第一次訪問的時候被創建的。(但是可以自己修改),該實例只會被創建一次。說明servlet的實例是單例的。

  • service方法是只要有請求就會被調用

  • 當服務器關閉時destory方法會被調用

當tomcat啟動時創建servlet實例

上面已經說過在默認情況下,servlet實例是在第一次訪問的時候被創建的,也就是說即使tomcat服務器已經啟動了,但是只要沒有請求過來那么servlet實例還是不會被創建,不過這一點是可以自己修改的,可以在web.xml中修改:

<servlet>
    <!--servlet的名字-->
    <servlet-name>ServletDemo</servlet-name>
    <!--具體的servlet的類-->
    <servlet-class>servletPackage.ServletDemo</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

需要注意的是load-on-startup這個標簽的值必須是大于等于0的整數,所有添加了該標簽的servlet,都會在tomcat啟動時創建,該元素的值是一個序號,tomcat會使用這個序號給多個servlet排序,然后在tomcat啟動時會按照這個順序來創建servlet的實例對象。

  • load-on-startup元素標記容器是否在啟動的時候就加載這個servlet(實例化并調用其init()方法)。

  • 它的值必須是一個整數,表示servlet應該被載入的順序

  • 當值為0或者大于0時,表示容器在應用啟動時就加載并初始化這個servlet;

  • 當值小于0或者沒有指定時,則表示容器在該servlet被選擇時才會去加載。

  • 正數的值越小,該servlet的優先級越高,應用啟動時就越先加載。

  • 當值相同時,容器就會自己選擇順序來加載。

ServletConfig

在使用HttpServlet時會有兩個init方法,其中一個含有ServletConfig參數,ServletConfig主要有四個方法,其中有兩個方法是獲取初始化參數的:分別是getInitParameter和getInitParameterNames

String getServletName();
ServletContext getServletContext();
String getInitParameter(String var1);
Enumeration<String> getInitParameterNames();

初始化參數

上面講到ServletConfig中有兩個方法是獲取初始化參數的,那么什么是初始化參數呢?其實就是在servlet標簽中的init-param標簽里面配置的值:

<servlet>
    <!--servlet的名字-->
    <servlet-name>ServletDemo</servlet-name>
    <!--具體的servlet的類-->
    <servlet-class>servletPackage.ServletDemo</servlet-class>
    <init-param>
        <param-name>username</param-name>
        <param-value>1341234</param-value>
    </init-param>
    <init-param>
        <param-name>password</param-name>
        <param-value>helloworldnas</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

上面的配置文件中在servlet標簽里面配置了兩個init-param,里面配置的就是初始化參數。(這里只是示例,初始化參數一般在框架中使用的比較多)

獲取初始化參數

@Override
public void init(ServletConfig config) throws ServletException {
    String username = config.getInitParameter("username");
    String password = config.getInitParameter("password");
    System.out.println(username + "," + password);
    super.init(config);
}

上面的代碼就是在init方法里面通過servletConfig對象獲取配置的參數。

servlet路徑匹配

關于url-pattern路徑匹配有三種方式:

  1. 完全路徑匹配 以/開頭 比如 /aaa /aaa/bbb

  2. 目錄匹配 以/開頭 比如 /aaa/* /*

  3. 擴展名匹配 不能以 /開頭 例如 *.do, *.action

優先級:完全路徑匹配>目錄匹配>擴展名匹配

servletContext

  • web容器在啟動時,它會為每一個 web容器應用程序創建一個對應的servletContext對象,它代表當前web應用

  • 由于一個web應用中所有的servlet公用一個servletContext對象,因此servlet對象之間可以通過servletContext對象來實現通訊,servletContext對象通常被稱為context域對象。

既然servletContext是全局的一個對象,那么就可以配置全局的參數,之前在servlet標簽里面配置過init-param,但是那里面的參數只是針對那一個servlet有用,如果想要所有的servlet都可以用,那么就需要配置在servletContext中:

<context-param>
    <param-name>username</param-name>
    <param-value>13412432</param-value>
</context-param>
<!--servlet與servlet-mapping一定是成對出現的,servlet標簽是配置servlet處理的類,但是訪問規則并沒有配置,所以就需要使用servlet-mapping標簽來配置-->
<servlet>
    <!--servlet的名字-->
    <servlet-name>ServletDemo</servlet-name>
    <!--具體的servlet的類-->
    <servlet-class>servletPackage.ServletDemo</servlet-class>
    <init-param>
        <param-name>username</param-name>
        <param-value>1341234</param-value>
    </init-param>
    <init-param>
        <param-name>password</param-name>
        <param-value>helloworldnas</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

從上面的配置文件中可以看到在context-param中配置的就是全局的servletContext中的值,然后在ServletContext對象中獲取,該對象可以從ServletConfig中得到,當然也可以從父類的getServletContext方法中直接獲取:

public void init(ServletConfig config) throws ServletException {
    ServletContext servletContext = config.getServletContext();
    String username = servletContext.getInitParameter("username");
    System.out.println(username);
    super.init(config);
}

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

叙永县| 固原市| 遵义市| 彩票| 秦安县| 祁连县| 宁强县| 绥阳县| 长泰县| 和顺县| 荔浦县| 肃宁县| 仁化县| 天长市| 华阴市| 黎城县| 永安市| 保靖县| 丁青县| 威海市| 诸城市| 紫阳县| 甘泉县| 玉溪市| 镇远县| 五家渠市| 辽中县| 泸水县| 札达县| 申扎县| 安义县| 阿拉善右旗| 黑水县| 木兰县| 新竹市| 英德市| 怀化市| 浦江县| 博乐市| 酒泉市| 常熟市|