目錄
前言
一、Tomcat的下載和安裝
二、寫一個(gè)簡單的Servlet項(xiàng)目
1、創(chuàng)建一個(gè)Maven項(xiàng)目
2、引入依賴?
3、創(chuàng)建目錄?
?4、編寫Servlet代碼。
5、打包程序
6、將程序部署到Tomcat上
7、驗(yàn)證程序運(yùn)行結(jié)果
?三、在IDEA上安裝Smart Tomcat插件
四、Servlet中的一些常見錯(cuò)誤
前言
我我們制作一個(gè)網(wǎng)站就需要前后端交互,這里HTTP就是前后端交互的橋梁。我們說的前端就是瀏覽器,后端就是HTTP服務(wù)器。HTTP服務(wù)器就是基于TCP服務(wù)器實(shí)現(xiàn)的。讓一個(gè)TCP服務(wù)器按照HTTP協(xié)議的約定,解析請(qǐng)求,構(gòu)造響應(yīng),就夠成了一個(gè)HTTP服務(wù)器。但是我們并不需要獨(dú)立寫一個(gè)HTTP服務(wù)器,本章博客介紹使用一個(gè)現(xiàn)成的HTTP服務(wù)器Tomcat。
一、Tomcat的下載和安裝
Tomcat是Java生態(tài)中最流行的HTTP服務(wù)器,它是apache社區(qū)開源的HTTP服務(wù)器。
1??下載Tomacat
直接搜索Tomcat,也可以直接點(diǎn)擊這里的連接進(jìn)入官網(wǎng)https://tomcat.apache.org/,然后再Download下面點(diǎn)擊下載Tomcat 8。這個(gè)相比于其他的版本能夠更穩(wěn)定一點(diǎn),因?yàn)樵叫碌陌姹臼褂玫娜嗽缴?,其中出現(xiàn)問題的概率也就越高。相比于其他Tomcat 8使用的人更多。
?
?
2??安裝Tomcat?
?點(diǎn)擊下載之后,下載到文件夾中的是一個(gè)壓縮文件,這個(gè)時(shí)候你只需要將這個(gè)壓縮文件進(jìn)行解壓縮并放到一個(gè)你可以找到的地方即可。這個(gè)時(shí)候Tomcat就安裝完成了。Tomcat屬于綠色軟件,不需要其他軟件的安裝過程,將其放在你電腦的本地硬盤中就可以使用。卸載的時(shí)候,只需要把這個(gè)文件夾刪除即可。但是要想讓Tomcat正常工作,必須要保證你的電腦上安裝好了JDK。因?yàn)門omcat是基于Java開發(fā)的。
?3??了解一下Tomcat的文件一些重要的目錄
?
??bin目錄中放的是Tomcat相關(guān)的批處理文件,.bat后綴的文件,表示的是Windows的批處理文件,.sh后綴的文件,表示是Linux/mac的shell腳本。以startup命名的文件不論是什么后綴,表示的就是Tomcat的啟動(dòng)程序。
?
???logs目錄主要用來存儲(chǔ)Tomcat運(yùn)行的日志,Tomcat運(yùn)行的日志都在這里,如果程序出現(xiàn)問題,首先就需要通過這里的運(yùn)行日志來排查問題。
??webapps目錄存儲(chǔ)webapp。也就是我們經(jīng)常說的網(wǎng)站,網(wǎng)站就是前端+后端,這個(gè)目錄命名為webapps,表示一個(gè)Tomcat上可以同時(shí)部署多個(gè)網(wǎng)站。
4??啟動(dòng)Tomcat
進(jìn)入bin目錄,Windows系統(tǒng)的電腦直接雙擊startup.bat即可。當(dāng)出現(xiàn)下面的畫面表示Tomcat啟動(dòng)成功。
?
?如果沒有出現(xiàn)這個(gè)畫面或者啟動(dòng)的時(shí)候一閃而過,這個(gè)時(shí)候就需要你把startup.bat這個(gè)文件拖到cmd中運(yùn)行,看報(bào)啥錯(cuò)。大概率是缺環(huán)境變量,缺啥變量配啥就行。
5??查看Tomcat的端口號(hào)是否被正確綁定。
打開Tomcat這個(gè)服務(wù)器之后,就需要查看一下Tomcat綁定的端口是否正常。Tomcat既然是一個(gè)服務(wù)器,肯定是要綁定一個(gè)端口號(hào)的,Tomcat默認(rèn)的端口號(hào)是8080。我們使用cmd輸入netstat -ano | findstr 8080.來查看8080端口的使用情況,其中netstat -ano這個(gè)命令用來查看你系統(tǒng)上所有的網(wǎng)絡(luò)端口號(hào)的使用情況,findstr 8080這是查看8080這個(gè)端口的使用情況。
?
我們通過進(jìn)程的id就可以在任務(wù)管理器中PID這一列中找到,這個(gè)運(yùn)行的程序(進(jìn)程)。
可以看見他是一個(gè)Java的代碼。
6??通過瀏覽器輸入一個(gè)URL(網(wǎng)址)http://127.0.0.1:8080來訪問Tomcat的歡迎頁面,這是Tomcat自帶的一個(gè)webapp.
?7??使用tomcat部署前端頁面。
將我們之前寫的博客系統(tǒng)的前端頁面部署到Tomcat上,也就將我們存放前端代碼的blog_system文件夾放到webapps目錄下即可,然后在bin目錄下找到startup.bat文件重新啟動(dòng)Tomcat,最后使用URL(http://127.0.0.1:8080/部署文件的某個(gè)頁面的相對(duì)webapps目錄的相對(duì)路徑)通過瀏覽器就可查看到我們部署到Tomcat上的頁面。
上面的URL相對(duì)來說有點(diǎn)抽象,同個(gè)這個(gè)例子來看,小編是將blog_system文件夾,放在了webapps目錄中,所以這個(gè)URL是http://127.0.0.1:8080/blog_system/blog_list.html。
?其實(shí)所謂的部署一個(gè)網(wǎng)站到tomcat上,就是把對(duì)應(yīng)的內(nèi)容拷貝到tomcat的webapps目錄中即可。
??但是看到這里,有的老鐵就會(huì)問,將這個(gè)頁面部署到Tomcat上和直接在本地文件中打開有什么區(qū)別,現(xiàn)實(shí)頁面效果都是相同。
??這里將頁面部署到Tomcat上,其他人就可以通過URL來對(duì)你的網(wǎng)頁進(jìn)行訪問。而你通過本地的文件打開就只能你自己訪問都這個(gè)頁面。
?雖然說通過將編寫的前端頁面部署到Tomcat上,可以讓其他的人訪問到,但是有一個(gè)前提就是要么讓想訪問的你頁面的電腦和你的電腦在同一個(gè)局域網(wǎng)中,要么你的電腦有一個(gè)外網(wǎng)IP,這是因?yàn)镹AT機(jī)制,在一個(gè)局域網(wǎng)中的電腦只有一個(gè)外網(wǎng)IP,處在局域網(wǎng)中的電腦沒有外網(wǎng)IP。
這就需要將這個(gè)前端頁面部署到安裝Tomcat的云服務(wù)器上,云服務(wù)器具有外網(wǎng)IP.
二、寫一個(gè)簡單的Servlet項(xiàng)目
將上面的了解之后,重點(diǎn)就是我們通過Tomcat進(jìn)行編程,我們要建立一個(gè)網(wǎng)站肯定要寫一個(gè)HTTP服務(wù)器,從頭開始寫一個(gè)HTTP服務(wù)器比較麻煩,但是Tomcat中已經(jīng)把根據(jù)HTTP協(xié)議解析請(qǐng)求報(bào)文,根據(jù)HTTP協(xié)議構(gòu)造響應(yīng)報(bào)文等等這些步驟都已經(jīng)完成封裝好了,并且Tomcat提供了一系列的API,可以讓我們?cè)诰幊痰臅r(shí)候直接調(diào)用,所以我們?cè)谕瓿蒆TTP服務(wù)器的時(shí)候,只需要關(guān)注具體的業(yè)務(wù)邏輯即可。Tomcat提供的這一組API就叫做Servlet。
創(chuàng)建并寫一個(gè)Servlet項(xiàng)目需要完成下面的步驟。
1、創(chuàng)建一個(gè)Maven項(xiàng)目
Maven是專門用于管理和構(gòu)建Java項(xiàng)目的"工程管理"工具,有規(guī)范的目錄結(jié)構(gòu)、管理依賴、構(gòu)建/編譯、打包、測(cè)試等功能。下面使用IDEA創(chuàng)建一個(gè)Maven項(xiàng)目。
先點(diǎn)擊新建項(xiàng)目—>選擇Maven—>點(diǎn)擊next
?這個(gè)頁面點(diǎn)擊完成之后,就是選擇目錄,并創(chuàng)建一個(gè)目錄名。
但是第一次創(chuàng)建Maven項(xiàng)目的老鐵,可能會(huì)因?yàn)榫W(wǎng)絡(luò)的問題,創(chuàng)建好的頁面在控制臺(tái)上會(huì)報(bào)資源沒有下載好的問題。那么就更換一個(gè)網(wǎng)絡(luò)在重新試一下。
Maven項(xiàng)目創(chuàng)建好之后,出現(xiàn)的頁面就是下面的樣子
?通過上面的圖片我們也可以看到,創(chuàng)建的Maven項(xiàng)目自動(dòng)生成了一組目錄,下面我們來了解一下,這些目錄的具體作用。
2、引入依賴?
由于Servlet是Tomcat提供的api,不是標(biāo)準(zhǔn)庫提供的,所以這里就需要額外下載安裝,我們下載Tomcat是在程序運(yùn)行的時(shí)候使用的,但是在開發(fā)階段還是需要我們從Maven中央倉庫下載一個(gè)Servlet的jar包,這里下載的Servlet的jar包需要和之前下載的Tomcat版本對(duì)應(yīng)上。我們下載的是Tomcat8,所以這里下載的因該是Java Servlet API的3.1.0版本??梢灾苯狱c(diǎn)擊這里的連接https://mvnrepository.com/,進(jìn)入Maven中央倉庫。
進(jìn)入之后,搜索servlet就可以看到下面的畫面。
?點(diǎn)擊進(jìn)入選擇3.1.0版本的jar包。
這里我們點(diǎn)擊之后,出現(xiàn)下面的頁面,本來點(diǎn)擊jar,直接下載就行,但是我們用一個(gè)更簡單的方式,在下面的Maven中生成了一段代碼,我們只需要將其復(fù)制到我們的代碼中即可。
?在pom.xml頁面中添加一個(gè)<dependencies></dependencies>標(biāo)簽,將復(fù)制的代碼粘貼到這個(gè)標(biāo)簽中。IDEA就會(huì)自動(dòng)調(diào)用maven,從中央倉庫下載該jar包。有的老鐵首次使用,這里的下載會(huì)花費(fèi)一點(diǎn)時(shí)間,剛開始的時(shí)候會(huì)出現(xiàn)標(biāo)紅,下載完成之后,就正常了。當(dāng)代碼變白就是引入成功了。
這個(gè)jar包下載好之后,是被保存在了本地的一個(gè)隱藏目錄中了?,當(dāng)看到了.m2這個(gè)目錄的時(shí)候,我們下載jar包就在這個(gè)目錄中。
??當(dāng)我們下載完成之后,之后的使用就可以直接使用了。
3、創(chuàng)建目錄?
雖然Maven已經(jīng)幫我們自動(dòng)創(chuàng)建了一些目錄,但是還不夠,因?yàn)榇颂幬覀兪褂肕aven開發(fā)的是一個(gè)Web程序,還需要一些額外的目錄。
1??在main目錄下創(chuàng)建一個(gè)webapp目錄,與Java和resources目錄并列。點(diǎn)擊Directory創(chuàng)建目錄。
?2??在webapp目錄下,在創(chuàng)建一個(gè)WEB-INF目錄,在WEB-INF中在創(chuàng)建一個(gè)文件web.xml。創(chuàng)建文件夾使用Directory,創(chuàng)建文件使用File。
?這里的web.xml文件的作用就是,以web.xml為依據(jù)Tomcat從webapps目錄中加載webapp。這里的web.xml文件是給Tomcat看的,我們之前的pom.xml是給Maven看的,他們的用途是不一樣的。
3??給web.xml中寫入指定配置,需要注意的是,這里的代碼中可能會(huì)出現(xiàn)第三行代碼爆紅的問題,這是因?yàn)镮DEA只是針對(duì)Java代碼的識(shí)別非常準(zhǔn)確,但是對(duì)于其他文件的識(shí)別并不準(zhǔn)確,這里的爆紅并不代表是錯(cuò)的。
<!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>
??4、編寫Servlet代碼。
1??在main目錄下的Java目錄中創(chuàng)建一個(gè)HelloServlet類,繼承HttpServlet類(這個(gè)類就是我們?cè)谥醒雮}庫下載的Servlet API的jar包中提供的)
2??重寫父類的doGet方法,在代碼執(zhí)行的時(shí)候,因?yàn)槎鄳B(tài)的原因,執(zhí)行的就是子類的doGet方法。作用就是根據(jù)請(qǐng)求,計(jì)算生成的響應(yīng)。這里doGet方法中存在兩個(gè)參數(shù)HttpServletRequest req(HTTP請(qǐng)求)和?HttpServletResponse resp(HTTP響應(yīng))。
??重寫的doGet方法中的參數(shù)解析。
req代表的就是HTTP請(qǐng)求??蛻舳税l(fā)送的HTTP請(qǐng)求被Tomcat收到之后,把這個(gè)請(qǐng)求按照HTTP協(xié)議的格式解析成HTTP servlet req對(duì)象,這個(gè)對(duì)象中的屬性就是HTTP中的信息。最后將解析好的HTTP請(qǐng)求傳給doGet方法用來計(jì)算響應(yīng)。
resp代表的是HTTP響應(yīng),resp是一個(gè)輸出型參數(shù)。這個(gè)響應(yīng)是一個(gè)空的對(duì)象,需要我們?cè)赿oGet中,設(shè)置響應(yīng)的一些數(shù)據(jù)(比如響應(yīng)的body、header和狀態(tài)碼等),只要把屬性設(shè)置到這個(gè)resp對(duì)象中,Tomcat就會(huì)自動(dòng)根據(jù)HTTP servlet響應(yīng)對(duì)象,構(gòu)造一個(gè)HTTP響應(yīng)的字符串,通過socket返回給客戶端。
3??在doGet方法中寫入業(yè)務(wù)邏輯代碼,構(gòu)造resp.
4??加上注解(WebServlet)注解表示路徑,這個(gè)注解的作用是包當(dāng)前的類和一個(gè)HTTP請(qǐng)求的路徑關(guān)聯(lián)起來,不同的路徑關(guān)聯(lián)的是不同類,可以觸發(fā)不同的代碼(注解是Java中的特殊的類,Java專門定義了一種類來實(shí)現(xiàn)注解,作用是針對(duì)一個(gè)類/方法,進(jìn)行額外解釋說明,賦予額外的含義)。
import javax.jws.WebService;
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;
@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//在這個(gè)服務(wù)器的控制臺(tái)中,打印了字符串(服務(wù)器看到了,客戶端看不到)。
System.out.println("hello world");
//這里是給resp的body中寫入hello world 字符串,這個(gè)內(nèi)容就會(huì)被http響應(yīng)返回給瀏覽器,顯示到瀏覽器頁面上。
resp.getWriter().write("hello world");
}
}
這里的resp.getWriter()會(huì)得到一個(gè)write對(duì)象,這里的write對(duì)象是resp對(duì)象內(nèi)部持有的,并且這個(gè)write對(duì)象是一個(gè)字符流對(duì)象。所以這里我們可以使用字符流輸入方法write(),向這個(gè)write對(duì)象中寫入數(shù)據(jù)。這里寫入的數(shù)據(jù)放到了HTTP響應(yīng)的body中。
這里需要注意的就是,在重寫doGet方法時(shí),doGet方法中會(huì)調(diào)用父類的doGet方法,這個(gè)方法會(huì)被默認(rèn)執(zhí)行,這里需要把這個(gè)super.doGet(req,resp)刪除掉,因?yàn)檎{(diào)用的這個(gè)方法并沒有處理業(yè)務(wù)邏輯,而是直接報(bào)出錯(cuò)誤(405和400)。想要執(zhí)行我們寫的業(yè)務(wù)邏輯就需要將這句代碼刪除掉。
5、打包程序
將servlet代碼編寫完成之后,不能直接在IDEA獨(dú)立上運(yùn)行,需要將我們的寫的代碼打包,放到Tomcat上運(yùn)行。
我們平時(shí)見到的壓縮包是rar或者zip,但是在Java中,使用的壓縮包是jar和war。我們將一個(gè)普通的Java程序可以打包成jar,但是部署到Tomcat上的程序需要打包成war包。war包和jar包在本質(zhì)上沒啥區(qū)別,都是把一堆 .class 文件打包進(jìn)去,但是war包是屬于Tomcat的專屬格式,里面會(huì)有一些特定的目錄結(jié)構(gòu)和文件,比如web.xml。后續(xù)Tomcat就要識(shí)別這些內(nèi)容,來加載webapp.
?編譯器打包的過程中,會(huì)做的事情
- 檢查代碼中是否存在一些依賴,依賴是否下載好了,如果沒有下載好,這個(gè)時(shí)候會(huì)嘗試下載。
- 把代碼進(jìn)行編譯,生成一堆 .class文件
- 把這些.class文件,以及web.xml按照一定的格式進(jìn)行打包。
根據(jù)下圖的步驟,就可以完成一個(gè)打包的流程,但是看到這里打好的包是一個(gè)jar包,并不是上面說的war包,這是因?yàn)镸evan默認(rèn)的打包格式就是jar。
?想要打包是war格式,就需要調(diào)整pom.xml,描述打包生成的包格式。點(diǎn)擊打開pom.xml文件,在project頂級(jí)標(biāo)簽的下方,寫一個(gè)packaging標(biāo)簽,描述打包的類型是war。我們也可以在這里指定一下打好包的名字 ,使用 build標(biāo)簽,并在這個(gè)標(biāo)簽內(nèi)部使用finalName標(biāo)簽描述一個(gè)包的名字。這里將這個(gè)包的名字設(shè)置為hello_servlet。
//設(shè)置打包的格式為war
<packaging>war</packaging>
//設(shè)置打好包的名字
<build>
<finalName>hello_servlet</finalName>
</build>
?可以看見根據(jù)我們的設(shè)置,打好的包為war包,并且包名也是我們?cè)O(shè)置的
6、將程序部署到Tomcat上
可以在IDEA上單擊右鍵找到open in然后點(diǎn)擊Explorer,自動(dòng)在文件夾中找到打好的包,也可以在項(xiàng)目所在目錄中找到war包,然后將這個(gè)包復(fù)制到Tomcat的webapps目錄上,然后重新啟動(dòng)Tomcat就完成了部署。這里war包是一個(gè)壓縮文件,但是放在這里之后,并不需要我們對(duì)其解壓縮,Tomcat可以自動(dòng)的解壓縮。
?運(yùn)行Tomcat之后,自動(dòng)解壓縮。
7、驗(yàn)證程序運(yùn)行結(jié)果
這里我們完成部署之后,并不是重新啟動(dòng),我們寫的doGet方法就可以執(zhí)行,這個(gè)doGet方法是在遇到Get請(qǐng)求之后,才會(huì)執(zhí)行該方法。換句話說doGet方法,是用來處理HTTP GET請(qǐng)求的。當(dāng)然,也不是隨便遇到一個(gè)GET請(qǐng)求,就會(huì)執(zhí)行doGet方法,必須是請(qǐng)求的URL路徑要匹配。
?這就和我們寫的代碼對(duì)應(yīng)上了。
當(dāng)然有doGet方法就會(huì)有doPost方法、doPut方法,這些方法都是處理相應(yīng)的請(qǐng)求的。
?要注意我們?cè)跒g覽器上訪問服務(wù)器時(shí),有兩級(jí)目錄。
- 第一級(jí)路徑為hello_servlet,是Tomcat的webapps目錄中的文件,這一級(jí)目錄也被稱為Context Path/Application Path,標(biāo)識(shí)了一個(gè)webapp,也就是這個(gè)war包名。
- 第二級(jí)路徑為hello,這一級(jí)路徑被稱為Servlet Path,標(biāo)識(shí)當(dāng)前請(qǐng)求要調(diào)用那個(gè)Servlet類的doGet方法。這里的第二級(jí)路徑是根據(jù)代碼中的WebServlet注解來寫的。
?三、在IDEA上安裝Smart Tomcat插件
上面介紹的創(chuàng)建一個(gè)Mevan項(xiàng)目,需要完成的七步操作,第5步和第6步可以進(jìn)行簡化,因?yàn)槊看涡聞?chuàng)建一個(gè)Mevan項(xiàng)目或者修改之前項(xiàng)目中的代碼,就需要重新打包和部署,這個(gè)過程就有點(diǎn)麻煩,所以我們可以在IDEA上裝Smart Tomcat插件就可以簡化這個(gè)兩個(gè)步驟。
1??點(diǎn)擊File,找到設(shè)置settings選項(xiàng)。
2?? 選中插件Plugins選項(xiàng),選中Marketplace之后,在搜索欄中輸入Tomcat,點(diǎn)擊下載即可。
?3??首次使用需要在IDEA中進(jìn)行配置,點(diǎn)擊右上角的Add Configuration。
4??點(diǎn)擊+號(hào),然后找到Smart Tomcat選項(xiàng)點(diǎn)擊。
?5??可以Name中修改名字,需要在Tomcat server中修改路徑。
配置好了之后,就可以點(diǎn)擊這個(gè)三角來運(yùn)行我們的代碼。?
這個(gè)時(shí)候Tomcat的日志,就會(huì)在IDEA中顯示了,不會(huì)在單獨(dú)彈出cmd,之前運(yùn)行出現(xiàn)的亂碼,也就不會(huì)出現(xiàn)了。
選要注意的是,使用Smart Tomcat的運(yùn)行方式和之前的將war包拷貝到Tomcat的webapps中,是存在本質(zhì)區(qū)別的,Smart Tomcat使用的運(yùn)行方式是在運(yùn)行Tomcat的時(shí)候,通過特定的參數(shù),來指定Tomcat加載該項(xiàng)目中main目錄中的webapp目錄。就是讓Tomcat加載單個(gè)webapp運(yùn)行,因此這個(gè)過程,既沒有打包也沒有拷貝。
四、Servlet中的一些常見錯(cuò)誤
1??常見錯(cuò)誤1:404 — 表示瀏覽器訪問的資源,在瀏覽器上不存在。
- 請(qǐng)求的路徑寫錯(cuò)了
- 路徑寫對(duì)了,但是war包沒有被正確加載
第一種情況,就是你的URL寫錯(cuò)了?,需要檢查你的URL,Context path是啥,Servlet Path是啥。
- 如果你使用將jar包拷貝到Tomcat的webapps目錄中的方式,那么你的Context path就是你在pom.xml中設(shè)置的包名,Servlet Path就是你在代碼中寫道的WebServlet注解,注解中的參數(shù)就是Servlet Path.
- 如果你使用Smart Tomcat方式,那么Context Path就是你在配置Smart Tomcat時(shí)設(shè)置的,Servlet Path就是代碼注解中的參數(shù)。
?第二種情況,有可能是web.xml中寫錯(cuò)了,就會(huì)導(dǎo)致war包不能被正確加載;也有可能有兩個(gè)Servlet的Servlet Path相同,會(huì)導(dǎo)致不能正確加載。
?2??常見錯(cuò)誤2:405?
第一種情況:發(fā)送的請(qǐng)求的HTTP方法與代碼中的不匹配,也就是說代碼中沒有實(shí)現(xiàn)相應(yīng)的處理這個(gè)請(qǐng)求的方法。例如代碼中寫了一個(gè)doPost方法,但是你發(fā)送的請(qǐng)求是一個(gè)GET請(qǐng)求。
?第二種情況:雖然代碼中的方法和瀏覽器請(qǐng)求的HTTP方法對(duì)應(yīng),但是在寫代碼的時(shí)候沒有將doxxx方法中的super.doxxx方法刪除掉。就會(huì)出現(xiàn)405.
??3??常見錯(cuò)誤3:500 — 表示服務(wù)器代碼拋出了異常,需要仔細(xì)觀察異常調(diào)用棧
先在代碼中構(gòu)造一個(gè)異常。
4??常見錯(cuò)誤4:出現(xiàn)空白頁面?
將代碼中的resp.getWriter().write("hello world"),這就代碼刪除掉,就會(huì)出現(xiàn)這個(gè)問題。這句代碼的意思是向resp對(duì)象的write對(duì)象中寫入響應(yīng)的結(jié)果,最終將write中的內(nèi)容會(huì)放在HTTP響應(yīng)的body中。將其刪掉就是這個(gè)響應(yīng)中沒有body,所以頁面就是空白的。
5??常見錯(cuò)誤5:無法訪問此網(wǎng)站。
將Tomcat關(guān)閉之后,就會(huì)出現(xiàn)頁面無法訪問的情況。文章來源:http://www.zghlxwxcb.cn/news/detail-583122.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-583122.html
到了這里,關(guān)于【JavaEE】Tomcat的安裝和使用、創(chuàng)建Mevan項(xiàng)目使用Servlet寫一個(gè)程序的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!