《Servlet、JSP和Spring MVC初學指南》——1.3 編寫基礎的Servlet應用程序
本節書摘來自異步社區《Servlet、JSP和Spring MVC初學指南》一書中的第1章,第1.3節,作者:【加】Budi Kurniawan(克尼亞萬) , 【美】Paul Deck著,更多章節內容可以訪問雲棲社區“異步社區”公眾號查看
1.3 編寫基礎的Servlet應用程序
其實,編寫Servlet應用程序出奇簡單。隻需要創建一個目錄結構,並把Servlet類放在某個目錄下。本節將教你如何編寫一個名為app01a的Servlet應用程序。最初,它會包含一個Servlet,即MyServlet,其效果是向用戶發出一條問候。
要運行Servlets,還需要一個Servlet容器。Tomcat是一個開源的Servlet容器,它是免費的,並且可以在任何能跑Java的平台上運行。如果你到現在都還沒有安裝Tomcat,就應該去看看附錄A,並安裝一個。
1.3.1 編寫和編譯Servlet類
確定你的機器上有了Servlet容器後,下一步就要編寫和編譯一個Servlet類。本例中的Servlet類是MyServlet,如清單1.1所示。按照慣例,Servlet類的名稱要以Servlet作為後綴。
清單1.1 MyServlet類
package app01a;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
@WebServlet(name = "MyServlet", urlPatterns = { "/my" })
public class MyServlet implements Servlet {
private transient ServletConfig servletConfig;
@Override
public void init(ServletConfig servletConfig)
throws ServletException {
this.servletConfig = servletConfig;
}
@Override
public ServletConfig getServletConfig() {
return servletConfig;
}
@Override
public String getServletInfo() {
return "My Servlet";
}
@Override
public void service(ServletRequest request,
ServletResponse response) throws ServletException,
IOException {
String servletName = servletConfig.getServletName();
response.setContentType("text/html");
PrintWriter writer = response.getWriter();
writer.print("<html><head></head>"
+ "<body>Hello from " + servletName
+ "</body></html>");
}
@Override
public void destroy() {
}
}
看到清單1.1中的代碼時,可能首先注意到的是下麵這個標注:
@WebServlet(name = "MyServlet", urlPatterns = { "/my" })
WebServlet標注類型用來聲明一個Servlet。命名Servlet時,還可以暗示容器,是哪個URL調用這個Servlet。name屬性是可選的,如有,通常用Servlet類的名稱。重要的是urlPatterns屬性,它也是可選的,但是一般都是有的。在MyServlet中,urlPatterns告訴容器,/my樣式表示應該調用Servlet。
注意,URL樣式必須用一個正斜杠開頭。
Servlet的init方法隻被調用一次,並將private transient變量ServletConfig設為傳給該方法的ServletConfig對象:
private transient ServletConfig servletConfig;
@Override
public void init(ServletConfig servletConfig)
throws ServletException {
this.servletConfig = servletConfig;
}
如果想通過Servlet內部使用ServletConfig,隻需要將被傳入的ServletConfig賦給一個類變量。
Service方法發送字符串“Hello from MyServlet”給瀏覽器。對於每一個針對Servlet進來的HTTP請求,都會調用Service方法。
為了編譯Servlet,必須將Servlet API中的所有類型都放在你的類路徑下。Tomcat中帶有servlet-api.jar文件,其中包含了javax.servlet的成員,以及javax.servlet.http包。這個壓縮文件放在Tomcat安裝目錄下的lib目錄中。
1.3.2 應用程序目錄結構
Servlet應用程序必須在某一個目錄結構下部署。圖1.2展示了app01a的應用程序目錄。
圖1.2 應用程序目錄
這個目錄結構最上麵的 app01a 目錄就是應用程序目錄。在應用程序目錄下,是WEB-INF目錄。它有兩個子目錄:
classes。Servlet類及其他Java類必須放在這裏麵。類以下的目錄反映了類包的結構。在圖1.2中,隻部署了一個類:app01a.MyServlet。
lib。Servlet應用程序所需的JAR文件要在這裏部署。但Servlet API的JAR文件不需要在這裏部署,因為Servlet容器已經有它的備份。在這個應用程序中,lib目錄是空的。空的lib目錄可以刪除。
Servlet/JSP應用程序一般都有JSP頁麵、HTML文件、圖片文件以及其他資料。這些應該放在應用程序目錄下,並且經常放在子目錄下。例如,所有的圖片文件可以放在一個image目錄下,所有的JSP頁麵可以放在jsp目錄下,等等。
放在應用程序目錄下的任何資源,用戶隻要輸入資源URL,都可以直接訪問到。如果想讓某一個資源可以被Servlet訪問,但不可以被用戶訪問,那麼就要把它放在WEB-INF目錄下。
現在,準備將應用程序部署到Tomcat。使用Tomcat時,一種部署方法是將應用程序目錄複製到Tomcat安裝目錄下的webapps目錄中。也可以通過在Tomcat的conf目錄中編輯server.xml文件實現部署,或者單獨部署一個XML文件,這樣就不需要編輯server.xml了。其他的Servlet容器可能會有不同的部署規則。關於如何將Servlet/JSP應用程序部署到Tomcat的詳細信息,請查閱附錄A。
部署Servlet/JSP應用程序時,建議將它部署成一個WAR文件。WAR文件其實就是以.war作為擴展名的JAR文件。利用帶有JDK或者類似WinZip工具的JAR軟件,都可以創建WAR文件。然後,將WAR文件複製到Tomcat的webapps目錄下。當開始啟動Tomcat時,Tomcat就會自動解壓這個war文件。部署成WAR文件在所有Servlet容器中都適用。我們將在第13章討論更多關於部署的細節。
1.3.3 調用Servlet
要測試這個Servlet,需要啟動或者重啟Tomcat,並在瀏覽器中打開下麵的URL(假設Tomcat配置為監聽端口8080,這是它的默認端口):
https://localhost:8080/app01a/my
其輸出結果應該類似於圖1.3。
圖1.3 MyServlet的響應結果
恭喜,你已經成功編寫了第一個Servlet應用程序!
最後更新:2017-05-27 17:01:38