Servlet與Tomcat運(yùn)行示例

Servlet與Tomcat運(yùn)行示例

本文將寫一個(gè)servlet郑口,然后將其部署到Tomcat的全過程啥寇。本文參考《深入拆解Tomcat_Jetty》內(nèi)容怀喉。

一半抱、基于web.xml開發(fā)步驟

  1. 下載胯杭、安裝 Tomcat驯杜。
  2. 編寫一個(gè)繼承 HTTPServlet 的 Java 類MyServlet。
  3. 將 Java 類文件編譯成 Class 文件做个。
  4. 建立 Web 應(yīng)用的目錄結(jié)構(gòu)鸽心,并配置 web.xml滚局。
  5. 部署 Web 應(yīng)用。
  6. 啟動(dòng) Tomcat顽频。
  7. 瀏覽器訪問驗(yàn)證結(jié)果藤肢。
  8. 查看 Tomcat 日志。

1 下載糯景、安裝Tomcat

去Tomcat官網(wǎng)(https://tomcat.apache.org/download-90.cgi) 下載最新的Tomcat(需下載對應(yīng)系統(tǒng)版本嘁圈,請根據(jù)實(shí)際情況選擇,本文以MacOS系統(tǒng)為例)蟀淮。下載完成之后解壓即可最住。

file

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:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末歉闰,一起剝皮案震驚了整個(gè)濱河市辖众,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌和敬,老刑警劉巖凹炸,帶你破解...
    沈念sama閱讀 216,843評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異昼弟,居然都是意外死亡啤它,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評論 3 392
  • 文/潘曉璐 我一進(jìn)店門舱痘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來变骡,“玉大人,你說我怎么就攤上這事芭逝∷担” “怎么了?”我有些...
    開封第一講書人閱讀 163,187評論 0 353
  • 文/不壞的土叔 我叫張陵旬盯,是天一觀的道長台妆。 經(jīng)常有香客問我,道長胖翰,這世上最難降的妖魔是什么接剩? 我笑而不...
    開封第一講書人閱讀 58,264評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮萨咳,結(jié)果婚禮上搂漠,老公的妹妹穿的比我還像新娘。我一直安慰自己某弦,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,289評論 6 390
  • 文/花漫 我一把揭開白布而克。 她就那樣靜靜地躺著靶壮,像睡著了一般。 火紅的嫁衣襯著肌膚如雪员萍。 梳的紋絲不亂的頭發(fā)上腾降,一...
    開封第一講書人閱讀 51,231評論 1 299
  • 那天,我揣著相機(jī)與錄音碎绎,去河邊找鬼螃壤。 笑死抗果,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的奸晴。 我是一名探鬼主播冤馏,決...
    沈念sama閱讀 40,116評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼寄啼!你這毒婦竟也來了逮光?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,945評論 0 275
  • 序言:老撾萬榮一對情侶失蹤墩划,失蹤者是張志新(化名)和其女友劉穎涕刚,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體乙帮,經(jīng)...
    沈念sama閱讀 45,367評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡杜漠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,581評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了察净。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片驾茴。...
    茶點(diǎn)故事閱讀 39,754評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖塞绿,靈堂內(nèi)的尸體忽然破棺而出沟涨,到底是詐尸還是另有隱情,我是刑警寧澤异吻,帶...
    沈念sama閱讀 35,458評論 5 344
  • 正文 年R本政府宣布裹赴,位于F島的核電站,受9級特大地震影響诀浪,放射性物質(zhì)發(fā)生泄漏棋返。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,068評論 3 327
  • 文/蒙蒙 一雷猪、第九天 我趴在偏房一處隱蔽的房頂上張望睛竣。 院中可真熱鬧,春花似錦求摇、人聲如沸射沟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,692評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽验夯。三九已至,卻和暖如春摔刁,著一層夾襖步出監(jiān)牢的瞬間挥转,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,842評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留绑谣,地道東北人党窜。 一個(gè)月前我還...
    沈念sama閱讀 47,797評論 2 369
  • 正文 我出身青樓,卻偏偏與公主長得像借宵,于是被迫代替她去往敵國和親幌衣。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,654評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 本章聊一聊ServletContext 3.0規(guī)范中定義的注解以及在web應(yīng)用中使用的框架和庫的可插拔性的提升暇务。 ...
    Lucky_Micky閱讀 6,032評論 0 3
  • Based on Java? Servlet Specification v3.1 [TOC] Servlet和S...
    0x70e8閱讀 1,316評論 0 7
  • 想得理想主義 過得滿地狼藉 不想承認(rèn)事實(shí)擊敗 堵著氣 我還該本著怎么樣的腦子去想 才算是理解人生 有人是不曾受過委...
    有思想的大烏龜閱讀 144評論 0 1
  • 好了垦细,乖乖的择镇,不哭。
    兌辛閱讀 109評論 0 0
  • 姓名:杜戶剛 公司:寧波余姚大發(fā)化纖有限公司 【日精進(jìn)打卡第11天】 【知~學(xué)習(xí)】 《六項(xiàng)精進(jìn)》2遍 共22遍 《...
    杜戶剛閱讀 71評論 0 1