實(shí)現(xiàn)一個(gè)基于Servlet的hello world程序詳解步驟
一. 引入相關(guān)jar包
首先,我們先在idea里創(chuàng)建出一個(gè)Maven項(xiàng)目出來(lái),除了路徑要填成自己的希望路徑以外,其他都可以一路next和finish
創(chuàng)建好后,我們需要在pom.xml中加上一組<dependencies>
標(biāo)簽,在標(biāo)簽里引入servlet api的jar包,引入方法為從maven中央倉(cāng)庫(kù)中復(fù)制粘貼即可maven中央倉(cāng)庫(kù)
打開后,我們?cè)谒阉骺蛑休斎雜ervlet,其中第一個(gè)就是我們想要的結(jié)果
我們選擇與Tomcat對(duì)應(yīng)的版本號(hào)的Java Servlet API
(博主的Tomcat版本為8,所以就選擇了3.1.0這個(gè)版本號(hào))
此時(shí)我們直接將中間這段代碼復(fù)制到我們創(chuàng)建好的<dependencies>
標(biāo)簽中即可
注意:剛開始引入后代碼可能為紅顏色,表示maven正在下載資源,只需等一會(huì)時(shí)間,或者過(guò)一會(huì)刷新一下便可以引入成功
二. 編寫java代碼
1. 創(chuàng)建一個(gè)類
我們創(chuàng)建的代碼,需要繼承自HttpServlet
類,然后才能讓這個(gè)類被Tomcat給調(diào)用到,如果剛才Maven的依賴下載的不正確,此時(shí)HttpServlet是不能被補(bǔ)全出來(lái)(標(biāo)紅的)
2. 刪除super方法
//super.doGet(req, resp); 此方法是直接構(gòu)造了一個(gè)錯(cuò)誤的響應(yīng)(狀態(tài)碼為405的響應(yīng)),一定要將其刪掉
補(bǔ)充:
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
doGet是HttpServlet這個(gè)父類的方法,這個(gè)方法的參數(shù)分別是HttpServletRequest(HTTP請(qǐng)求)和HttpServletResponse(HTTP響應(yīng)),doGet方法里要做的事情就是根據(jù)請(qǐng)求生成響應(yīng)。
@Override
我們此處重寫了這個(gè)doGet之后,并不需要手動(dòng)調(diào)用doGet,而是由Tomcat自動(dòng)來(lái)調(diào)用;也不需要咱們手動(dòng)的創(chuàng)建HelloServlet實(shí)例,也是由Tomcat自動(dòng)創(chuàng)建實(shí)例。
3. 構(gòu)造相關(guān)字符串
這個(gè)操作,就是往HTTP響應(yīng)的body中寫了一個(gè)"hello world"字符串。
4. 將類和HTTP特定請(qǐng)求相關(guān)聯(lián)
剛才我們雖然將相關(guān)字符串構(gòu)造成功了,但我們還不知道發(fā)送一個(gè)什么樣的請(qǐng)求才能執(zhí)行到HelloServlet類的代碼,因此,我們需要將類和一個(gè)HTTP特定請(qǐng)求相關(guān)聯(lián),方法就是在類前面加上這個(gè)注解:
根據(jù)HTTP請(qǐng)求與url路徑進(jìn)行關(guān)聯(lián)即可
- 如果咱們的Tomcat 收到了一個(gè)路徑為/hello 的請(qǐng)求,就會(huì)調(diào)用到HelloServlet的代碼;
- 如果這個(gè)請(qǐng)求是GET請(qǐng)求,就會(huì)調(diào)用到HelloServlet的doGet方法
- 同理,如果這個(gè)請(qǐng)求是POST請(qǐng)求,就會(huì)調(diào)用到HelloServlet的doPost方法
此時(shí),完整代碼如上所示
三. 創(chuàng)建一些必要的目錄和文件
要想讓此程序在Tomcat上運(yùn)行,只是依靠Maven創(chuàng)建的目錄和文件是不夠的,還得我們自己來(lái)創(chuàng)建一些額外的內(nèi)容
首先我們?cè)趍ain目錄下創(chuàng)建一個(gè)新的webapp目錄
緊接著,在剛才創(chuàng)建的目錄底下再創(chuàng)建一個(gè)WEB-INF目錄
然后,我們?cè)趧倓倓?chuàng)建的目錄底下再創(chuàng)建一個(gè)xml文件即可(如果是一個(gè)靜態(tài)頁(yè)面部署到Tomcat上是不需要xml文件的,但如果是servlet代碼,要想讓Tomcat識(shí)別,必須要有此文件)
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app> <display-name>Archetype Created Web Application</display-name> </web-app>
最后,我們將這些內(nèi)容寫進(jìn)去即可
四. 打包程序
完成以上步驟后,我們就需要把我們當(dāng)前的代碼進(jìn)行編譯然后生成一個(gè)壓縮包出來(lái),此時(shí),我們可以繼續(xù)通過(guò)maven來(lái)完成 由于我們通過(guò)maven打出來(lái)的包是jar格式的,Tomcat不能直接識(shí)別jar格式的包,jar包一般是使用java -jar命令來(lái)運(yùn)行的,而Tomcat所識(shí)別的格式是war這個(gè)格式,因此我們應(yīng)該打成一個(gè)war格式的包
我們直接在pom.xml中手動(dòng)修改即可
此時(shí)直接雙擊就可以進(jìn)行打包了
結(jié)果如上所示。
- 這個(gè)war包部署到tomcat上, tomcat就會(huì)自動(dòng)解壓縮,生成一個(gè)同名的目錄~
- 后面通過(guò)瀏覽器URL訪問(wèn)這個(gè)webapp的時(shí)候,要在URL中帶上這個(gè)目錄的名字~~
- 因此我們最好換一個(gè)簡(jiǎn)單一點(diǎn)的名字,后邊以便訪問(wèn)
此時(shí)博主將名字設(shè)置成servlet1
此時(shí),我們繼續(xù)打包即可生成我們想要名稱的包
五. 部署程序
打完包后,我們將生成的war包部署到Tomcat上即可(將war包拷貝到Tomcat的webapps的目錄中)
然后我們啟動(dòng)Tomcat后,會(huì)在webapps底下生成一個(gè)與war包同名的目錄
- 其中在WEB-INF中就包含了web.xml以及編譯后生成的.class文件
- META-INF中包含了當(dāng)前webapp中依賴的第三方j(luò)ar包
六. 驗(yàn)證程序是否正常工作
當(dāng)前面的所有步驟都完成后,接下來(lái)我們就可以檢驗(yàn)了,只需要通過(guò)瀏覽器訪問(wèn)一下Tomcat,構(gòu)造一個(gè)特定的請(qǐng)求,觸發(fā)到特定的代碼即可
到此這篇關(guān)于實(shí)現(xiàn)一個(gè)基于Servlet的hello world程序詳解步驟的文章就介紹到這了,更多相關(guān)Servlet hello world內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java教程之java程序編譯運(yùn)行圖解(java程序運(yùn)行)
最近重新復(fù)習(xí)了一下java基礎(chǔ),在使用javap的過(guò)程中遇到了一些問(wèn)題,這里便講講對(duì)于一個(gè)類文件如何編譯、運(yùn)行、反編譯的。也讓自己加深一下印象2014-03-03SpringBoot中分頁(yè)插件PageHelper的使用詳解
分頁(yè)查詢是為了高效展示大量數(shù)據(jù),通過(guò)分頁(yè)將數(shù)據(jù)劃分為多個(gè)部分逐頁(yè)展示,原生方法需手動(dòng)計(jì)算數(shù)據(jù)起始行,而使用PageHelper插件則簡(jiǎn)化這一過(guò)程,本文給大家介紹SpringBoot中分頁(yè)插件PageHelper的使用,感興趣的朋友一起看看吧2024-09-09SpringBoot中@Transiactional注解沒有效果的解決
這篇文章主要介紹了SpringBoot中@Transiactional注解沒有效果的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08Java基于對(duì)象流實(shí)現(xiàn)銀行系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了Java基于對(duì)象流實(shí)現(xiàn)銀行系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-09-09Java多線程CyclicBarrier的實(shí)現(xiàn)代碼
CyclicBarrier可以使一定數(shù)量的線程反復(fù)地在柵欄位置處匯集,本文通過(guò)實(shí)例代碼介紹下Java多線程CyclicBarrier的相關(guān)知識(shí),感興趣的朋友一起看看吧2022-02-02