JavaWeb部分 (Tomcat Servlet)
寫在前面:分享技術,共同進步,有不足請見諒,相關意見可評論告知
程式設計路漫漫,學習無止盡!
目錄
前序
資源分類
--
1. 靜態資源:所有使用者訪問後,得到的結果都是一樣的,稱為靜態資源.靜態資源可以直接被瀏覽器解析, 如: html,css,JavaScript
-
2. 動態資源:每個使用者訪問相同資源後,得到的結果可能不一樣。稱為動態資源。動態資源被訪問後,需要先轉換為靜態資源,在返回給瀏覽器,如:servlet/jsp,php,asp...
.
3. 網路通訊三要素
1. IP:電子裝置(計算機)在網路中的唯一標識。
2. 埠:應用程式在計算機中的唯一標識。 0~65535
3. 傳輸協議:規定了資料傳輸的規則
基礎協議:
1. tcp:安全協議,三次握手。 速度稍慢
2. udp:不安全協議。 速度快
web伺服器軟體
- 伺服器軟體:接收使用者的請求,處理請求,做出響應
- web伺服器軟體:接收使用者的請求,處理請求,做出響應。
- 在web伺服器軟體中,可以部署web專案,讓使用者通過瀏覽器來訪問這些專案
- web容器
JavaEE:Java語言在企業級開發中使用的技術規範的總和,一共規定了13項大的規範
Tomcat
再敘
啟動:
bin/startup.bat ,雙擊執行該檔案即可
訪問:瀏覽器輸入:http://localhost:8080 回車訪問自己
http://別人的ip:8080
檢視IP的方法
、
1. 正常關閉:
bin/shutdown.bat || ctrl+c
2. 強制關閉:
點選啟動視窗的×
配置:
_
部署專案的方式:
方法一
直接將專案放到webapps目錄下即可。
/hello:專案的訪問路徑-->虛擬目錄 (常見)
簡化部署:將專案打成一個war包,再將war包放置到webapps目錄下。
war包會自動解壓縮
_
方法二 配置conf/server.xml檔案
在
<Context docBase="D:\hello" path="/hehe" />
* docBase:專案存放的路徑 * path:虛擬目錄
方法三: 在conf\Catalina\localhost建立任意名稱的xml檔案。在檔案中編寫
* 虛擬目錄:xml檔案的名稱,如果取消可以直接在 .xml後加_bak
靜態專案和動態專案:
_
目錄結構
java動態專案的目錄結構:
-- 專案的根目錄
-- WEB-INF目錄:
-- web.xml:web專案的核心配置檔案
-- classes目錄:放置位元組碼檔案的目錄
-- lib目錄:放置依賴的jar包
在IDEA中使用
在配置Tomcat web伺服器軟體時,注意啟用相應外掛(前提是已經旗艦版)
優化操作
-
IDEA會為每一個tomcat部署的專案單獨建立一份配置檔案
檢視控制檯的log:Using CATALINA_BASE: "C:\Users\Administrator.IntelliJIdea2019.3\system\tomcat_JavaIdeaWebCode"
-
工作空間專案 和 tomcat部署的web專案
- tomcat真正訪問的是“tomcat部署的web專案”,"tomcat部署的web專案"對應著"工作空間專案" 的web目錄下的所有資源
- WEB-INF目錄下的資源不能被瀏覽器直接訪問。
-
斷點除錯:使用"小蟲子"啟動 dubug 啟動
Servlet
概念:執行在伺服器端的小程式
* Servlet就是一個介面,定義了Java類被瀏覽器訪問到(tomcat識別)的規則。
* 將來我們自定義一個類,實現Servlet介面,複寫方法。
實現:
1. 建立JavaEE專案
2. 定義一個類,實現Servlet介面
public class ServletDemo1 implements Servlet
3. 實現介面中的抽象方法
4. 配置Servlet
在web.xml中配置:
<!--配置Servlet -->
<servlet>
<servlet-name>demo1</servlet-name>
<servlet-class>cn.itcast.web.servlet.ServletDemo1</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>demo1</servlet-name>
<url-pattern>/demo1</url-pattern>
</servlet-mapping>
執行原理:
1. 當伺服器接受到客戶端瀏覽器的請求後,會解析請求URL路徑,獲取訪問的Servlet的資源路徑
2. 查詢web.xml檔案,是否有對應的<url-pattern>標籤體內容。
3. 如果有,則在找到對應的<servlet-class>全類名
4. tomcat會將位元組碼檔案載入進記憶體,並且建立其物件
5. 呼叫其方法
Servlet中的生命週期方法:
Servlet建立時機:
預設情況下,第一次被訪問時,Servlet被建立
可以配置執行Servlet的建立時機。
在<servlet>標籤下配置
1. 第一次被訪問時,建立
<load-on-startup>的值為負數
2. 在伺服器啟動時,建立
<load-on-startup>的值為0或正整數
Servlet的init方法,只執行一次,說明一個Servlet在記憶體中只存在一個物件,Servlet是單例的
注意:多個使用者同時訪問時,可能存線上程安全問題。
解決:儘量不要在Servlet中定義成員變數。(定義區域性變數)即使定義了成員變數,也不要對修改值
——
提供服務執行service方法,執行多次
每次訪問Servlet時,Service方法都會被呼叫一次。
3. 被銷燬:執行destroy方法,只執行一次
Servlet被銷燬時執行。伺服器關閉時,Servlet被銷燬
只有伺服器正常關閉時,才會執行destroy方法。
destroy方法在Servlet被銷燬之前執行,一般用於釋放資源
Servlet3.0:
* 好處:
* 支援註解配置。可以不需要web.xml了。
* 步驟:
1. 建立JavaEE專案,選擇Servlet的版本3.0以上,可以不建立web.xml
2. 定義一個類,實現Servlet介面
3. 複寫方法
4. 在類上使用@WebServlet註解,進行配置
* @WebServlet("資源路徑")
http://localhost:8080/虛擬目錄/資源路徑
Servlet體系結構
Servlet -- 介面
|
GenericServlet -- 抽象類
|
HttpServlet -- 抽象類
——
GenericServlet:將Servlet介面中其他的方法做了預設空實現,只將service()方法作為抽象
將來定義Servlet類時,可以繼承GenericServlet,實現service()方法即可
——
HttpServlet::對http協議的一種封裝,簡化操作
1. 定義類繼承HttpServlet
2. 複寫doGet/doPost方法
Servlet相關配置
_
urlpartten:Servlet訪問路徑
一個Servlet可以定義多個訪問路徑 : @WebServlet({"/d4","/dd4","/ddd4"})
——
路徑定義規則:
1. /xxx:路徑匹配
2. /xxx/xxx:多層路徑,目錄結構
3. *.do:副檔名匹配