# 今日內(nèi)容
1. web相關(guān)概念回顧
2. web服務(wù)器軟件:Tomcat
3. Servlet入門學習
## web相關(guān)概念回顧
1. 軟件架構(gòu)
1. C/S:客戶端/服務(wù)器端
2. B/S:瀏覽器/服務(wù)器端
2. 資源分類
1. 靜態(tài)資源:所有用戶訪問后座慰,得到的結(jié)果都是一樣的谈宛,稱為靜態(tài)資源.靜態(tài)資源可以直接被瀏覽器解析
* 如: html,css,JavaScript
2. 動態(tài)資源:每個用戶訪問相同資源后譬猫,得到的結(jié)果可能不一樣糯彬。稱為動態(tài)資源棚愤。動態(tài)資源被訪問后,需要先轉(zhuǎn)換為靜態(tài)資源败玉,在返回給瀏覽器
* 如:servlet/jsp,php,asp....
3. 網(wǎng)絡(luò)通信三要素
1. IP:電子設(shè)備(計算機)在網(wǎng)絡(luò)中的唯一標識茄蚯。
2. 端口:應用程序在計算機中的唯一標識。 0~65536
3. 傳輸協(xié)議:規(guī)定了數(shù)據(jù)傳輸?shù)囊?guī)則
1. 基礎(chǔ)協(xié)議:
1. tcp:安全協(xié)議闻妓,三次握手菌羽。 速度稍慢
2. udp:不安全協(xié)議。 速度快
## web服務(wù)器軟件:
* 服務(wù)器:安裝了服務(wù)器軟件的計算機
* 服務(wù)器軟件:接收用戶的請求由缆,處理請求,做出響應
* web服務(wù)器軟件:接收用戶的請求,處理請求码邻,做出響應媳瞪。
* 在web服務(wù)器軟件中缸沃,可以部署web項目,讓用戶通過瀏覽器來訪問這些項目
* web容器
* 常見的java相關(guān)的web服務(wù)器軟件:
* webLogic:oracle公司,大型的JavaEE服務(wù)器,支持所有的JavaEE規(guī)范蚊逢,收費的。
* webSphere:IBM公司箫章,大型的JavaEE服務(wù)器烙荷,支持所有的JavaEE規(guī)范,收費的檬寂。
* JBOSS:JBOSS公司的终抽,大型的JavaEE服務(wù)器,支持所有的JavaEE規(guī)范焰薄,收費的。
* Tomcat:Apache基金組織扒袖,中小型的JavaEE服務(wù)器塞茅,僅僅支持少量的JavaEE規(guī)范servlet/jsp。開源的季率,免費的野瘦。
* JavaEE:Java語言在企業(yè)級開發(fā)中使用的技術(shù)規(guī)范的總和,一共規(guī)定了13項大的規(guī)范
* Tomcat:web服務(wù)器軟件
1. 下載:http://tomcat.apache.org/
2. 安裝:解壓壓縮包即可飒泻。
* 注意:安裝目錄建議不要有中文和空格
3. 卸載:刪除目錄就行了
4. 啟動:
* bin/startup.bat ,雙擊運行該文件即可
* 訪問:瀏覽器輸入:http://localhost:8080 回車訪問自己
? http://別人的ip:8080 訪問別人
* 可能遇到的問題:
1. 黑窗口一閃而過:
* 原因: 沒有正確配置JAVA_HOME環(huán)境變量
* 解決方案:正確配置JAVA_HOME環(huán)境變量
2. 啟動報錯:
1. 暴力:找到占用的端口號鞭光,并且找到對應的進程,殺死該進程
* netstat -ano
2. 溫柔:修改自身的端口號
* conf/server.xml
* <Connector port="8888" protocol="HTTP/1.1"
? ? ? ? ? ? ? connectionTimeout="20000"
? ? ? ? ? ? ? redirectPort="8445" />
* 一般會將tomcat的默認端口號修改為80泞遗。80端口號是http協(xié)議的默認端口號惰许。
* 好處:在訪問時,就不用輸入端口號
5. 關(guān)閉:
1. 正常關(guān)閉:
* bin/shutdown.bat
* ctrl+c
2. 強制關(guān)閉:
* 點擊啟動窗口的×
6. 配置:
* 部署項目的方式:
1. 直接將項目放到webapps目錄下即可史辙。
* /hello:項目的訪問路徑-->虛擬目錄
* 簡化部署:將項目打成一個war包汹买,再將war包放置到webapps目錄下。
* war包會自動解壓縮
2. 配置conf/server.xml文件
在<Host>標簽體中配置
<Context docBase="D:\hello" path="/hehe" />
* docBase:項目存放的路徑
* path:虛擬目錄
3. 在conf\Catalina\localhost創(chuàng)建任意名稱的xml文件聊倔。在文件中編寫
<Context docBase="D:\hello" />
* 虛擬目錄:xml文件的名稱
* 靜態(tài)項目和動態(tài)項目:
* 目錄結(jié)構(gòu)
* java動態(tài)項目的目錄結(jié)構(gòu):
-- 項目的根目錄
-- WEB-INF目錄:
-- web.xml:web項目的核心配置文件
-- classes目錄:放置字節(jié)碼文件的目錄
-- lib目錄:放置依賴的jar包
* 將Tomcat集成到IDEA中晦毙,并且創(chuàng)建JavaEE的項目,部署項目耙蔑。
## Servlet:? server applet
* 概念:運行在服務(wù)器端的小程序
* Servlet就是一個接口见妒,定義了Java類被瀏覽器訪問到(tomcat識別)的規(guī)則。
* 將來我們自定義一個類甸陌,實現(xiàn)Servlet接口须揣,復寫方法盐股。
* 快速入門:
1. 創(chuàng)建JavaEE項目
2. 定義一個類,實現(xiàn)Servlet接口
* public class ServletDemo1 implements Servlet
3. 實現(xiàn)接口中的抽象方法
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>
* 執(zhí)行原理:
1. 當服務(wù)器接受到客戶端瀏覽器的請求后返敬,會解析請求URL路徑遂庄,獲取訪問的Servlet的資源路徑
2. 查找web.xml文件,是否有對應的<url-pattern>標簽體內(nèi)容劲赠。
3. 如果有涛目,則在找到對應的<servlet-class>全類名
4. tomcat會將字節(jié)碼文件加載進內(nèi)存,并且創(chuàng)建其對象
5. 調(diào)用其方法
* Servlet中的生命周期方法:
1. 被創(chuàng)建:執(zhí)行init方法凛澎,只執(zhí)行一次
* Servlet什么時候被創(chuàng)建霹肝?
* 默認情況下,第一次被訪問時塑煎,Servlet被創(chuàng)建
* 可以配置執(zhí)行Servlet的創(chuàng)建時機沫换。
* 在<servlet>標簽下配置
1. 第一次被訪問時,創(chuàng)建
? ? ? ? ? ? ? ? * <load-on-startup>的值為負數(shù)
? ? ? ? ? ? 2. 在服務(wù)器啟動時最铁,創(chuàng)建
? ? ? ? ? ? ? ? * <load-on-startup>的值為0或正整數(shù)
* Servlet的init方法讯赏,只執(zhí)行一次,說明一個Servlet在內(nèi)存中只存在一個對象冷尉,Servlet是單例的
* 多個用戶同時訪問時漱挎,可能存在線程安全問題。
* 解決:盡量不要在Servlet中定義成員變量雀哨。即使定義了成員變量磕谅,也不要對修改值
2. 提供服務(wù):執(zhí)行service方法,執(zhí)行多次
* 每次訪問Servlet時雾棺,Service方法都會被調(diào)用一次膊夹。
3. 被銷毀:執(zhí)行destroy方法,只執(zhí)行一次
* Servlet被銷毀時執(zhí)行捌浩。服務(wù)器關(guān)閉時放刨,Servlet被銷毀
* 只有服務(wù)器正常關(guān)閉時,才會執(zhí)行destroy方法尸饺。
* destroy方法在Servlet被銷毀之前執(zhí)行宏榕,一般用于釋放資源
* Servlet3.0:
* 好處:
* 支持注解配置∏值瑁可以不需要web.xml了麻昼。
* 步驟:
1. 創(chuàng)建JavaEE項目,選擇Servlet的版本3.0以上馋辈,可以不創(chuàng)建web.xml
2. 定義一個類抚芦,實現(xiàn)Servlet接口
3. 復寫方法
4. 在類上使用@WebServlet注解,進行配置
* @WebServlet("資源路徑")
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface WebServlet {
? ? String name() default "";//相當于<Servlet-name>
? ? String[] value() default {};//代表urlPatterns()屬性配置
? ? String[] urlPatterns() default {};//相當于<url-pattern>
? ? int loadOnStartup() default -1;//相當于<load-on-startup>
? ? WebInitParam[] initParams() default {};
? ? boolean asyncSupported() default false;
? ? String smallIcon() default "";
? ? String largeIcon() default "";
? ? String description() default "";
? ? String displayName() default "";
}
## IDEA與tomcat的相關(guān)配置
1. IDEA會為每一個tomcat部署的項目單獨建立一份配置文件
* 查看控制臺的log:Using CATALINA_BASE:? "C:\Users\fqy\.IntelliJIdea2018.1\system\tomcat\_itcast"
2. 工作空間項目? ? 和? ? tomcat部署的web項目
* tomcat真正訪問的是“tomcat部署的web項目”,"tomcat部署的web項目"對應著"工作空間項目" 的web目錄下的所有資源
* WEB-INF目錄下的資源不能被瀏覽器直接訪問叉抡。
3. 斷點調(diào)試:使用"小蟲子"啟動 dubug 啟動