Servlet與Tomcat運(yùn)行示例
本文將寫一個(gè)servlet郑口,然后將其部署到Tomcat的全過程啥寇。本文參考《深入拆解Tomcat_Jetty》內(nèi)容怀喉。
一半抱、基于web.xml開發(fā)步驟
- 下載胯杭、安裝 Tomcat驯杜。
- 編寫一個(gè)繼承 HTTPServlet 的 Java 類MyServlet。
- 將 Java 類文件編譯成 Class 文件做个。
- 建立 Web 應(yīng)用的目錄結(jié)構(gòu)鸽心,并配置 web.xml滚局。
- 部署 Web 應(yīng)用。
- 啟動(dòng) Tomcat顽频。
- 瀏覽器訪問驗(yàn)證結(jié)果藤肢。
- 查看 Tomcat 日志。
1 下載糯景、安裝Tomcat
去Tomcat官網(wǎng)(https://tomcat.apache.org/download-90.cgi) 下載最新的Tomcat(需下載對應(yīng)系統(tǒng)版本嘁圈,請根據(jù)實(shí)際情況選擇,本文以MacOS系統(tǒng)為例)蟀淮。下載完成之后解壓即可最住。
2 編寫MyServlet類
編寫一個(gè)MyServlet類,其繼承HttpServlet類灭贷,并復(fù)寫其doGet()和doPost()方法温学。
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
因?yàn)檫@里我們不采用IDE的方式,所以在編譯MyServlet.java類時(shí)甚疟,我們使用javac的命令仗岖。但是我們需要注意,因?yàn)槲覀冊贛yServlet類中繼承了HttpServlet览妖,而HttpServlet并不是jdk自帶的class轧拄,所以需要帶上HttpServlet所在的jar包一起進(jìn)行打包!不然會(huì)出現(xiàn)以下錯(cuò)誤信息:
我們先將Tomcat解壓目錄 lib/下的servlet-api.jar拷貝到MyServlet.java同級目錄讽膏,然后執(zhí)行以下命令檩电,即可將MyServlet進(jìn)行編譯:
javac -cp ./servlet-api.jar MyServlet.java
4 建立 Web 應(yīng)用目錄
創(chuàng)建文件夾,也就是項(xiàng)目工程 MyWebApp府树, 其目錄主要如下:
MyWebApp/WEB-INF/web.xml
MyWebApp/WEB-INF/classes/MyServlet.class
其中俐末,web.xml的內(nèi)容如下:
<?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 應(yīng)用
將這個(gè)目錄 MyWebApp 拷貝到 Tomcat 的安裝目錄下的 webapps 目錄:
6 啟動(dòng) Tomcat
找到 Tomcat 安裝目錄下的 bin 目錄,如果是 Windows 系統(tǒng)奄侠,執(zhí)行 startup.bat卓箫;如果是 Linux 系統(tǒng),則執(zhí)行 startup.sh
7 瀏覽器訪問
在瀏覽器里訪問這個(gè) URL: http://localhost:8080/MyWebApp/myservlet
同樣垄潮,post方式調(diào)用也會(huì)得到相類似的結(jié)果烹卒!
8 查看 Tomcat 日志
我們可以看下tomcat/logs下的catalina.out文件,使用以下命令查看相應(yīng)的日志:
tail -100f catalina.out
二弯洗、基于注解@WebServlet開發(fā)
步驟基本上同上述基于web.xml一致旅急,有以下幾點(diǎn)不同之處!
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項(xiàng)目下不需要再配置web.xml藐吮,因?yàn)樵谧⒔庵幸呀?jīng)對其進(jìn)行了相關(guān)的配置。
3 不同之處3: 訪問地址變化
因?yàn)樵贎WebServlet中配置了的路徑為/myAnnotationServlet,故而此處訪問路徑應(yīng)為:
http://localhost:8080/MyWebApp/myAnnotationServlet
剩下步驟與基于web.xml配置基本一致炎码,不再細(xì)述盟迟!后期將就本案例講解分析Tomcat是如何加載并運(yùn)行此Servlet的!
微信公眾號: 源碼灣
歡迎關(guān)注本人微信公眾號: 源碼灣潦闲。 本公眾號將不定期進(jìn)行相關(guān)源碼及相關(guān)開發(fā)技術(shù)的分享攒菠,共同成長,共同進(jìn)步~
Blog:
- 簡書: http://www.reibang.com/u/91378a397ffe
- csdn: https://blog.csdn.net/ZhiyouWu
- 開源中國: https://my.oschina.net/u/3204088
- 掘金: https://juejin.im/user/5b5979efe51d451949094265
- 博客園: https://www.cnblogs.com/zhiyouwu/
- 微信公眾號: 源碼灣
- 微信: WZY1782357529 (歡迎溝通交流)