初識tomcat和servlet
web相關概念回顧
-
軟體架構
- C/S:客戶端/伺服器端
- B/S:瀏覽器/伺服器端
-
資源分類
- 靜態資源:所有使用者訪問後,得到的結果都是一樣的,稱為靜態資源.靜態資源可以直接被瀏覽器解析
- 如: html,css,JavaScript
- 動態資源:每個使用者訪問相同資源後,得到的結果可能不一樣。稱為動態資源。動態資源被訪問後,需要先轉換為靜態資源,在返回給瀏覽器
- 如:servlet/jsp,php,asp....
- 靜態資源:所有使用者訪問後,得到的結果都是一樣的,稱為靜態資源.靜態資源可以直接被瀏覽器解析
-
網路通訊三要素
- IP:電子裝置(計算機)在網路中的唯一標識。
- 埠:應用程式在計算機中的唯一標識。 0~65536
- 傳輸協議:規定了資料傳輸的規則
- 基礎協議:
- tcp:安全協議,三次握手。 速度稍慢
- udp:不安全協議。 速度快
- 基礎協議:
web伺服器軟體:
-
伺服器:安裝了伺服器軟體的計算機
-
伺服器軟體:接收使用者的請求,處理請求,做出響應
-
web伺服器軟體:接收使用者的請求,處理請求,做出響應。
- 在web伺服器軟體中,可以部署web專案,讓使用者通過瀏覽器來訪問這些專案
-
常見的java相關的web伺服器軟體:
- webLogic:oracle公司,大型的JavaEE伺服器,支援所有的JavaEE規範,收費的。
- webSphere:IBM公司,大型的JavaEE伺服器,支援所有的JavaEE規範,收費的。
- JBOSS:JBOSS公司的,大型的JavaEE伺服器,支援所有的JavaEE規範,收費的。
- Tomcat:Apache基金組織,中小型的JavaEE伺服器,僅僅支援少量的JavaEE規範servlet/jsp。開源的,免費的。
-
JavaEE:Java語言在企業級開發中使用的技術規範的總和,一共規定了13項大的規範
-
Tomcat:web伺服器軟體
- 下載:http://tomcat.apache.org/
- 安裝:解壓壓縮包即可。
- 注意:安裝目錄建議不要有中文和空格
- 解除安裝:刪除目錄就行了
- 啟動:
-
bin/startup.bat ,雙擊執行該檔案即可
-
訪問:瀏覽器輸入:http://localhost:8080 回車訪問自己
http://別人的ip:8080 訪問別人 -
可能遇到的問題:
-
黑視窗一閃而過:
- 原因: 沒有正確配置JAVA_HOME環境變數
- 解決方案:正確配置JAVA_HOME環境變數
-
啟動報錯:
- 暴力:找到佔用的埠號,並且找到對應的程序,殺死該程序
- netstat -ano
- 溫柔:修改自身的埠號
- conf/server.xml
- 一般會將tomcat的預設埠號修改為80。80埠號是http協議的預設埠號。
- 好處:在訪問時,就不用輸入埠號
- 暴力:找到佔用的埠號,並且找到對應的程序,殺死該程序
-
-
- 關閉:
- 正常關閉:
- bin/shutdown.bat
- ctrl+c
- 強制關閉:
- 點選啟動視窗的×
- 正常關閉:
- 配置:
-
部署專案的方式:
-
直接將專案放到webapps目錄下即可。
- /hello:專案的訪問路徑-->虛擬目錄
- 簡化部署:將專案打成一個war包,再將war包放置到webapps目錄下。
- war包會自動解壓縮
-
配置conf/server.xml檔案
在標籤體中配置 - docBase:專案存放的路徑
- path:虛擬目錄
-
在conf\Catalina\localhost建立任意名稱的xml檔案。在檔案中編寫
- 虛擬目錄:xml檔案的名稱
-
-
靜態專案和動態專案:
- 目錄結構
- java動態專案的目錄結構:
-- 專案的根目錄
-- WEB-INF目錄:
-- web.xml:web專案的核心配置檔案
-- classes目錄:放置位元組碼檔案的目錄
-- lib目錄:放置依賴的jar包
- java動態專案的目錄結構:
- 將Tomcat整合到IDEA中,並且建立JavaEE的專案,部署專案。
- 目錄結構
-
Servlet: server applet
-
概念:執行在伺服器端的小程式
- Servlet就是一個介面,定義了Java類被瀏覽器訪問到(tomcat識別)的規則。
- 將來我們自定義一個類,實現Servlet介面,複寫方法。
-
快速入門:
-
建立JavaEE專案
-
定義一個類,實現Servlet介面
- public class ServletDemo1 implements Servlet
-
實現介面中的抽象方法
-
配置Servlet
在web.xml中配置:demo1 cn.itcast.web.servlet.ServletDemo1 demo1 /demo1
-
-
執行原理:
- 當伺服器接受到客戶端瀏覽器的請求後,會解析請求URL路徑,獲取訪問的Servlet的資源路徑
- 查詢web.xml檔案,是否有對應的
標籤體內容。 - 如果有,則在找到對應的
全類名 - tomcat會將位元組碼檔案載入進記憶體,並且建立其物件
- 呼叫其方法
-
Servlet中的生命週期方法:
- 被建立:執行init方法,只執行一次
- Servlet什麼時候被建立?
- 預設情況下,第一次被訪問時,Servlet被建立
- 可以配置執行Servlet的建立時機。
- 在
標籤下配置 - 第一次被訪問時,建立
的值為負數
- 在伺服器啟動時,建立
的值為0或正整數
- 第一次被訪問時,建立
- 在
- Servlet什麼時候被建立?
- Servlet的init方法,只執行一次,說明一個Servlet在記憶體中只存在一個物件,Servlet是單例的
* 多個使用者同時訪問時,可能存線上程安全問題。
* 解決:儘量不要在Servlet中定義成員變數。即使定義了成員變數,也不要對修改值
- 提供服務:執行service方法,執行多次
- 每次訪問Servlet時,Service方法都會被呼叫一次。
- 被銷燬:執行destroy方法,只執行一次
- Servlet被銷燬時執行。伺服器關閉時,Servlet被銷燬
- 只有伺服器正常關閉時,才會執行destroy方法。
- destroy方法在Servlet被銷燬之前執行,一般用於釋放資源
- 被建立:執行init方法,只執行一次
-
Servlet3.0:
-
好處:
- 支援註解配置。可以不需要web.xml了。
-
步驟:
- 建立JavaEE專案,選擇Servlet的版本3.0以上,可以不建立web.xml
- 定義一個類,實現Servlet介面
- 複寫方法
- 在類上使用@WebServlet註解,進行配置
-
@WebServlet("資源路徑")
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface WebServlet {
String name() default "";//相當於String[] value() default {};//代表urlPatterns()屬性配置
String[] urlPatterns() default {};//相當於
int loadOnStartup() default -1;//相當於
WebInitParam[] initParams() default {};
boolean asyncSupported() default false;
String smallIcon() default "";
String largeIcon() default "";
String description() default "";
String displayName() default "";
}
-
-
IDEA與tomcat的相關配置
-
IDEA會為每一個tomcat部署的專案單獨建立一份配置檔案
- 檢視控制檯的log:Using CATALINA_BASE: "C:\Users\fqy.IntelliJIdea2018.1\system\tomcat_itcast"
-
工作空間專案 和 tomcat部署的web專案
- tomcat真正訪問的是“tomcat部署的web專案”,"tomcat部署的web專案"對應著"工作空間專案" 的web目錄下的所有資源
- WEB-INF目錄下的資源不能被瀏覽器直接訪問。
-
斷點除錯:使用"小蟲子"啟動 dubug 啟動