Tomcat的安裝與使用及Maven與Servlet的使用教程
一.Tomcat的下載與使用
1. Tomcat簡(jiǎn)介
Tomcat是Apache軟件基金會(huì)(Apache Software Foundation)的Jakarta項(xiàng)目中的一個(gè)核心項(xiàng)目, 由Apache, Sun和其他一些公司及個(gè)人共同開(kāi)發(fā)而成, 由于有了Sun的參與和支持, 最新的Servlet和JSP規(guī)范總是能在Tomcat中得到體現(xiàn), Tomcat5支持最新的Servlet 2.4和JSP 2.0規(guī)范.
因?yàn)門(mén)omcat技術(shù)先進(jìn), 性能穩(wěn)定, 而且免費(fèi), 因而深受Java愛(ài)好者的喜愛(ài)并得到了部分軟件開(kāi)發(fā)商的認(rèn)可, 成為比較流行的Web應(yīng)用服務(wù)器.
Tomcat是一個(gè)HTTP服務(wù)器, HTTP服務(wù)器有很多種, 在Java領(lǐng)域中, Tomcat是最知名, 最廣泛使用的一個(gè), 本質(zhì)上是基于TCP服務(wù)器, 按照HTTP協(xié)議的約定來(lái)解析請(qǐng)求, 構(gòu)造響應(yīng).
2. 安裝和使用
下載與安裝:1??第一步, 瀏覽器中搜索Tomcat, 找到Tomcat官網(wǎng) https://tomcat.apache.org/
2??第二步, 根據(jù)你的環(huán)境, 選擇相應(yīng)版本下載即可, 需要知道的是Tomcat的版本和你使用的Servlet版本是有強(qiáng)相關(guān)的, 這里就下載Tomcat8了, 對(duì)應(yīng)的Servlet的版本就是3.1的.

3??第三步, 點(diǎn)進(jìn)去, 選擇zip文件點(diǎn)擊下載即可, 如果你有下載多個(gè)版本的需求, 也是可以的, Tomcat是純綠色的軟件, 直接解壓就能使用, 下載多個(gè)版本之間是互不影響的.

4??第四步, 找個(gè)你常用的目錄, 解壓即可, 點(diǎn)進(jìn)目錄, 你會(huì)得到下面一堆文件:

還要注意, Tomcat是基于Java實(shí)現(xiàn)的, 這就要求你的環(huán)境中必須要有jdk, 如果沒(méi)有Tomcat是跑不起來(lái)的.使用:5??第五步, 了解各目錄文件的作用

??bin目錄中放的是Tomcat相關(guān)的批處理文件, .bat文件表示Windows批處理文件, .sh文件表示Linux的shell腳本文件, 其中包含啟動(dòng)和關(guān)閉Tomcat的可執(zhí)行文件, 也就是說(shuō)Tomcat也是可以在Linux上運(yùn)行的, 以startup命名的文件就是Tomcat啟動(dòng)程序, 以shutdown命名的文件就是Tomcat關(guān)閉程序.

??conf目錄中含有Tomcat的配置文件, 配置文件是xml類型的文件, 比如可以在server.xml文件可以配置Tomcat的端口號(hào), 不修改的話默認(rèn)就是8080了.

??logs目錄主要用來(lái)儲(chǔ)存日志, Tomcat運(yùn)行的日志都在這里, 如果程序出問(wèn)題了, 就需要看這里的日志來(lái)排產(chǎn)問(wèn)題.??webapps目錄儲(chǔ)存我們部署的Serlvet程序, Servlet部署的程序是war結(jié)尾的壓縮包, Tomcat將一個(gè)war包解壓后就是一個(gè)webapp, 即一個(gè)網(wǎng)站, 一個(gè)Tomcat可以部署多個(gè)Servlet程序, 即多個(gè)網(wǎng)站, 所以就是webapps, 里面的每個(gè)目錄都代表一個(gè)獨(dú)立的網(wǎng)站.
temp, lib, work目錄用的不多, 就不作贅述了.

6??第六步, 啟動(dòng)Tomcat, 我們可以在bin目錄下找到startup.bat文件點(diǎn)擊在本地啟動(dòng)Tomcat, 然后直接訪問(wèn)http://127.0.0.1:8080可訪問(wèn)到Tomcat歡迎頁(yè)面(Tomcat自帶的一個(gè)webapp).

啟動(dòng)Tomcat的頁(yè)面圖如下, 出現(xiàn)類似org.apache.catalina.startup.Catalina.start Server startup in 936 ms的信息就表示啟動(dòng)成功了

可以看到這里控制臺(tái)有些是亂碼的, 這是因?yàn)槲覀兊腡omcat是在下Windows下啟動(dòng)的, Windows的默認(rèn)編碼是GBK, 我們可以可以修改以下配置conf/logging.properties, 然后關(guān)閉Tomcat后重新啟動(dòng).
當(dāng)然, 如果要將Tomcat配置到Linux環(huán)境下, 這里的配置還是需要改回UTF8的.


要注意, 當(dāng)啟動(dòng)一個(gè)Tomcat程序后再啟動(dòng)一個(gè)Tomcat程序會(huì)啟動(dòng)失敗, 因?yàn)槎丝谔?hào)8080已經(jīng)被上一個(gè)Tomcat程序占用了.

7??第七步, 將項(xiàng)目部署到Tomcat, 所謂部署就是將我們的代碼拷貝到webapps目錄下即可, 然后在bin目錄找到startup.bat文件重新啟動(dòng)Tomcat, 最后訪問(wèn)http://127.0.0.1:8080/部署文件的相對(duì)wepapps目錄的相對(duì)路徑進(jìn)行驗(yàn)證.
比如我的webapps目錄中有一個(gè)BlogSystem文件夾, 里面有一個(gè)login.html頁(yè)面文件, 我們現(xiàn)在要使用Tomcat訪問(wèn)這個(gè)文件, 訪問(wèn)的url就為http://127.0.0.1:8080/BlogSystem/login.html.
這里訪問(wèn)的路徑組成為, ip:端口號(hào), 后面的BlogSystem是我們的webapps下的目錄, 我們也稱為context path/application path, 再后面的路徑是我們的context path下要訪問(wèn)的文件, 這種形式的訪問(wèn)是通過(guò)網(wǎng)絡(luò)可以跨主機(jī)訪問(wèn)的, 初學(xué)要注意與本地點(diǎn)文件打開(kāi)訪問(wèn)進(jìn)行區(qū)分.

訪問(wèn)http://127.0.0.1:8080/BlogSystem/login.html結(jié)果如下,

不過(guò)我們這里在Tomcat部署的網(wǎng)頁(yè), 是在局域網(wǎng)環(huán)境下, 只有在同一局域網(wǎng)下的設(shè)備才可以訪問(wèn), 如果是部署在外網(wǎng)IP下, 那么全世界的設(shè)備就都可以訪問(wèn)了.
最后就是關(guān)閉Tomcat了, 一共有三種關(guān)閉方式:
- Ctrl + C關(guān)閉
- 直接點(diǎn)窗口右上角X號(hào)關(guān)閉
- 使用bin目錄下的shutdown.bat關(guān)閉
這三種方式中, 第1, 2種是比較粗暴的關(guān)閉方式, 這種方式會(huì)直接殺死進(jìn)程; 第3種方式比較優(yōu)雅, Tomcat還會(huì)綁定一個(gè)8005管理端口, 是通過(guò)管理端口來(lái)關(guān)閉的, 會(huì)多做一些收尾工作; 但實(shí)際上, 第1, 2種關(guān)閉方式是更方便, 更常用的.
二.Maven的使用
Maven是專門(mén)用于管理和構(gòu)建Java項(xiàng)目的 “工程管理” 工具, 有規(guī)范目錄結(jié)構(gòu), 管理依賴, 構(gòu)建/編譯, 打包, 測(cè)試等功能, Maven是一個(gè)獨(dú)立的程序, 但不需要我們單獨(dú)下載安裝, IDEA中已經(jīng)直接集成了.
那么首先來(lái)介紹如何使用IDEA來(lái)使用Maven來(lái)引入的依賴, 以引入Servlet的為例.
1??第一步, 新建項(xiàng)目, 選擇Maven.
選中這里的Maven點(diǎn)擊Create就可以創(chuàng)建Maven管理的項(xiàng)目了,

項(xiàng)目創(chuàng)建好后會(huì)就會(huì)自動(dòng)創(chuàng)建如下目錄結(jié)構(gòu),

main目錄中放業(yè)務(wù)代碼, java目錄中放java代碼, resources目錄中放程序的依賴文件, test目錄下放測(cè)試代碼, pom.xml文件是Maven項(xiàng)目總的配置文件.
如果是首次使用Maven, 項(xiàng)目創(chuàng)建好了之后, 會(huì)在下面讀條, 從中央倉(cāng)庫(kù)加載一些Maven的依賴, 由于Maven倉(cāng)庫(kù)的服務(wù)器是在國(guó)外的, 下載的速度就可能比較慢; 如果實(shí)在太慢嘗試就更換下網(wǎng)絡(luò), 或者配置一下國(guó)內(nèi)鏡像的阿里云服務(wù)器再下載.
2??第二步, 引入依賴.
首先要知道坐標(biāo)的概念, Maven中的坐標(biāo)是資源的唯一標(biāo)識(shí), 要使用坐標(biāo)來(lái)引入項(xiàng)目中所需要的依賴, Maven標(biāo)準(zhǔn)由以下幾個(gè)部分組成:
groupId: 定義當(dāng)前Maven項(xiàng)目隸屬組織名稱(通常是域名的反寫(xiě))artifactId: 定義當(dāng)前Maven項(xiàng)目名稱(通常是模塊名稱, maven_project)version: 定義當(dāng)前項(xiàng)目版本號(hào)scope: 設(shè)置對(duì)應(yīng)jar包的作用范圍
這里以引入Servlet的依賴為例進(jìn)行介紹, 我們要去Maven中央倉(cāng)庫(kù)(https://mvnrepository.com/), 搜索Servlet, 找到Servlet的jar包點(diǎn)進(jìn)去


點(diǎn)擊選擇3.1版本, 和tomcat8對(duì)應(yīng), 復(fù)制圖中位置的坐標(biāo)內(nèi)容.

把坐標(biāo)拷貝到項(xiàng)目的pom.xml文件中, 我們需要, 先創(chuàng)建一個(gè)dependencies標(biāo)簽, 是project標(biāo)簽的子標(biāo)簽, 可以放多個(gè)依賴, 把依賴依次拷貝到這個(gè)標(biāo)簽即可.

首次使用, 這里可能會(huì)爆紅, 說(shuō)明依賴還沒(méi)有下載下來(lái).當(dāng)這段代碼復(fù)制到pom.xml文件中, Maven就會(huì)自動(dòng)下載相應(yīng)的依賴文件, 沒(méi)有觸發(fā)自動(dòng)下載的話, 可以手動(dòng)刷新一下觸發(fā)下載, 當(dāng)依賴下載完成后, 也就不爆紅了.

這樣就引入依賴成功了.

三.Servlet
Servlet是一種實(shí)現(xiàn)動(dòng)態(tài)頁(yè)面的技術(shù), 要注意區(qū)分靜態(tài)頁(yè)面和動(dòng)態(tài)頁(yè)面:
- 靜態(tài)頁(yè)面: 網(wǎng)頁(yè)內(nèi)容始終固定不變的(單純的html)
- 動(dòng)態(tài)頁(yè)面: 用戶不同/時(shí)間不同/輸入?yún)?shù)不同時(shí)頁(yè)面的內(nèi)容會(huì)發(fā)生變化(html+后端交互數(shù)據(jù))
Servlet是Tomcat提供的一組API, 封裝了HTTP相關(guān)操作, 可以讓我們不必關(guān)注Socket, HTTP協(xié)議格式等細(xì)節(jié), 降低了Web開(kāi)發(fā)的門(mén)檻, 提高開(kāi)發(fā)效率.
Servlet主要進(jìn)行的工作:
- 允許我們創(chuàng)建一個(gè)類, Tomcat收到某個(gè)特定路徑的HTTP請(qǐng)求時(shí), 執(zhí)行該類中的某個(gè)方法
- 對(duì)HTTP請(qǐng)求進(jìn)行解析, 并將HTTP請(qǐng)求從一個(gè)字符串解析成一個(gè)HttpRequest對(duì)象
- 我們只需要給指定的HttpResponse對(duì)象的一些屬性字段填寫(xiě), Servlet就會(huì)自動(dòng)的按照HTTP協(xié)議的方式構(gòu)造出一個(gè)HTTP響應(yīng)的字符串, 然后通過(guò)Socket寫(xiě)回客戶端.
1. 第一個(gè)Servlet程序
那么下面就來(lái)寫(xiě)一個(gè)Servlet程序, 我們使用Servlet來(lái)在寫(xiě)一個(gè)hello world程序, 然后部署到Tomcat上, 此時(shí)通過(guò)瀏覽器去訪問(wèn), 就會(huì)在網(wǎng)頁(yè)上得到一個(gè)有hello world字符串的頁(yè)面.
1??第一步, 創(chuàng)建Maven項(xiàng)目, 創(chuàng)建步驟在上面介紹過(guò)了.
2??第二步, 引入Servlet依賴, 還是去參考上面寫(xiě)的.
3??第三步, 創(chuàng)建目錄結(jié)構(gòu), 雖然Maven已經(jīng)幫我們自動(dòng)創(chuàng)建了一些目錄, 但是還不夠, 因?yàn)榇颂幬覀兪褂肕aven開(kāi)發(fā)的是一個(gè)Web程序, 還需要一些額外的目錄.
在main目錄里創(chuàng)建webapp目錄, 該目錄和java,resources并列

在webapp目錄里面創(chuàng)建WEB-INF目錄.

在WEB-INF目錄下創(chuàng)建web.xml文件.

給web.xml寫(xiě)入指定配置, 需要注意的是, 這里的代碼可能是爆紅的, 但在這里并不代表就是錯(cuò)的, IDEA中只是針對(duì)Java代碼能夠進(jìn)行比較準(zhǔn)確的分析和判定, 針對(duì)其他代碼, 如果標(biāo)紅, 是否是錯(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>這里相關(guān)的還要理解的是, Servlet程序中是沒(méi)有main方法的, 那么它是怎么跑起來(lái)的呢?這就和我們創(chuàng)建的這個(gè)web.xml有關(guān)了, 依靠這個(gè)文件, Tomcat就可以識(shí)別webapps目錄下哪些項(xiàng)目目錄是需要加載到服務(wù)器中的.
所以說(shuō), 這樣的目錄結(jié)構(gòu)是必須的, 使用Tomcat就得遵照人家的要求, 當(dāng)然也不是不可以改其他名稱, 是需要額外配置的.
4??第四步, 在Java目錄下編寫(xiě)Servlet代碼.
- 創(chuàng)建類HelloServlet, 繼承HttpServlet類(由Servlet API提供, 寫(xiě)Servlet代碼一般都要繼承這個(gè)類).
- 重寫(xiě)doGet方法, 用來(lái)處理HTTP GET請(qǐng)求, 根據(jù)請(qǐng)求生成響應(yīng), 有HttpServletRequest req(TCP socket中讀出來(lái)的字符串,按照HTTP協(xié)議解析得到的對(duì)象), HttpServletResponse resp(空對(duì)象, 輸出型參數(shù), 要由我們?nèi)?gòu)造)兩個(gè)參數(shù), Tomcat服務(wù)器接收到GET或者POST請(qǐng)求時(shí)就會(huì)調(diào)用這里相應(yīng)的方法(不需要我們手動(dòng)調(diào)用).
- 在方法里面寫(xiě)業(yè)務(wù)邏輯代碼, 構(gòu)造出resp.
- 加上WebServlet注解標(biāo)識(shí)路徑, 這個(gè)注解的作用是把當(dāng)前的類和一個(gè)HTTP請(qǐng)求的路徑關(guān)聯(lián)起來(lái), 不同的路徑關(guān)聯(lián)的是不同類, 可以觸發(fā)不同的代碼 (注解是Java 中的特殊的類, Java專門(mén)定義了一種 “語(yǔ)法糖” 來(lái)實(shí)現(xiàn)注解, 作用是針對(duì)一個(gè)類/方法, 進(jìn)行額外的解釋說(shuō)明, 賦予額外的含義).
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;
// 把當(dāng)前的類和HTTP請(qǐng)求的路徑關(guān)聯(lián)起來(lái)
// 根據(jù)url中的路徑, 通過(guò)這個(gè)注解, 就可以確定調(diào)用服務(wù)器中的哪個(gè)類的方法
// 路徑和servlet是一一對(duì)應(yīng)關(guān)系
@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 不要調(diào)用父類的構(gòu)造方法
//super.doGet(req, resp);
// 控制臺(tái)輸出hello world
System.out.println("hello world");
// 構(gòu)造resp對(duì)象
// 寫(xiě)入resp中的body中, 最終由tomcat寫(xiě)入網(wǎng)卡, 發(fā)送至客戶端
resp.getWriter().write("hello world");
}
}要理解, 一個(gè)Servlet程序中, 可以有很多的Servlet類, 每個(gè)Servlet類都可以關(guān)聯(lián)到不同的路徑(對(duì)應(yīng)到不同的資源), 多個(gè)Servlet就可以實(shí)現(xiàn)了不同的邏輯和功能, 路徑和Servlet類之間是一對(duì)一的關(guān)系.
上面的代碼中要注意, 直接快捷鍵重寫(xiě)的doGet方法, 默認(rèn)調(diào)用的是父類的doGet, 而父類是直接寫(xiě)回一個(gè)錯(cuò)誤的, 所以一定要注意將默認(rèn)調(diào)用的super.doGet()刪除, 然后再去實(shí)現(xiàn)自己的邏輯;



代碼中resp.getWriter()會(huì)得到一個(gè)Writer對(duì)象, 這里的writer對(duì)象是從屬于resp對(duì)象的, 此處的write操作其實(shí)是往resp的body部分進(jìn)行寫(xiě)入, 等resp對(duì)象整個(gè)構(gòu)造好了, tomcat會(huì)統(tǒng)一轉(zhuǎn)成HTTP相應(yīng)的格式, 寫(xiě)入socket.
5??第五步, 打包程序.
Maven默認(rèn)打的是jar包, jar包中只含有普通的java程序(.class), 而Tomcat中的webapp需要的war包, war包是Tomcat部署webapp使用的壓縮文件, 可以包含一些前端代碼和特定的目錄結(jié)構(gòu), 以方便后續(xù)Tomcat識(shí)別這些內(nèi)容, 來(lái)加載webapp.
首先需要在pom.xml文件寫(xiě)入以下內(nèi)容, 與dependencies同一級(jí), 目的是為了使打包的壓縮格式為war和指定包名.
<!-- 描述要包類型 -->
<packaging>war</packaging>
<!-- 聲明包名 -->
<build>
<finalName>hello_servlet</finalName>
</build>然后點(diǎn)擊IDEA右側(cè)的Maven, 雙擊Lifecycle下的package, 此時(shí)Maven就會(huì)幫助我們打包項(xiàng)目, 項(xiàng)目中會(huì)出現(xiàn)一個(gè)target目錄, 打包后的war包就在其中.


這里的打包其實(shí)是完成了以下操作:
- 檢查代碼中是否存在一些依賴, 依賴是否下載好.
- 把代碼進(jìn)行編譯, 生成.class文件.
- 把這些.class 文件, 以及 web.xml按照一定的格式進(jìn)行打包.
6??第六步, 將程序部署到Tomcat將打包好的war包拷貝到Tomcat中的webapps目錄中即可.

7??第七步, 驗(yàn)證程序運(yùn)行結(jié)果.
啟動(dòng)Tomcat服務(wù)器, 在瀏覽器地址欄中訪問(wèn)http://127.0.0.1:8080/hello_servlet/hello可以得到一個(gè)顯示hello world的頁(yè)面, 同時(shí)命令行運(yùn)行的Tomcat也會(huì)輸出hello world.


要注意這里的兩級(jí)路徑, 第一級(jí)路徑是webapps目錄下的war包文件名, 也叫做Context Path; 第二級(jí)路徑是我們代碼中在注解標(biāo)注的路徑, 也叫做Servlet Path; 即/war包名(一級(jí)路徑)/注解標(biāo)注的路徑(二級(jí)路徑).
這里的war包名稱為hello_servlet, 注解標(biāo)注的路徑是/hello; 所以綜合起來(lái), 加上前面的協(xié)議域名和端口號(hào), URL就是http://127.0.0.1:8080/hello_servlet/hello.
總結(jié)一下, 這里有7步, 依次是, 創(chuàng)建Maven項(xiàng)目, 引入依賴, 創(chuàng)建webapp目錄結(jié)構(gòu), 編寫(xiě)Servlet代碼, 打包, 部署, 驗(yàn)證.
2. 在idea中集成Tomcat
Smart Tomcat是IDEA上的一個(gè)插件, 上面所介紹的Servlet程序運(yùn)行步驟其實(shí)是可以簡(jiǎn)化的, 主要是第五步和第六步, 每次修改都需要重新打包和部署, 其實(shí)是有點(diǎn)麻煩的, Smart Tomcat就幫助我們解決了這個(gè)問(wèn)題.
Smart Tomcat插件安裝和使用步驟如下:
1??第一步, 打開(kāi)IDEA設(shè)置, 找到插件選項(xiàng), 即Plugins.

2??第二步, 在Marketplace搜索Smart Tomcat, 下載安裝即可.

3??第三步, 重啟IDEA, 配置Smart Tomcat.

點(diǎn)擊+新增配置, 選中Smart Tomcat

配置Tomcat

配置好后點(diǎn)擊綠色的倒三角形就可以運(yùn)行Servlet程序了.

看到下圖中的提示, Tomcat就啟動(dòng)成功了, 不過(guò)這個(gè)不能訪問(wèn)Tomcat的歡迎頁(yè)面.

要注意, 使用Smart Tomcat啟動(dòng)Tomcat和之前介紹的是有本質(zhì)區(qū)別的, Smart Tomcat的工作原理, 不是說(shuō)把war包拷貝(webapps里是不變的), 使用Smart Tomcat支持啟動(dòng)的時(shí)候顯示指定一個(gè)特定的webapp目錄, 相當(dāng)于是讓Tomcat加載單個(gè)webapp運(yùn)行, IDEA直接調(diào)用Tomcat, 讓Tomcat加載當(dāng)前項(xiàng)目中的目錄, 這里沒(méi)有打包, 拷貝和解壓縮的過(guò)程.
這兩種部署, 其實(shí)是兩種Tomcat運(yùn)行方式, 對(duì)于Context Path的定位不同; 如果是直接拷貝war包的方式部署, Context Path就是war包名; 如果是Smart Tomcat方式部署, 這里的Context Path是可以自己配置的.
IDEA專業(yè)版還直接集成了Tomcat Server插件, 不過(guò)還是沒(méi)有這個(gè)簡(jiǎn)單好用.
3. 常見(jiàn)錯(cuò)誤
??常見(jiàn)錯(cuò)誤1: 404404 表示用戶訪問(wèn)的資源不存在, 大概率是 URL 的路徑寫(xiě)的不正確.

或者是你的webapp沒(méi)有正確被部署: web.xml 寫(xiě)錯(cuò)了, 文件名錯(cuò)了, 文件路徑錯(cuò)了, 文件位置錯(cuò)了…
??常見(jiàn)錯(cuò)誤2: 405
405 表示對(duì)應(yīng)的 HTTP 請(qǐng)求方法沒(méi)有實(shí)現(xiàn), 比如我們?cè)跒g覽器發(fā)了個(gè)GET請(qǐng)求, 但是代碼里沒(méi)寫(xiě)doGet, 此時(shí)就會(huì)出現(xiàn)405.


還有可能就是重寫(xiě)的方法中沒(méi)有去掉默認(rèn)調(diào)用的父類方法, 如super.doGet


??常見(jiàn)錯(cuò)誤3:500
往往是Servlet代碼中拋出異常導(dǎo)致的, 這個(gè)問(wèn)題最好解決, 因?yàn)?00的時(shí)候頁(yè)面日志中會(huì)明確告訴你異常調(diào)用棧, 告訴你是哪一行代碼出的異常比如我們給代碼來(lái)一個(gè)空指針異常.


??常見(jiàn)錯(cuò)誤4: 出現(xiàn)空白頁(yè)面
方法中邏輯沒(méi)有寫(xiě)類似resp.getWriter().write()這樣的代碼
??常見(jiàn)錯(cuò)誤5: 頁(yè)面無(wú)法訪問(wèn)最常見(jiàn)的原因就是Tomcat沒(méi)有啟動(dòng)或者崩潰, 我們把Tomcat關(guān)了, 就會(huì)出現(xiàn)頁(yè)面無(wú)法訪問(wèn)的情況, Tomcat無(wú)法啟動(dòng), 很可能是端口沖突了.

到此這篇關(guān)于Tomcat的安裝與使用,Maven與Servlet的使用的文章就介紹到這了,更多相關(guān)Tomcat Maven與Servlet的使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
簡(jiǎn)單實(shí)現(xiàn)nginx+tomcat的反向代理與動(dòng)靜分離
這篇文章主要介紹了簡(jiǎn)單實(shí)現(xiàn)nginx+tomcat的反向代理與動(dòng)靜分離,需要的朋友可以參考下2016-05-05
cemtos 7 linux 安裝與卸載 tomcat 7的教程
這篇文章主要介紹了cemtos 7 linux 安裝與卸載 tomcat 7的教程,需要的朋友可以參考下2017-10-10
Apache及Tomcat搭建集群環(huán)境過(guò)程解析
這篇文章主要介紹了Apache及Tomcat搭建集群環(huán)境過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10
Tomcat服務(wù)器啟動(dòng)失敗的一些原因及解決辦法總結(jié)
Tomcat是常用的應(yīng)用服務(wù)器之一,主要用于開(kāi)發(fā)和測(cè)試,也有少量用戶用在生產(chǎn)系統(tǒng)中,這篇文章主要給大家介紹了關(guān)于Tomcat服務(wù)器啟動(dòng)失敗的一些原因及解決辦法的相關(guān)資料,需要的朋友可以參考下2023-12-12
tomcat多實(shí)例部署的項(xiàng)目實(shí)踐
Tomcat多實(shí)例是指在一臺(tái)設(shè)備上運(yùn)行多個(gè)Tomcat服務(wù),這些Tomcat相互獨(dú)立,本文主要介紹了tomcat多實(shí)例部署的項(xiàng)目實(shí)踐,具有一定的參考價(jià)值,感興趣的可以了解一下2025-03-03

