第二十章 Servlet 包

關(guān)于本篇文章

了解一些 servlet 概念岁经,本編文章只進(jìn)行一些文章格式修改,文章內(nèi)使用的圖片均來自 Runoob 網(wǎng)站

致謝

感謝 Runoob 提供的相關(guān)資料酿联,官方資料地址Servlet 教程

Servlet 包

涉及到 WEB-INF 子目錄的 Web 應(yīng)用程序結(jié)構(gòu)是所有的 Java web 應(yīng)用程序的標(biāo)準(zhǔn)聂受,并由 Servlet API 規(guī)范指定。給定一個(gè)頂級目錄名 myapp辩昆,目錄結(jié)構(gòu)如下所示:

/myapp
    /images
    /WEB-INF
        /classes
        /lib

WEB-INF 子目錄中包含應(yīng)用程序的部署描述符阅酪,名為 web.xml旨袒。所有的 HTML 文件都位于頂級目錄 myapp 下。對于 admin 用戶术辐,您會(huì)發(fā)現(xiàn) ROOT 目錄是 myApp 的父目錄砚尽。

創(chuàng)建包中的 Servlet

WEB-INF/classes 目錄包含了所有的 Servlet 類和其他類文件,類文件所在的目錄結(jié)構(gòu)與他們的包名稱匹配辉词。例如必孤,如果您有一個(gè)完全合格的類名稱 com.myorg.MyServlet,那么這個(gè) Servlet 類必須位于以下目錄中:

/myapp/WEB-INF/classes/com/myorg/MyServlet.class

下面的例子創(chuàng)建包名為 com.myorg 的 MyServlet 類瑞躺。

// 為包命名
package com.myorg;  

// 導(dǎo)入必需的 java 庫
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

@WebServlet("/MyServlet")
public class MyServlet extends HttpServlet {
 
  private String message;
 
  public void init() throws ServletException
  {
      // 執(zhí)行必需的的初始化
      message = "Hello World";
  }
 
  public void doGet(HttpServletRequest request,
                    HttpServletResponse response)
            throws ServletException, IOException
  {
      // 設(shè)置響應(yīng)內(nèi)容類型
      response.setContentType("text/html;charset=UTF-8");
 
      // 實(shí)際的邏輯是在這里
      PrintWriter out = response.getWriter();
      out.println("<h1>" + message + "</h1>");
  }
  
  public void destroy()
  {
      // 什么也不做
  }
}

編譯包中的 Servlet

編譯包中的類與編譯其他的類沒有什么大的不同敷搪。最簡單的方法是讓您的 java 文件保留完全限定路徑,如上面提到的類幢哨,將被保留在 com.myorg 中赡勘。您還需要在 CLASSPATH 中添加該目錄。

假設(shè)您的環(huán)境已正確設(shè)置捞镰,進(jìn)入 <Tomcat-installation-directory>/webapps/ROOT/WEB-INF/classes 目錄闸与,并編譯 MyServlet.java,如下所示:

$ javac MyServlet.java

如果 Servlet 依賴于其他庫岸售,那么您必須在 CLASSPATH 中也要引用那些 JAR 文件践樱。這里我只引用了 servlet-api.jar JAR 文件,因?yàn)槲以?Hello World 程序中并沒有使用任何其他庫凸丸。

該命令行使用內(nèi)置的 javac 編譯器拷邢,它是 Sun Microsystems Java 軟件開發(fā)工具包(JDK,全稱 Java Software Development Kit)附帶的屎慢。 Microsystems的Java軟件開發(fā)工具包(JDK)解孙。為了讓該命令正常工作坑填,必須包括您在 PATH 環(huán)境變量中所使用的 Java SDK 的位置。

如果一切順利弛姜,上述編譯會(huì)在同一目錄下生成 MyServlet.class 文件脐瑰。下一節(jié)將解釋如何把一個(gè)已編譯的 Servlet 部署到生產(chǎn)中。

Servlet 打包部署

默認(rèn)情況下廷臼,Servlet 應(yīng)用程序位于路徑 <Tomcat-installation-directory>/webapps/ROOT 下苍在,且類文件放在 <Tomcat-installation-directory>/webapps/ROOT/WEB-INF/classes 中。

如果您有一個(gè)完全合格的類名稱 com.myorg.MyServlet荠商,那么這個(gè) Servlet 類必須位于 WEB-INF/classes/com/myorg/MyServlet.class 中寂恬,您需要在位于 <Tomcat-installation-directory>/webapps/ROOT/WEB-INF/ 的 web.xml 文件中創(chuàng)建以下條目:

    <servlet>
        <servlet-name>MyServlet</servlet-name>
        <servlet-class>com.myorg.MyServlet</servlet-class>
    </servlet>
 
    <servlet-mapping>
        <servlet-name>MyServlet</servlet-name>
        <url-pattern>/MyServlet</url-pattern>
    </servlet-mapping>

上面的條目要被創(chuàng)建在 web.xml 文件中的 <web-app>...</web-app> 標(biāo)簽內(nèi)。在該文件中可能已經(jīng)有各種可用的條目莱没,但不要在意初肉。

到這里,您基本上已經(jīng)完成了饰躲,現(xiàn)在讓我們使用 <Tomcat-installation-directory>\bin\startup.bat(在 Windows 上)或 <Tomcat-installation-directory>/bin/startup.sh(在 Linux/Solaris 等上)啟動(dòng) tomcat 服務(wù)器牙咏,最后在瀏覽器的地址欄中輸入 http://localhost:8080/MyServlet。如果一切順利嘹裂,您會(huì)看到下面的結(jié)果:

<table cellpadding="5" class="src" style="background-color: #f7f7f7;border: 1px solid #d6d6d6;border-collapse: collapse;width: 100%;">
<tr><td>
<h1 align="center" style="margin-top:20px">Hello World</h1>
</td></tr>
</table>

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末妄壶,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子寄狼,更是在濱河造成了極大的恐慌丁寄,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,640評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件泊愧,死亡現(xiàn)場離奇詭異伊磺,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)删咱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,254評論 3 395
  • 文/潘曉璐 我一進(jìn)店門屑埋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人腋腮,你說我怎么就攤上這事雀彼。” “怎么了即寡?”我有些...
    開封第一講書人閱讀 165,011評論 0 355
  • 文/不壞的土叔 我叫張陵徊哑,是天一觀的道長。 經(jīng)常有香客問我聪富,道長莺丑,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,755評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮梢莽,結(jié)果婚禮上萧豆,老公的妹妹穿的比我還像新娘。我一直安慰自己昏名,他們只是感情好涮雷,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,774評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著轻局,像睡著了一般洪鸭。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上仑扑,一...
    開封第一講書人閱讀 51,610評論 1 305
  • 那天览爵,我揣著相機(jī)與錄音,去河邊找鬼镇饮。 笑死蜓竹,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的储藐。 我是一名探鬼主播俱济,決...
    沈念sama閱讀 40,352評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼邑茄!你這毒婦竟也來了姨蝴?” 一聲冷哼從身側(cè)響起俊啼,我...
    開封第一講書人閱讀 39,257評論 0 276
  • 序言:老撾萬榮一對情侶失蹤肺缕,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后授帕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體同木,經(jīng)...
    沈念sama閱讀 45,717評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,894評論 3 336
  • 正文 我和宋清朗相戀三年跛十,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了彤路。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,021評論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡芥映,死狀恐怖洲尊,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情奈偏,我是刑警寧澤坞嘀,帶...
    沈念sama閱讀 35,735評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站惊来,受9級特大地震影響丽涩,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,354評論 3 330
  • 文/蒙蒙 一矢渊、第九天 我趴在偏房一處隱蔽的房頂上張望继准。 院中可真熱鬧,春花似錦矮男、人聲如沸移必。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,936評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽避凝。三九已至,卻和暖如春眨补,著一層夾襖步出監(jiān)牢的瞬間管削,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,054評論 1 270
  • 我被黑心中介騙來泰國打工撑螺, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留含思,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,224評論 3 371
  • 正文 我出身青樓甘晤,卻偏偏與公主長得像含潘,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子线婚,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,974評論 2 355

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

  • 本文包括: Servlet簡介關(guān)于Servlet的一些類 Servlet生命周期 ServletConfig獲得初...
    廖少少閱讀 3,865評論 1 67
  • Servlet 實(shí)例 Servlet 是服務(wù) HTTP 請求并實(shí)現(xiàn) javax.servlet.Servlet 接...
    RickJiang閱讀 384評論 0 0
  • Based on Java? Servlet Specification v3.1 [TOC] Servlet和S...
    0x70e8閱讀 1,316評論 0 7
  • Servlet 是服務(wù) HTTP 請求并實(shí)現(xiàn) javax.servlet.Servlet 接口的 Java 類遏弱。W...
    李序鍇閱讀 433評論 0 0
  • 關(guān)于什么是文化,作家梁曉聲用四句概括:根植于內(nèi)心的修養(yǎng)塞弊;無需提醒的自覺漱逸;以約束為前提的自由;為別人著想的善良游沿。其實(shí)...
    江南桂子閱讀 178評論 0 0