今日內容
- web相關概念回顧
- web服務器軟件:Tomcat
- Servlet入門學習
1 web相關概念回顧
1.1 軟件架構
- C/S:客戶端/服務器端
- B/S:瀏覽器/服務器端
1.2 資源分類
- 靜態資源:所有用戶訪問後,得到的結果都是一樣的,稱爲靜態資源。靜態資源可以直接被瀏覽器解析
如:html,css,JavaScript
- 動態資源:每個用戶訪問相同資源後,得到的結果可能不一樣。稱爲動態資源。動態資源被訪問後,需要先轉換爲靜態資源,再返回給瀏覽器
如:servlet/jsp,php,asp…
1.3 網絡通信三要素
- IP:電子設備(計算機)在網絡中唯一標識
- 端口:應用程序在計算機中的唯一標識。0~65536
- 傳輸協議:規定了數據傳輸的規則
- 基礎協議:
- tcp:安全協議,三次握手,速度稍慢
- udp:不安全協議。速度快
2 web服務器軟件:
- 服務器:安裝了服務器軟件的計算機
- 服務器軟件:接受用戶的請求,處理請求,做出響應
- web服務器軟件:接受用戶的請求,處理請求,做出響應
- 在web服務器軟件中,可以部署web項目,讓用戶通過瀏覽器來訪問這些項目
- web容器
2.1 常見的java相關的web服務器軟件
- webLogic:oracle公司,大型的JavaEE服務器,支持所有的JavaEE規範,收費的。
- webSphere:IBM公司,大型的JavaEE服務器,支持所有的JavaEE規範,收費的。
- JBOSS:JBOSS公司的,大型的JavaEE服務器,支持所有的JavaEE規範,收費的。
- Tomcat:Apache基金組織,中小型的JavaEE服務器,僅僅支持少量的JavaEE規範servlet/jsp。開源的,免費的。
JavaEE:Java語言在企業級開發中使用的技術規範的總和,一共規定了13項大的規範
2.2 Tomcat:web服務器軟件
- 下載:http://tomcat.apache.org/
- 安裝:解壓壓縮包即可。
* 注意:安裝目錄建議不要有中文和空格
- 卸載:刪除目錄就行了
- 啓動:
- bin/startup.bat。雙擊運行該文件
- 訪問:瀏覽器輸入:http://localhost:8080回車訪問自己
http://別人ip:8080 訪問別人
- 可能遇到的問題:
- 黑窗口一閃而過:
- 原因: 沒有正確配置JAVA_HOME環境變量
- 解決方案:正確配置JAVA_HOME環境變量
- 啓動報錯:
- 暴力:找到佔用的端口號,並且找到對應的進程,殺死該進程
netstat -ano
- 溫柔:修改自身的端口號
- conf/server.xml
<Connector port="8888" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8445" />
一般會將tomcat的默認端口號改爲80,80端口是http協議的默認端口號
- 好處:在訪問是,就不用輸入端口號
- 關閉:
- 正常關閉
- 強制關閉:
點擊啓動窗口x
- 配置:
- 部署項目的方式:
- 直接將項目放到webapps目錄下即可
- /hello:項目的訪問路徑–>虛擬目錄
- 簡化部署:將項目打成一個war包,再將war包放置到webapps目錄下。
war包會自動解壓縮
- 配置conf/server.xml文件
在<Host>
標籤體中配置
<Context docBase="D:\hello" path="/hehe" />
docBase:項目存放的路徑
path:虛擬目錄
- 在conf\Catalina\localhost創建任意名稱的xml文件,在文件中編寫
<Context docBase="D:\hello" />
虛擬目錄:xml文件名稱
- 靜態項目和動態項目:
Java動態項目的目錄結構:
項目根目錄>WEB-INF目錄>
–web.xml:web項目的核心配置文件
–classes目錄:放置字節碼文件的目錄
–lib目錄:放置依賴的jar包
- 將Tomcat集成到IDEA中,並且創建JAVAEE的項目,部署項目
3 Servlet:server applet
3.1 概念:運行在服務器端的小程序
- Servlet就是一個接口,定義了Java類被瀏覽器訪問到(tomcat識別)的規則
- 將來我們定義一個類,實現Servlet接口,複寫方法。
3.2 快速入門
- 創建JavaEE項目
- 定義一個類,實現Servlet接口
public class ServletDemo implements Servlet
- 實現接口中的抽象方法
- 配置Servlet
在web.xml配置
<servlet>
<servlet-name>demo1</servlet-name>
<servlet-class> .ServlstDemo1</servlet-class>
</servlet>
<servlet-maping>
<servlet-name>demo1</servlet-name>
<url-pattern>/demo1</url-pattern>
</servlet-mapping>
3.3 執行原理:
- 當服務器接收到客戶端瀏覽器請求後,會解析請求URL路徑,獲取訪問的Servlet的資源路徑
- 查找web.xml文件,是否有對應的
<url-pattern>
標籤體內容
- 如果有,則在找到對應的
<servlet-class>
全類名
- tomcat會將字節碼文件加載進內存,並且創建其對象
- 調用其方法
3.4 Servle中的生命週期方法:
- 被創建:執行init方法,只執行一次
- Servlet什麼時候被創建?
- 默認情況下,第一次被訪問時,Servlet被創建
- 可以配置執行Servlet的創建時機。
在<servlet>
標籤下配置
- 第一次被訪問時,創建
<load-on-startup>
的值爲負數
- 在服務器啓動時,創建
<load-on-startup>
的值爲0或正整數
- Servlet的init方法,只執行一次,說明一個Servlet在內存中只存在一個對象,Servlet是單例的
- 多個用戶同時訪問,可能存在線程安全問題
- 解決:儘量不要在Servlet中定義成員變量。即使定義了成員變量,也不要修改值
- 提供服務:執行Servlet方法,執行多次
每次訪問Servlet時,Servlet方法都會被調用一次。
- 被銷燬:執行dsetroy方法,只執行一次
- Servlet被銷燬時執行。服務器關閉時,Servlet被銷燬
- 只有服務器正常關閉,纔會執行destory方法
- destory方法在Servlet被銷燬之前執行,一般用於釋放資源
3.5 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 {};
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 "";
}
4 IDEA與tomcat的相關配置
4.1 IDEA會爲每一個tomcat部署的項目單獨建立一份配置文件
- 查看控制檯的log:Using CATALINA_BASE: “C:\Users\fqy.IntelliJIdea2018.1\system\tomcat_itcast”
4.2 工作空間項目 和 tomcat部署的web項目
- tomcat真正訪問的是“tomcat部署的web項目”,“tomcat部署的web項目"對應着"工作空間項目” 的web目錄下的所有資源
- WEB-INF目錄下的資源不能被瀏覽器直接訪問。
4.3 斷點調試:使用"小蟲子"啓動 dubug 啓動