Java Web -- Servlet(4) 開發Servlet的三種方法、配置Servlet詳解、Servlet的生命週期(1)

來源:互聯網
上載者:User

標籤:

一、實現Servlet介面

通過實現Servlet介面來瞭解Servlet的生命週期

(1)以規範的形式建立一個web應用(即在webapps目錄下建立一個web應用)

建立web應用

 

(2)classes目錄下建立一個.java(該java檔案為實現Servlet介面)

建立檔案夾MyFirstServlet.java

代碼如下:

package com.focus;

 

import javax.servlet.*;

import javax.servlet.http.*;

import java.io.*;

 

public class MyFirstServlet implements Servlet

{

//Servlet引擎會在Servlet執行個體化之後,置入服務之前精確地調用init方法。(初始化servlet,把servlet裝載到記憶體中)

//該函數只會被調用一次

public void init(ServletConfig config) throws ServletException{

}

//Servlet引擎調用這個方法以允許Servlet響應請求。這個方法在Servlet未成功初始化之前無法調用。(商務邏輯代碼都將寫在這個函數中)

//在被卸載後,還沒初始化時,service不被調用,其餘可重複調用

public void service(ServletRequest request, ServletResponse response)

             throws ServletException, IOException{

             System.out.println("Hello World!");

             response.getWriter().println("Hello World!"+new java.util.Date());

      }

//卸載servlet

    public void destroy(){

    

     }

//得到servlet的配置資訊

    public ServletConfig getServletConfig(){

     return null;

     }

//純文字的servlet資訊

   public String getServletInfo(){

        return null;

      }

 

}

編譯後出現錯誤,匯入的程式包找不到。

 

PS:使用dos編譯時間,該Java有包是 需要輸入的命令列格式為

Javac -d . name.java

(3)配置CLASSPATH  即指定到tomcat的lib目錄下的servlet-api.jar(其中有servlet-api.jar就是上面所引入的javax.servlet.*;javax.servlet.http.*;)。

在配置CLASSPATH時得指定到特定.jar

不能設定*.jar ,只能一個個寫,所以一般大的工程會配置一個啟動指令碼,專門計算出所有的jar包,然後匯入啟動環境中...

 

重啟cmd.exe,再重新編譯。即可

(4)配置與部署Servlet

<servlet>

   <servlet-name>MyFirstServlet</servlet-name>

   <display-name>MyFirstServlet</display-name>

   <servlet-class>com.focus.MyFirstServlet</servlet-class>

  </servlet>

  <servlet-mapping>

   <servlet-name>MyFirstServlet</servlet-name>

   <url-pattern>/My</url-pattern>

  </servlet-mapping>

 

(5)最後效果:

 



 

 

 

補充:當Tomcat啟動的時候首先會啟動一個server.xml,當servlet映射找不到對應的,tomcat啟動直接就報錯。

 

二、配置與部署Servlet

由於用戶端是通過URL地址訪問web伺服器中的資源,所以Servlet程式若想被外界訪問,必須把servlet程式映射到一個URL地址上。

<servlet>

//<servlet-name>註冊名、自訂一個servlet的名字

   <servlet-name>MyFirstServlet</servlet-name>

   <display-name>MyFirstServlet</display-name>

//</servlet-class>指定該servlet類放在哪個包中 形式 包/包/.../類(包名+類名)

   <servlet-class>com.focus.MyFirstServlet</servlet-class>

  </servlet>

//<servlet-mapping>servlet的映射(對一個已經註冊)

  <servlet-mapping>

//<servlet-name>自訂一個servlet的名字,但這個名字就代表當瀏覽器輸入/My這個web資源的時候,該名字就映射到與之對應的名字,找到該servlet所在的class

   <servlet-name>MyFirstServlet</servlet-name>

//<url-pattern>瀏覽器所輸入的Web資源名

   <url-pattern>/My</url-pattern>

  </servlet-mapping>

 

一個註冊好了的servlet可以被多次映射

如:<servlet>

   <servlet-name>1</servlet-name>

   <display-name>1</display-name>

   <servlet-class>com.focus.MyFirstServlet</servlet-class>

  </servlet>

  <servlet-mapping>

   <servlet-name>1</servlet-name>

   <url-pattern>/My</url-pattern>

  </servlet-mapping>

     <servlet-mapping>

   <servlet-name>1</servlet-name>

   <url-pattern>/Servlet/My</url-pattern>

  </servlet-mapping>

<servlet-name>1</servlet-name>

   <url-pattern>/Servlet/My.html</url-pattern>

  </servlet-mapping>

 

即輸入的Web資源不管是/My或 /Servlet/My或/Servlet/My.html都可以訪問到com.focus.MyFirstServlet這個類

當映射一個servlet時候,可以是多層,尾碼名為html不一定就是html檔案。

 

進行Servlet映射時,可使用萬用字元

有兩種格式:

第一種格式 *.副檔名 如:*.html  *.abc

第二種格式 以“/“開頭 同時以”/*“結尾 如:/abc/* /*

 

例:1. <url-pattern>/*</url-pattern>

2. <url-pattern>/abc</url-pattern>

3. <url-pattern>/abc/*</url-pattern>

4. <url-pattern>*.gogo</url-pattern>

當瀏覽器的URL的servlet名 輸入/abc時 匹配 2

當瀏覽器的URL的servlet名 輸入/hellobaby時 匹配 1

當瀏覽器的URL的servlet名 輸入/abc/hellobaby時 匹配 3

當瀏覽器的URL的servlet名 輸入/hello.gogo時 匹配 1

 

匹配標準:

(1)匹配度高的選擇映射那個

(2)*.副檔名 的優先順序最低

 

load-on-startup元素標記

<servlet>

   <servlet-name>1</servlet-name>

   <display-name>1</display-name>

   <servlet-class>com.focus.MyFirstServlet</servlet-class>

<load-on-startup>1</load-on-startup>

  </servlet>

 

1)load-on-startup元素標記容器是否在啟動的時候就載入這個servlet(執行個體化並調用其init()方法)。

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

2)當值為0或者大於0時,表示容器在應用啟動時就載入並初始化這個servlet;

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

4)正數的值越小,該servlet的優先順序越高,應用啟動時就越先載入。

5)當值相同時,容器就會自己選擇順序來載入。

所以,<load-on-startup>x</load-on-startup>,中x的取值1,2,3,4,5代表的是優先順序,而非啟動延遲時間。

 

 

 

 

補充:怎樣更好的管理tomcat中的web應用,即進入tomcat Manager

 

Reload:即重載的意思,重新裝載該web應用。

Stop:停止該web應用

好處:單獨對某個web應用做相應的處理,不用對整個伺服器進行操作

Java Web -- Servlet(4) 開發Servlet的三種方法、配置Servlet詳解、Servlet的生命週期(1)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.