JavaWeb - Tomcat、Servlet
阿新 • • 發佈:2020-07-14
1.Web相關概念回顧
1.軟體架構
1.C/S:客戶端/伺服器端
2.B/S:瀏覽器/伺服器端
2.資源分類
1.靜態資源:所有使用者訪問後,得到的結果都是一樣的,稱為靜態資源。靜態資源可以直接被瀏覽器解析
*如:html、css、Javascript
2.動態資源:每個使用者訪問相同的資源後,得到的結果可能不一樣。稱為動態資源。動態資源被訪問後,需要先轉換為靜態資源,再返回給瀏覽器。(響應)
*如:servelet/jsp,php,asp...
3.網路通訊三要素
1. IP:電子裝置(計算機)在網路中的唯一標識
2. 埠:應用程式在計算機中的唯一標識。0 - 65536
3. 傳輸協議:規定了資料傳輸的規則
1.基礎協議:
1.tcp:安全協議,三次握手。速度稍慢
2.udp:不安全協議,速度快
2.web伺服器
* 伺服器:安裝了伺服器軟體的計算機
* 伺服器軟體:接收使用者的請求、處理請求、作出響應
* 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伺服器軟體
1.下載:https://tomcat.apache.org/
2.安裝:解壓壓縮包即可
* 注意:安裝目錄不要有中文和空格
3.解除安裝:刪除目錄
4.啟動
* bin/startup.bat,雙擊執行該檔案即可
* 訪問:在瀏覽器輸入:http://localhost:8080 回車訪問 輸入別人的ip也可以訪問別人的tomcat
*可能遇到的問題
1.黑視窗一閃而過:
* 原因: 沒有正確的配置JAVA_HOME環境變數
* 解決: 正確配置環境變數
2.啟動報錯
1.暴力解決:找到佔用的埠號,並且找到對應的程序,殺死該程序
* cmd視窗下輸入 : netstat -ano 查詢佔用8080埠號的程式 並關閉
2.溫柔解決:修改自身的埠號
* conf/server.xml
* 一般會將tomcat的預設埠號修改為80。80埠號是http協議的預設埠號
* 好處:在訪問時,就不用輸入埠號
* <Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
5.關閉
1.正常關閉:bin/shutdown.bat 或者 ctrl + C
2.強制關閉:點選啟動視窗的X
6.配置:
*部署專案的方式:
1.直接將專案放到webapps目錄下即可
* /hello :專案的訪問路徑 - - > 虛擬目錄
* 簡化部署:將專案打成一個war包,再將war包放置到webapps目錄下
* war包會自動解壓縮
2. 配置conf \ server.xml 檔案
*在<host> 標籤體中配置
<Context docBase="專案存放的絕對路徑" path="想起的虛擬目錄名稱" />
3. 在conf \ Catalina \ localhost 建立任意名稱的xml檔案。在檔案中編寫(熱部署)
<Context docBase="專案存放的絕對路徑" />
* 虛擬目錄:xml的檔名稱
*靜態專案和動態專案:
目錄結構:
* java動態專案的目錄結構:
- - 專案的根目錄
- - WEB - INF 目錄:
- - web.xml :web專案的核心配置檔案
- - classes目錄:放置位元組碼檔案的目錄
- - lib目錄:放置依賴的jar包
*將Tomcat整合到IDEA中,並且建立JavaEE專案,部署專案
* run下 Edit Configuration 然後Tomcat Server部署
3. Servlet入門 server applet
* 概念:執行在伺服器端的小程式
* Servlet 就是一個介面,定義了Java類被瀏覽器訪問到(被tomcat識別的)的規則
* 將來我們自定義一個類,實現Servlet介面,複寫方法
* 快速入門:
1. 建立javaEE專案
*記得勾選Web Application
2. 在src下定義一個類,實現Servlet介面
3. 實現介面中的抽象方法
4. 配置Servlet
在web.xml中配置
<!-- 配置Servlet--> <servlet> <servlet-name>demo01</servlet-name> <servlet-class>web.servlet.ServletDemo01</servlet-class> //全類名標識檔案位置資訊 *tomcat通過反射將全類名對於的位元組碼檔案載入進記憶體 Class.forName(); </servlet> <!-- 對映的網址--> <servlet-mapping> <servlet-name>demo01</servlet-name> <url-pattern>/demo01</url-pattern> </servlet-mapping>
Servlet執行原理:
文字版:
4.Servlet的生命週期和方法
1. 被建立:執行init方法,只執行一次。說明Servlet在記憶體中只存在一個物件,Servlet是單例的。多個使用者同時訪問時,可能存線上程安全問題
* Servlet什麼時候被建立?
* 預設情況,第一次被訪問時,Servlet被建立
* 可以配置執行Servlet的建立時機(在<Servlet標籤下配置>)
*init方法,只執行一次。說明Servlet在記憶體中只存在一個物件,Servlet是單例的。多個使用者同時訪問時,可能存線上程安全問題
解決:儘量不要在Servlet中定義成員變數。即使定義了成員變數,也不要對其修改值
<servlet> <servlet-name>demo01</servlet-name> <servlet-class>web.servlet.ServletDemo01</servlet-class> <!-- 1.指定Servlet的建立時機 1.第一次訪問時建立, *<load-on-startup>的值為負數時 2.在Tomcat伺服器啟動時建立, *<load-on-startup>的值為0或正整數數時 --> <load-on-startup>0</load-on-startup> </servlet>
2. 提供服務:執行service方法,執行多次
* 每次訪問Servlet時,service方法都會被呼叫一次
3. 被銷燬:執行destroy方法,只執行一次
* Servlet被銷燬時執行。伺服器關閉時,Servlet被銷燬
* 只有伺服器正常關閉時才會執行destroy方法
* destroy方法在Servlet被銷燬之前執行,一般用於釋放資源
4. Servlet3.0:
* 好處:
*支援註解配置。可以不需要web.xml了
* 步驟:
1. 建立JavaEE專案,選擇Servlet的版本3.0以上,可以不建立web.xml
2. 定義一個類實現Servlet介面
3. 複寫方法
4. 在類上使用@WebServlet註解,進行配置
* @webServlet("資源路徑") 既配置檔案中的urlPattern
5.IDEA與tomcat的相關配置
1. IDEA會為每一個tomcat部署的專案單獨建立一份配置檔案