1. Tomcat的安裝與使用
1.1 Tomcat安裝
在瀏覽器中搜索Tomcat,打開官方網頁.Tomcat官網
點擊下載Tomcat8.
點擊下載壓縮包.
下載好后解壓縮.
解壓縮后得到的目錄:
下面對上述關鍵文件做部分解釋:
-
bin
:可執(zhí)行的程序/腳本.啟動Tomcat就在這里. -
conf
:配置,用xml格式表示服務器的配置,比如像修改tomcat的綁定的端口號就需要修改這里的內容. -
lib
:tomcat依賴的一些庫.(暫時不考慮) -
logs(重要)
:日志,tomcat運行的日志都在這里.如果程序出問題了,如何排查?就看這個日志. -
webapps
:每個webapp都是一個"網站",一個tomcat上可以部署多個網站,此處就叫做"webapps". 這里包含很多目錄,每個目錄都視為一個獨立的網站,后面我們所學習的代碼也是部署到這個webapps里的.
1.2 Tomcat的啟動
Tomcat的啟動:
啟動后,我們可以看到:Server startup in xxx ms
即為啟動成功.
1.3 Tomcat部署前端頁面
新建網頁標簽頁,輸入127.0.0.1:8080
進入Tomcat歡迎頁面.(此時Tomcat必須處于運行狀態(tài))8080
是Tomcat默認的端口號.就像MySQL的默認端口號是3306
一樣.
接下來我們嘗試在Tomcat中部署前端代碼:
以我們前面學習過的博客系統(tǒng)代碼為例:
將blog系統(tǒng)拷貝至webapps這個文件夾中(部署):
在導航欄中輸入http://127.0.0.1:8080/blog/blog_list.html
通過網絡來訪問.
第一級路徑(blog),也起了個名字,叫做application path/context path
這個頁面和之前的不同,這個是通過網絡來訪問的.而之前的頁面則是通過文件路徑來訪問的.
通過網絡訪問可以跨主機訪問,通過路徑只可以訪問自己主機上的頁面.
2. Servlet
2.1 Servlet是什么
Servlet
: 是一種實現(xiàn)動態(tài)頁面的技術.是Tomcat給java提供的原生的進行web開發(fā)的api.
網頁分為兩類:
靜態(tài)頁面:頁面內容始終是固定不變的.(百度主頁)
動態(tài)頁面:頁面內容隨著輸入參數(shù)不同而改變.(百度結構頁)
2.2 第一個Servlet程序
我們先寫一個hello world程序:預期寫一個Servlet程序 部署到Tomcat上,通過瀏覽器訪問,得到hello world字符串.
一共有七個步驟:
- 創(chuàng)建項目
- 引入依賴
- 創(chuàng)建目錄結構
- 編寫代碼
- 打包程序
- 部署程序
- 驗證
- 創(chuàng)建項目
此處需要創(chuàng)建一個maven
項目.
maven是個"工程管理"工具.它可以:
- 規(guī)范目錄結構
- 管理依賴
- 構建
- 打包
- 測試
…
打開idea:
注意:首次使用maven,項目創(chuàng)建好之后,會在下面讀條,從中央倉庫加載一些maven的依賴.時間較久.
注意此處的目錄:
2. 引入依賴
打開maven中央倉庫,搜索Servlet.
此處選擇3.1.0
版本.
拷貝maven代碼至pom.xml
中.
注意添加 標簽!如果有多個依賴,都往里面拷貝即可.
如果長時間標紅,刷新:
3. 創(chuàng)建目錄結構
雖然maven已經幫我們自動創(chuàng)建了一些目錄,但是還不夠.此處是需要使用maven開發(fā)一個web程序,還需要別的目錄.
(1) 在main
目錄下,創(chuàng)建一個webapp
目錄
(2)在webapp下創(chuàng)建一個WEB-INF
目錄
(3)在WEB-INF下創(chuàng)建一個web.xml
文件
(4)給web.xml中寫以下代碼進去.
<!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>
我們寫的Servlet程序就相當于是車廂.Tomcat相當于是車頭.我們把寫好的Servlet程序放到webapps 目錄下,就相當于把車廂掛到車頭上.Tomcat如何識別webapps目錄下哪些是需要拉著跑的車廂,哪些不是. 就需要靠我們復制粘貼的代碼來識別.(WEN-INF/web.xml).
相當于投名狀.
- 編寫代碼
(1)HttpServlet
是Servlet api里提供的現(xiàn)成的類.寫Servlet代碼一般都是繼承這個HttpServlet.
(2)重寫doGet
方法
我們寫的doGet
方法,不需要我們手動調用,而是交給Tomcat
來調用.Tomcat收到get
請求,就會觸發(fā)doGet
方法.Tomcat會構造好兩個參數(shù),req
和resp
. 其中req
就是TCP socket 中讀出來的字符串,按照HTTP協(xié)議解析得到的對象. 其中resp
是個空對象(程序猿在doGet,根據請求req,結合業(yè)務邏輯構造出resp) resp是輸出型參數(shù).doGet
:根據請求計算響應.super.doGet();
父類的這個方法只是返回一個錯誤頁面,需要刪掉.
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;
//注解是java中特殊的類,Java專門定義了一種"語法糖"來實現(xiàn)注解
//注解的作用,針對一個類/方法,進行額外的"解釋說明"
//賦予了這個類.方法額外的功能/含義
//Tomcat實現(xiàn)的
//此處 @WebServlet("/hello") 的作用是:
//把當前的類,和一個HTTP請求的路徑關聯(lián)起來
@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//在服務器的控制臺里打印
System.out.println("hello world");
//將helloworld返回到客戶端.
//getWriter()會創(chuàng)建一個 write 對象
//此處的 write 操作其實是往resp的body部分進行寫入.
//等resp對象整個構造好了,tomcat會統(tǒng)一轉成 HTTP 相應的格式再寫 socket
resp.getWriter().write("hello world");
}
}
doGet 是 Tomcat 收到Get 請求的時候就會調用,具體要不要低啊用doGet,還得看當前GET請求的路徑是什么.不同的路徑可以觸發(fā)不同的代碼.(關聯(lián)到不同的類上)
一個Servlet程序中,可以有很多Servlet類,每個Servlet類都可以關聯(lián)到不同的路徑(對應到不同的資源).因此此處的多個Servlet就實現(xiàn)了不同的功能.
- 打包程序
把程序編譯好,得到一些.class
文件,再將這些.class打成壓縮包.
jar包就是.class構成的壓縮包,但是此處要打war包.jar包只是一個普通的java程序.而war包是tomcat專屬的來描述webapp的程序.一個war包就是一個webapp.
雙擊package打包:
默認情況下maven打的是jar包,需要微調代碼:
重新打包: - 部署程序
把打包好的war
拷貝到tomcat
的webapps
中即可.
啟動Tomcat. - 驗證
在地址欄中輸入:http://127.0.0.1:8080/hello_servlet/hello
小結:在瀏覽器中輸入url之后,瀏覽器就構造了一個對應的HTTP GET請求,發(fā)送給tomcat. tomcat就根據第一級路徑,確定了具體的webapp,根據第二級路徑,確定了調用哪個類. 再然后通過GET/POSE方法確定調用HelloServlet的哪個方法(doGET,doPost)
在上述過程中,5打包,6部署程序兩個過程可以使用IDEA的Tomcat插件把Tomcat 集成到IDEA中.就省去了我們手動打包的過程.手動部署的過程,只需要按一下運行,就可以自動打包部署.
基于tomcat插件自動打包部署,適用于開發(fā)階段,頻繁修改代碼驗證. 手動打包部署,適用于上線階段,發(fā)布程序.
使用tomcat插件:
插件:功能的擴展.IDEA提供了一些API,可以讓程序員開發(fā)插件,對IDEA現(xiàn)有功能進行擴展.
首次使用smart tomcat
需要配置一下.
設置tomcat
所在路徑
但是我們可以看到,啟動失敗了.
8080端口被占用.可以打開cmd輸入以下:可以看到
此時我們只需要關閉Tomcat即可.
重新啟動成功.
smart tomcat工作原理:
不是自動拷貝war包(webapps中不變),是通過另一種方式來啟動tomcat的.tomcat支持啟動的時候顯示指定一個特定的webapp目錄,相當于是讓tomcat 加載單個的webapp運行.
IDEA直接調用tomcat,讓tomcat加載當前項目中的目錄.
http://127.0.0.1:8080/后面跟的是context path
如果是直接拷貝war包的方式部署,context path就是war包名(目錄名)
如果是smart tomcat的方式部署,此時這里是可以配置的.默認是項目名.
這兩種部署,其實是兩種tomcat的運行方式,對于context path的理解不同,在使用時需要特別注意.文章來源:http://www.zghlxwxcb.cn/news/detail-613761.html
2.3 常見錯誤
- 常見錯誤1: 404
404 表示用戶訪問的資源不存在, 大概率是 URL 的路徑寫的不正確.
或者是你的webapp沒有正確被部署: web.xml 寫錯了, 文件名錯了, 文件路徑錯了, 文件位置錯了… - 常見錯誤2: 405
405 表示對應的 HTTP 請求方法沒有實現(xiàn), 比如我們在瀏覽器發(fā)了個GET請求, 但是代碼里沒寫doGet, 此時就會出現(xiàn)405.
還有可能就是重寫的方法中沒有去掉默認調用的父類方法, 如super.doGet - 常見錯誤3:500
往往是Servlet代碼中拋出異常導致的, 這個問題最好解決, 因為500的時候頁面日志中會明確告訴你異常調用棧, 告訴你是哪一行代碼出的異常
比如我們給代碼來一個空指針異常.
4. 常見錯誤4: 出現(xiàn)空白頁面
方法中邏輯沒有寫類似resp.getWriter().write()這樣的代碼文章來源地址http://www.zghlxwxcb.cn/news/detail-613761.html
- 常見錯誤5: 頁面無法訪問
最常見的原因就是Tomcat沒有啟動或者崩潰, 我們把Tomcat關了, 就會出現(xiàn)頁面無法訪問的情況, Tomcat無法啟動, 很可能是端口沖突了.
到了這里,關于【JavaEE初階】Tomcat安裝與使用及初識Servlet的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!