開始之前,先放一張百度腦圖:
文章目錄
web介紹
web相關概念回顧
-
軟件架構
C/S:客戶端端/服務器端
B/S 瀏覽器/服務器端(most)
(B/S架構零維護,開發快速) -
資源分類 靜態資源(所有用戶訪問到的結果一樣html,css,js) & 動態資源(每個用戶訪問相同資源,得到結果不一樣servlet jsp php asp)
- 瀏覽器裏面有靜態資源的解析引擎,可以直接解析訪問到的靜態資源
- 當動態資源被訪問時,需要先轉爲靜態資源 ,再返回給瀏覽器(重點)
- 請求與響應模型
-
網絡通信三要素
-
IP地址 : 省略
-
端口 :應用程序在計算機中的唯一標識(0~65536範圍)
-
傳輸協議:規定數據傳輸的規則
基礎協議:
- tcp協議:三次握手,速度稍慢
- udp協議:不安全的廣播協議,速度快
-
web服務器軟件
web服務器軟件:接收用戶的請求,處理請求,做出響應
- 在web服務器軟件中,可以部署web項目,讓用戶通過瀏覽器來訪問這些項目
- web容器
- 與java相關的web服務器軟件
- weblogic:oracle公司,大型的javaEE服務器,支持所有的javaEE規範,收費
- webSphere:IBM公司, 大型的,支持所有,收費
- Tomcat:Apache基金組織,中小型javaEE服務器,僅支持少量,開源的,免費的
- JavaEE:java語言在企業級開發中使用的技術規範的總和,一共規定了13項大的規範
Tomcat(web服務器軟件)
Tomcat簡介
-
下載:官網 8.5.31 core
-
安裝:解壓安裝壓縮包 注意,安裝目錄不要有中文和空格
-
卸載:刪除目錄即可
-
啓動:雙擊bin目錄下 startup.bat文件 Linux下是startup.sh文件
啓動後瀏覽器訪問http://121.0.0.1:8080(默認) or http://localhost:8080 即可訪問運行成功的tomcat
-
可能遇到的問題一:命令行窗口一閃而過 原因:未正確配置JAVA_HOME環境變量
-
啓動報錯:可以去logs文件去看報錯信息,根據報錯信息解決
一般會將tomcat的默認端口改爲80,80端口是http協議的默認端口
可以在conf文件夾中的server.xml中修改端口號。
-
-
關閉:
- 正常關閉:
- bin目錄下shutdown.bat
- ctrl + c
- 強制關閉:點擊窗口上面的關閉
後續的啓動和關閉大部分其實都是在IDE中執行。
- 正常關閉:
-
配置:
-
部署項目的方式
-
直接將項目文件放到webapps中
簡化部署:將項目打包成war包,再將war包放到webapps目錄下,war包會自動解壓縮
-
在conf文件夾中的server.xml配置
找到標籤,在其中添加如下代碼
< Context docBase=“filepath” path = “/name” />
docBase是指你項目文件在你電腦上路徑,path是指項目的訪問路徑,是虛擬路徑。
-
conf/server.xml是tomcat的核心配置文件,在裏面配置不安全
且修改後要重啓才生效
在 conf/catalina/localhost 目錄下創建一個任意名稱的xml文件
在文件中編寫
< Context docBase=“filepath” />
此時虛擬目錄是xml文件的名稱
-
-
靜態項目和動態項目
-
目錄結構
-
java動態項目的目錄結構
– 項目的根目錄
– WEB -INF 目錄
– web.xml :web的核心配置文件
– Classes目錄:放置字節碼文件的目錄
– lib目錄:放置依賴的jar包
-
-
-
Tomcat集成到IDEA,創建部署項目
關於這一部分網上有很多教程,建議使用IDEA或者eclipse。但現在似乎越來越多的轉向了IDEA。
此處我用到的tomcat版本是8.5.31,Java EE 7,javaEE對應servlet3.1版本。
成功創建後,我們可以看到項目的目錄同我們之前說過的tomcat目錄是一樣的。
servlet
概念及入門實踐
-
概念:運行在服務器端的小程序(server applet)
- servlet就是一個接口,定義了java類被瀏覽器訪問(tomcat識別)的規則
- 將來我們定義一個類,實現servlet接口,複寫方法
-
入門實踐
-
創建javaEE項目
-
定義一個類,實現Servlet接口
-
實現接口中的抽象方法
代碼:
import javax.servlet.*; import java.io.IOException; public class servletDemo1 implements Servlet { /*Servlet生命週期方法*/ //當Servlet第一次被創建對象時執行該方法,該方法在整個生命週期中只執行一次 public void init(ServletConfig arg0) throws ServletException { System.out.println("=======init========="); } //提供服務方法方法:對客戶端響應的方法,該方法會被執行多次,每次請求該servlet都會執行該方法 public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException { System.out.println("hello,servlet"); } //銷燬方法:當Servlet被被正常銷燬時執行該方法,只執行一次 public void destroy() { System.out.println("******destroy**********"); } /** *獲取ServletConfig對象 *ServletConfig就是servlet的配置對象 */ public ServletConfig getServletConfig() { return null; } /** *獲取Servlet的一些信息,版本,作者等 */ public String getServletInfo() { return null; } }
配置Servlet
-
-
執行原理:
- 當服務器接收到客戶端瀏覽器的請求後,會解析請求的URL路徑,獲取訪問的Servlet的資源路徑
- 查找 web.xml文件,是否有對應的<url - pattern> 標籤體內容
- 如果有,則在找到對應的<sevlet - class> 全類名
- tomcat會將字節碼文件加載進內存,並且創建其對象
- 調用其方法
-
幾個重要問題
-
servlet什麼時候被創建
-
默認情況下,第一次被訪問的時候,Servlet被創建
-
可以配置執行servlet的創建時機
-
-
Servlet的init方法,只執行一次,說明一個Servlet在內存中只存在一個對象,Servlet是單例的
當多個用戶同時訪問時,可能存在線程安全問題
解決:儘量不要在Servlet裏面定義成員變量,即使定義了成員變量,也不要對其修改
-
init方法一般用於加載資源,destroy方法一般用於釋放資源
-
-
Servlet3.0
-
優點:支持註解配置,可以不需要web.xml
-
步驟
-
創建javaEE項目,選擇servlet的版本3.0以上,可以不創建web.xml
-
定義一個類,實現servlet的接口
-
重寫方法
-
在類上使用@WebServlet註解,進行配置
一個servlet可以定義多個訪問路徑或多層路徑即@WebServlet(" .demo1", "/usr/", “/usr/demo3”)
-
-
servlet的體系結構
推薦第三種,繼承HttpServlet。
HTTP
-
概念:Hyper Text Transfer Protocol’
傳輸協議:定義了客戶端和服務器端通信時發送數據的格式
-
特點
- 基於TCP/IP協議
- HTTP的默認端口是80
- 基於請求/響應模型,即一次請求對應一次響應
- 無狀態的:每次請求之間相互獨立,不能夠交互數據
-
舉例
瀏覽器訪問www.baidu.com,到底向百度的服務器發送了幾次請求?
答:發送了多次請求,收到了多次響應。每張圖片,css文件,js文件都是一次單獨的請求。 可以按F12找到Network,裏面的每一項都是一次單獨的請求和響應。
-
歷史版本
- 1.0 每一次請求響應都會建立新的連接。(建立連接 -> 發送數據 -> 斷開 ->建立連接 -> 發送數據 -> 斷開)
- 1.1 (複用建立的連接) (建立連接 -> 發送數據 ->等待一會兒若還有數據發送,複用剛纔連接 - >等待一會兒沒有數據發送 -> 斷開)
請求消息數據格式
-
請求行
請求方式 請求url 請求協議/版本
Get url HTTP/1.1
- HTTP協議中有7鍾請求方式,常用的由2種
- GET:
- 請求參數在請求行中,在url後
- 請求的url長度有限制的
- 不太安全
- POST
- 請求的參數在請求中
- 請求的url長度沒有限制
- 相對安全
- GET:
- HTTP協議中有7鍾請求方式,常用的由2種
-
請求頭
請求頭名稱: 請求頭值(多個值用 , 分隔開)
常見的請求頭:
-
User-Agent:瀏覽器告訴服務器,我訪問你使用的瀏覽器版本
可以在服務器端獲取改頭的信息,解決瀏覽器的兼容問題
-
Aceept:告訴服務器,瀏覽器可以接受你給我響應的什麼樣的數據格式
-
Referer:https://www.baidu.com/
告訴服務器,當前請求從哪裏來
作用
1. 防盜鏈 2. 統計工作:方便統計比如一些流量的來源。
-
-
請求空行
空行,用於分割POST請求頭和請求體
-
請求體(正文) GET方式無請求體
封裝POST請求消息的請求參數的
以上信息可在瀏覽器的調試界面的Network看到
響應消息數據格式
與請求消息數據格式很類似。
-
響應行
組成:協議/版本 響應狀態碼 狀態碼描述
響應狀態碼是指服務器告訴客戶端本次請求和響應的一個狀態
響應狀態碼 Value 1xx 服務器接收客戶端消息,但爲接收完成,等待一段時間,發送1xx狀態碼 2xx 成功. 代表狀態碼:200 3xx 重定向。 代表狀態碼 :302(重定向) 304(訪問緩存) 4xx 客戶端錯誤 代表:404(請求路徑無對應資源) 405(請求方式無對應的doXXX方法) 5xx 服務器錯誤 代表:500(服務器內部出現異常) -
響應頭
組成:頭名稱:值
常見響應頭:
-
Content-Type: 服務器告訴客戶端本次響應體數據格式及編碼格式
Content-Type: text/html; charset=UTF-8
-
Content-Length: 666 表示字節的個數
-
Content-disposition:服務器告訴客戶端以什麼樣的格式打開響應體數據
默認值是:in-line 在當前頁面內打開
attachment:以附件形式打開響應體 (文件下載)
-
-
響應空行
-
響應體
真實的傳輸的數據
總結
記JAVA web 第一次學習。同時爲了跟上潮流,已經從eclipse轉爲IDEA。
有什麼問題歡迎大家在下方評論或者私信或者聯繫郵箱[email protected]