滄州wap網(wǎng)站制作企業(yè)推廣網(wǎng)
個(gè)人主頁(yè):兜里有顆棉花糖
歡迎 點(diǎn)贊👍 收藏? 留言? 加關(guān)注💓本文由 兜里有顆棉花糖 原創(chuàng)
收錄于專欄【Servlet】
本專欄旨在分享學(xué)習(xí)Servlet的一點(diǎn)學(xué)習(xí)心得,歡迎大家在評(píng)論區(qū)交流討論💌
Servlet是Java編寫(xiě)的服務(wù)器端程序,主要用于處理客戶端請(qǐng)求和生成響應(yīng)。它可以接收來(lái)自客戶端(通常是Web瀏覽器)的請(qǐng)求,執(zhí)行特定的任務(wù),并返回響應(yīng)給客戶端。
目錄
- 一、創(chuàng)建項(xiàng)目
- 二、引入依賴
- 三、創(chuàng)建必要的目錄和文件
- 四、代碼編寫(xiě)
- 五、打包程序
- 六、程序部署
- 七、驗(yàn)證程序
- 注意事項(xiàng)
重要的事情放前面:
Servlet程序運(yùn)行時(shí),一定要保證Tomcat處于運(yùn)行狀態(tài)
。
一、創(chuàng)建項(xiàng)目
什么是Maven
:
Maven是Java中的一個(gè)構(gòu)建工具。
一個(gè)程序在編寫(xiě)過(guò)程中往往會(huì)涉及到第三方庫(kù)的依賴,同時(shí)需要對(duì)寫(xiě)好的程序進(jìn)行一個(gè)打包部署。
Maven存在的意義就是為了能夠方便的進(jìn)行依賴管理
和打包部署
。
而IntelliJ
是Java中默認(rèn)的構(gòu)建工具,Gradle
(安卓中會(huì)用到)同樣是是Java中常見(jiàn)的構(gòu)建工具。
我們來(lái)帶看一下
pom.xml文件
:
后續(xù)我們會(huì)根據(jù)需要會(huì)繼續(xù)向pom.xml
文件中放新的內(nèi)容。
好了,以上就是創(chuàng)建項(xiàng)目的步驟,接下來(lái)我們來(lái)到下一步,即引入依賴。
二、引入依賴
當(dāng)前的代碼要使用Servlet開(kāi)發(fā),而Servlet并不是Java標(biāo)準(zhǔn)庫(kù)自帶的,所以我們需要Maven把Servlet的依賴獲取到。所以我們需要找到Maven的中央倉(cāng)庫(kù),然后從中央倉(cāng)庫(kù)中找到我們想要獲取到的依賴。
中央倉(cāng)庫(kù)地址:https://mvnrepository.com/
來(lái)到中央倉(cāng)庫(kù)后,直接搜索servlet即可。
如上圖,點(diǎn)擊Java Servlet API
后來(lái)到如下頁(yè)面
找到3.1.0
的版本,因?yàn)門(mén)omcat和Servlet是有對(duì)應(yīng)關(guān)系的:如果Tomcat使用8版本的話,那么Servlet就需要使用3.1版本。
此時(shí)IDEA就會(huì)自動(dòng)的通過(guò)Maven從中央倉(cāng)庫(kù)下載到這里的依賴。
我們可以看到上面報(bào)紅了,有可能還沒(méi)有下載完(第一次使用一般會(huì)比較慢,因?yàn)橐獜闹醒雮}(cāng)庫(kù)中下載很多的依賴),這種情況稍微等一下就好了。
但是如果等了很長(zhǎng)時(shí)間都沒(méi)有解決的話,我們就需要點(diǎn)擊下面的刷新按鈕:
好了,以上就是引入依賴的全過(guò)程。
三、創(chuàng)建必要的目錄和文件
Tomcat對(duì)于Servlet項(xiàng)目是有一些額外的要求的。
Maven最為一個(gè)通用的工具,不僅僅可以管理Servlet項(xiàng)目,還可以管理其它的項(xiàng)目。再此基礎(chǔ)上還需要按照Servlet項(xiàng)目的要求來(lái)創(chuàng)建出特定的目錄和文件。
- 在main目錄下創(chuàng)建
webapp目錄
- 在
webapp目錄中
創(chuàng)建一個(gè)目錄WEB-INF
- 在
WEB-INF
目錄中創(chuàng)建web.xml
文件,web.xml文件
的作用就是告訴Tomcat我這個(gè)目錄中的內(nèi)容是一個(gè)webapp,需要把我加載起來(lái)。
整個(gè)目錄結(jié)構(gòu)如下:
上述創(chuàng)建的目錄結(jié)構(gòu)(包括目錄的名字)和文件都是固定的。
另外,我們需要在web.xml
中編寫(xiě)一些內(nèi)容,編寫(xiě)內(nèi)容如下(直接復(fù)制粘貼即可):
<!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>
這個(gè)配置文件即web.xml
的作用是指定了該 Web 應(yīng)用程序的基本信息和配置參數(shù),例如,控制應(yīng)用程序如何處理請(qǐng)求、響應(yīng)、會(huì)話管理等(具體細(xì)節(jié)我們這里暫時(shí)跳過(guò))。
上述的配置文件可能會(huì)出現(xiàn)如下報(bào)錯(cuò),請(qǐng)看:
爆紅不是我們的原因,這里直接忽略即可(并不影響程序的運(yùn)行)。
解釋一下:爆紅的部分即"http://java.sun.com/dtd/web-app_2_3.dtd"
是一個(gè)schema文件
,該文件描述了xml文件的格式是怎樣的(哪些標(biāo)簽是合法的,哪些是不合法的,以及標(biāo)簽之間如何進(jìn)行嵌套)。
好了,以上就是創(chuàng)建目錄結(jié)構(gòu)及文件的全部?jī)?nèi)容。接下來(lái)開(kāi)始正式的代碼編寫(xiě)。
四、代碼編寫(xiě)
- 第一步:創(chuàng)建類
HelloServlet
,然后讓該類繼承HttpServlet
(此類是Servlet的jar包提供的,編寫(xiě)Servlet程序一般都需要繼承這個(gè)類——HttpServlet
),如下圖:
如果HttpServlet
報(bào)紅的話,可能是之前的pom.xml
中的依賴沒(méi)有正確引入。這是我們只需要刷新一下pom.xml
文件即可。
- 第二步:重寫(xiě)父類
HttpServlet
中的方法(doGet方法
)
在解釋doGet
方法之前,我們先來(lái)回顧下服務(wù)器典型的三步走流程:
①讀取請(qǐng)求并解析請(qǐng)求
②根據(jù)請(qǐng)求計(jì)算響應(yīng)
③把響應(yīng)寫(xiě)回到客戶端
好了接下來(lái)解釋doGet
方法:
doGet方法要做的事情就是根據(jù)請(qǐng)求(req)計(jì)算出響應(yīng)(resp),所以對(duì)應(yīng)的doGet方法中的代碼就是根據(jù)req請(qǐng)求中不同的參數(shù)細(xì)節(jié)從而生成一個(gè)具體的resp對(duì)象(即往空對(duì)象中設(shè)置屬性)。
然后,Tomcat就會(huì)根據(jù)這個(gè)resp響應(yīng)對(duì)象轉(zhuǎn)換成符合HTTP協(xié)議的響應(yīng)報(bào)文并返回給瀏覽器。
注解(配置路由):
我們已經(jīng)知道Tomcat會(huì)在合適的時(shí)機(jī)自動(dòng)調(diào)用doGet方法,體現(xiàn)在兩個(gè)方面:
第一個(gè)方面:根據(jù)請(qǐng)求方法的不同來(lái)調(diào)用不同的方法。舉例:如果請(qǐng)求方法是GET,那么Tomcat就會(huì)在合適的時(shí)機(jī)自動(dòng)調(diào)用doGet;如果請(qǐng)求的方法是PUT,那么Tomcat就會(huì)在合適的時(shí)機(jī)自動(dòng)調(diào)用doPost。
第二個(gè)方面:請(qǐng)求的路徑中,url后面帶有層次結(jié)構(gòu)的路徑。一個(gè)Servlet程序中可能有多個(gè)Servlet類,這些Servlet類需要在不同的情況下被執(zhí)行到。比如當(dāng)請(qǐng)求的路徑中有hello的時(shí)候,才能執(zhí)行到HelloServlet的代碼。當(dāng)然,不同的Servlet類可以關(guān)聯(lián)到不同的路徑
。
總結(jié):Tomcat在合適的時(shí)機(jī)自動(dòng)調(diào)用Servlet的方法,根據(jù)請(qǐng)求的方法類型和請(qǐng)求的路徑進(jìn)行匹配,以調(diào)用對(duì)應(yīng)的Servlet方法來(lái)處理請(qǐng)求。這樣可以實(shí)現(xiàn)不同Servlet類在不同情況下的執(zhí)行(不同的代碼應(yīng)用到不同的場(chǎng)景
)。
總而言之,doGet
方法就是根據(jù)請(qǐng)求算出響應(yīng)
(即服務(wù)器典型三步走的第二步,第一步和第三步由Tomcat來(lái)完成)。
以上就是代碼的編寫(xiě),現(xiàn)在問(wèn)題來(lái)了,為什么沒(méi)有出現(xiàn)main方法。
解釋:Servlet程序不需要main方法。上述寫(xiě)的代碼并不是獨(dú)立的程序,而是放到Tomcat上去執(zhí)行的。而main方法在Tomcat,我們寫(xiě)的代碼比如說(shuō)doGet之類的方法都是讓Tomcat來(lái)調(diào)用的
。
五、打包程序
這里寫(xiě)的程序是放到Tomcat上運(yùn)行,所以需要對(duì)程序進(jìn)行打包。
打包成一個(gè)Tomcat能識(shí)別的包的格式,此時(shí)代碼才會(huì)被Tomcat給加載起來(lái)。
打包的過(guò)程是借助Maven來(lái)完成。
看到如下圖就說(shuō)明已經(jīng)打包好了。
在Maven中默認(rèn)打包生成的是jar包(jar包是java中常用的打包方式,jar包中就是一些.class文件),但是Tomcat需要的并不是jar包,而是war包(war包本質(zhì)上和jar包差不多,war包中會(huì)包含一些前端的代碼,如html、css等,以及一些Tomcat的配置(web.xml))。
所以我們需要修改配置項(xiàng)來(lái)讓Maven打包出來(lái)的是一個(gè)war包
在pom.xml文件
中插入<packaging>war</packaging>
即可,如下圖:
另外,除了在pom.xml
中添加packaging
標(biāo)簽外,我們還可以添加其它標(biāo)簽,如下:
<build><finalName>java_servlet</finalName>
</build>
通過(guò)finalName標(biāo)簽可以設(shè)置打包出來(lái)的war包的名字(不是必須的,也可以使用默認(rèn)的名字)。
好了,修改了上述的配置之后,接下來(lái)我們重新打包:
可以看到上圖中target目錄中新打成的war包。
這個(gè)war包就是我們想要向Tomcat中部署的內(nèi)容。
至此,打包完成,我們就可以把war包放到Tomcat中了。
六、程序部署
程序部署就是把我們剛剛打包生成的war包放到Tomcat上,具體來(lái)說(shuō)就是把這個(gè)war包拷貝到Tomcat中的webapps目錄中。
把war包復(fù)制到Tomcat中的webapps目錄后,Tomcat就會(huì)識(shí)別到有新的webapp到來(lái)了,然后就會(huì)自動(dòng)對(duì)這個(gè)war包進(jìn)行解壓縮。
下面就到了最后一步——驗(yàn)證程序。
七、驗(yàn)證程序
通過(guò)瀏覽器發(fā)起http get請(qǐng)求,觸發(fā)剛剛的servlet的代碼。
第一點(diǎn):
通過(guò)第一級(jí)路徑(稱為context path/application path)來(lái)確認(rèn)要訪問(wèn)哪個(gè)webapp(這個(gè)路徑就是war包的名字);第二點(diǎn):
然后通過(guò)第二級(jí)路徑(稱為servlet path)來(lái)訪問(wèn)哪一個(gè)servlet代碼;第三點(diǎn):
然后通過(guò)方法來(lái)確定執(zhí)行servlet中哪個(gè)方法。
結(jié)合上面三點(diǎn)就定位到了要執(zhí)行的代碼時(shí)doGet方法
最后,程序成功執(zhí)行。
注意事項(xiàng)
如果我們要對(duì)代碼進(jìn)行修改的話,我們需要重復(fù)上述的五、六、七
步驟。
好了,以上就是本文的全部?jī)?nèi)容了。希望各位友友可以一鍵三連哈!!!