在這節中,我們將演示如何手動來建立一個簡單的Servlet應用程式。需要遵循以下步驟,這些步驟對於所有Web伺服器是常見的。在這個範例中,使用的是Apache Tomcat8伺服器。Apache Tomcat是用於測試servlet和JSP技術的開源Web伺服器。
這一節非常關鍵,希望您能仔細按照步驟說明來操作。能否手動開發一個Servlet執行成功,可能會影響到學習的熱情。
在開始之前,需要安裝兩個軟體:
注意: Java安裝好後,需要將它加到系統的環境變數中。可參考:/20/206/8013.html
安裝Tomcat
在開始編寫程式碼之前,需要您自己下載最新版本的Tomcat Server並將其安裝在您的計算機上。
開啟網址: http://tomcat.apache.org/download-80.cgi 下載 apache-tomcat-8.5.23-windows-x64.zip ,如下圖所示 -
下載完成後,將它解壓到一個合適的位置,如:D:\software\apache-tomcat-8.5.23 , 然後執行Tomcat伺服器測試執行情況,可通過雙擊檔案:D:\software\apache-tomcat-8.5.23\bin\startup.bat 來啟動,如下所示 -
測試執行Tomcat伺服器執行情況,開啟瀏覽器,存取地址:http://localhost:8080 應該會看到類似的介面 -
在機器上安裝Tomcat Server後,請按照以下步驟操作:
下面詳細介紹所有這五個步驟,首先建立第一個Servlet應用程式。
Sun Microsystem定義了建立servlet應用程式必須遵循的目錄結構。這裡以一個名稱為:First 的應用為範例,介紹一個典型servlet應用程式的目錄結構 -
在Apache-Tomcat\webapps目錄下建立上述目錄結構。所有HTML,靜態檔案(影象,css等)都直接儲存在Web應用程式(webapps)檔案夾下。 而所有Servlet類都儲存在classes
檔案夾中。
web.xml
(部署描述符)檔案儲存在WEB-INF檔案夾下。
建立servlet
有三種不同的方法。
Servlet
介面GenericServlet
類HttpServlet
類但是大部分servlet
是通過擴充套件HttpServlet
抽象類建立的。如前所述HttpServlet
給出了Servlet
介面的service()
方法的定義。我們將建立Servlet
類但不需要覆蓋service()
方法。Servlet
類將僅覆蓋doGet()
或doPost()
方法。
當servlet
的請求進入時,Web容器首先將呼叫servlet
的service()
方法,並根據service()
方法的請求型別來呼叫doGet()
或doPost()
方法)。
注意:預設情況下,請求是
Get
請求。
建立一個類:MyServlet.java,並將這個類檔案放在F:\worksp\servlet\First目錄下,其程式碼如下所示 -
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class MyServlet extends HttpServlet
{
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException, IOException
{
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html><body>");
out.println("<h2 style='text-align:center'>Hello Servlet ~</h2>");
out.println("</body></html>");
}
}
然後編譯它(在下一步中解釋),並將類生成的MyServlet.class檔案貼上到WEB-INF/classes/目錄中,此WEB-INF/classes/目錄必須在Tomcat/webapps目錄中建立。
要編譯Servlet,需要一個JAR檔案。不同的伺服器需要不同的JAR檔案。在Apache Tomcat伺服器需要的是servlet-api.jar
檔案來編譯servlet類。
編譯Servlet的步驟如下 -
java -version
,如已新增,則應該返回類似的結果 -servlet-api.jar
檔案,下載地址:http://mvnrepository.com/artifact/javax.servlet/servlet-api/3.0-alpha-1 或者從Tomcat的安裝目錄:D:\software\apache-tomcat-8.5.23\lib 中找到。servlet-api.jar
檔案貼上到一個目錄,如:F:\worksp\servlet\library
目錄下,用於編譯Servlet
類。MyServlet
類,如下所示 - F:\worksp\servlet\First> javac -Djava.ext.dirs=F:\worksp\servlet\library MyServlet.java
如果編譯沒有問題,那麼將會在當前目錄下生成一個類檔案:MyServlet.class ,然後將類檔案MyServlet.class貼上到F:\worksp\servlet\First\WEB-INF\classes
目錄中。
部署描述符(DD)是由Web容器用於執行Servlet和JSP頁面的XML文件。部署描述符用於完成幾個重要的工作,如:
稍後將詳細討論所有這些。現在來看看我們為這個Web應用程式建立一個簡單的web.xml
檔案。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>MyFirstServlet</display-name>
<welcome-file-list>
<!--// 預設主頁-->
<welcome-file>index.html</welcome-file>
<welcome-file>index.html</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<description></description>
<display-name>MyServlet</display-name><!--// 類的顯示名稱 -->
<servlet-name>MyServlet</servlet-name><!--// 類的別名 -->
<servlet-class>MyServlet</servlet-class><!--// 類的名稱 -->
</servlet>
<servlet-mapping>
<servlet-name>MyServlet</servlet-name><!--// 類的別名 -->
<url-pattern>/hello</url-pattern><!--// 請求此類的對應URL -->
</servlet-mapping>
</web-app>
web.xml檔案元素的說明
web.xml
檔案中的元素太多。以下是上述web.xml
檔案中使用的一些元素的說明 -
<web-app>
表示整個應用程式。<servlet>
是<web-app>
的子元素,代表servlet。<servlet-name>
是<servlet>
的子元素,表示servlet的名稱。<servlet-class>
是<servlet>
的子元素,表示servlet的類。<servlet-mapping>
是<web-app>
的子元素。它用於對映servlet。<url-pattern>
是<servlet-mapping>
的子元素。用戶端使用此模式來呼叫servlet。將目錄F:\worksp\servlet\First 拷貝到 D:\software\apache-tomcat-8.5.23\webapps 下部署這個應用程式。
雙擊startup.bat
檔案啟動Apache Tomcat伺服器。
或者,在Windows機器上在命令列提示執行以下命令。
D:\software\apache-tomcat-8.5.23\bin> startup.bat
執行Servlet應用程式,開啟瀏覽器輸入並存取網址:http:localhost:8080/First/hello ,應該會看到類似的結果 -
這樣,我們的第一個Servlet應用程式就成功執行了。