Servlet與Tomcat運行示例
本文將寫一個servlet,而後將其部署到Tomcat的全過程。本文參考《深刻拆解Tomcat_Jetty》內容。html
1、基於web.xml開發步驟
- 下載、安裝 Tomcat。
- 編寫一個繼承 HTTPServlet 的 Java 類MyServlet。
- 將 Java 類文件編譯成 Class 文件。
- 創建 Web 應用的目錄結構,並配置 web.xml。
- 部署 Web 應用。
- 啓動 Tomcat。
- 瀏覽器訪問驗證結果。
- 查看 Tomcat 日誌。
1 下載、安裝Tomcat
去Tomcat官網(https://tomcat.apache.org/download-90.cgi) 下載最新的Tomcat(需下載對應系統版本,請根據實際狀況選擇,本文以MacOS系統爲例)。下載完成以後解壓便可。java
2 編寫MyServlet類
編寫一個MyServlet類,其繼承HttpServlet類,並複寫其doGet()和doPost()方法。web
import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; /** * @Version V1.0 * @Description: MyServlet 類 */ public class MyServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("MyServlet 在處理 get()請求..."); PrintWriter out = resp.getWriter(); resp.setContentType("text/html;charset=utf-8"); out.println("<strong>doGet My Servlet!</strong><br>"); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("MyServlet 在處理 post()請求..."); PrintWriter out = resp.getWriter(); resp.setContentType("text/html;charset=utf-8"); out.println("<strong>doPost My Servlet!</strong><br>"); } }
3 編譯MyServlet
由於這裏咱們不採用IDE的方式,因此在編譯MyServlet.java類時,咱們使用javac的命令。可是咱們須要注意,由於咱們在MyServlet類中繼承了HttpServlet,而HttpServlet並非jdk自帶的class,因此須要帶上HttpServlet所在的jar包一塊兒進行打包!否則會出現如下錯誤信息:apache
咱們先將Tomcat解壓目錄 lib/下的servlet-api.jar拷貝到MyServlet.java同級目錄,而後執行如下命令,便可將MyServlet進行編譯:api
javac -cp ./servlet-api.jar MyServlet.java
4 創建 Web 應用目錄
建立文件夾,也就是項目工程 MyWebApp, 其目錄主要以下:瀏覽器
MyWebApp/WEB-INF/web.xml MyWebApp/WEB-INF/classes/MyServlet.class
其中,web.xml的內容以下:tomcat
<?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" metadata-complete="true"> <description> Servlet Example. </description> <display-name> MyServlet Example </display-name> <request-character-encoding>UTF-8</request-character-encoding> <servlet> <servlet-name>myServlet</servlet-name> <servlet-class>MyServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>myServlet</servlet-name> <url-pattern>/myservlet</url-pattern> </servlet-mapping> </web-app>
5 部署 MyWebApp 應用
將這個目錄 MyWebApp 拷貝到 Tomcat 的安裝目錄下的 webapps 目錄:微信
6 啓動 Tomcat
找到 Tomcat 安裝目錄下的 bin 目錄,若是是 Windows 系統,執行 startup.bat;若是是 Linux 系統,則執行 startup.shapp
7 瀏覽器訪問
在瀏覽器裏訪問這個 URL: http://localhost:8080/MyWebApp/myservlet
webapp
一樣,post方式調用也會獲得相相似的結果!
8 查看 Tomcat 日誌
咱們能夠看下tomcat/logs下的catalina.out文件,使用如下命令查看相應的日誌:
tail -100f catalina.out
2、基於註解@WebServlet開發
步驟基本上同上述基於web.xml一致,有如下幾點不一樣之處!
1 不一樣之處1: MyServlet類的代碼
在MyServlet上添加@WebServlet代碼,具體以下:
import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; /** * @Version V1.0 * @Description: MyServlet 類 */ @WebServlet("/myAnnotationServlet") public class MyServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("MyServlet 在處理 get()請求..."); PrintWriter out = resp.getWriter(); resp.setContentType("text/html;charset=utf-8"); out.println("<strong>doGet My Servlet!</strong><br>"); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("MyServlet 在處理 post()請求..."); PrintWriter out = resp.getWriter(); resp.setContentType("text/html;charset=utf-8"); out.println("<strong>doPost My Servlet!</strong><br>"); } }
2 不一樣之處2: 去除web.xml配置
MyWebApp項目下不須要再配置web.xml,由於在註解中已經對其進行了相關的配置。
3 不一樣之處3: 訪問地址變化
由於在@WebServlet中配置了的路徑爲/myAnnotationServlet,故而此處訪問路徑應爲: http://localhost:8080/MyWebApp/myAnnotationServlet
剩下步驟與基於web.xml配置基本一致,再也不細述!後期將就本案例講解分析Tomcat是如何加載並運行此Servlet的!
微信公衆號: 源碼灣
歡迎關注本人微信公衆號: 源碼灣。 本公衆號將不按期進行相關源碼及相關開發技術的分享,共同成長,共同進步~