三、Tomcat與Servlet 今日內容

今日內容

1. web相關概念回顧
2. web服務器軟件:Tomcat
3. Servlet入門學習

一、web相關概念回顧

1. 軟件架構
    1. C/S:客戶端/服務器端
    2. B/S:瀏覽器/服務器端

2. 資源分類
    1. 靜態資源:所有用戶訪問後,得到的結果都是一樣的,稱爲靜態資源.靜態資源可以直接被瀏覽器解析
        * 如: html,css,JavaScript
    2. 動態資源:每個用戶訪問相同資源後,得到的結果可能不一樣。稱爲動態資源。動態資源被訪問後,需要先轉換爲靜態資源,在返回給瀏覽器
        * 如:servlet/jsp,php,asp....


3. 網絡通信三要素
    1. IP:電子設備(計算機)在網絡中的唯一標識。
    2. 端口:應用程序在計算機中的唯一標識。 0~65536
    3. 傳輸協議:規定了數據傳輸的規則
        1. 基礎協議:
            1. tcp:安全協議,三次握手。 速度稍慢
            2. udp:不安全協議。 速度快

二、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. 下載:http://tomcat.apache.org/
    2. 安裝:解壓壓縮包即可。
        * 注意:安裝目錄建議不要有中文和空格
    3. 卸載:刪除目錄就行了
    4. 啓動:
        * bin/startup.bat ,雙擊運行該文件即可
        * 訪問:瀏覽器輸入:http://localhost:8080 回車訪問自己
                          http://別人的ip:8080 訪問別人
        
        * 可能遇到的問題:
            1. 黑窗口一閃而過:
                * 原因: 沒有正確配置JAVA_HOME環境變量
                * 解決方案:正確配置JAVA_HOME環境變量

            2. 啓動報錯:
                1. 暴力:找到佔用的端口號,並且找到對應的進程,殺死該進程
                    * netstat -ano
                2. 溫柔:修改自身的端口號
                    * conf/server.xml
                    * <Connector port="8888" protocol="HTTP/1.1"
                       connectionTimeout="20000"
                       redirectPort="8445" />
                    * 一般會將tomcat的默認端口號修改爲80。80端口號是http協議的默認端口號。
                        * 好處:在訪問時,就不用輸入端口號
    5. 關閉:
        1. 正常關閉:
            * bin/shutdown.bat
            * ctrl+c
        2. 強制關閉:
            * 點擊啓動窗口的×
    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創建任意名稱的xml文件。在文件中編寫
                <Context docBase="D:\hello" />
                * 虛擬目錄:xml文件的名稱
        
        * 靜態項目和動態項目:
            * 目錄結構
                * java動態項目的目錄結構:
                    -- 項目的根目錄
                        -- WEB-INF目錄:
                            -- web.xml:web項目的核心配置文件
                            -- classes目錄:放置字節碼文件的目錄
                            -- lib目錄:放置依賴的jar包


        * 將Tomcat集成到IDEA中,並且創建JavaEE的項目,部署項目。
  1. 將Tomcat集成到IDEA中:IDEA → 工具欄run → Edit Configurations → Templates → Tomcat Server → Local → 配置本地的Tomcat
  2. 創建javaEE項目:File → new Module → javaEE enterprise → JavaEE Version7 → 勾選webapplication →下一步,項目名稱→ 完成
  3. 啓動部署項目:第一步操作默認項目已經部署到Tomcat中
    點擊三角圖標啓動項目,Tomcat啓動後自動啓動index.jsp
  4. 修改爲熱啓動
    IDEA → 工具欄run → Edit Configurations →server → on'updata action'爲updata resource
    on frame deactivation爲updata resource
  5. 修改虛擬路徑
    IDEA → 工具欄run → Edit Configurations → Development → application context
    /爲根目錄

三、Servlet: server applet

  1. 概念:運行在服務器端的小程序
    ①Servlet就是一個接口,定義了Java類被瀏覽器訪問到(tomcat識別)的規則。
    ②將來我們自定義一個類,實現Servlet接口,複寫方法。
  2. 快速入門
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的資源路徑
    ②查找web.xml文件,是否有對應的<url-pattern>標籤體內容。
    ③如果有,則在找到對應的<servlet-class>全類名
    ④tomcat會將字節碼文件加載進內存,並且創建其對象
    ⑤調用其方法

  2. Servlet中的生命週期方法:
    ① 被創建:執行init方法,只執行一次
    Servlet什麼時候被創建?
    默認情況下,第一次被訪問時,Servlet被創建
    可以配置執行Servlet的創建時機。
    在<servlet>標籤下配置
    第一次被訪問時,創建<load-on-startup>的值爲負數
    在服務器啓動時,創建<load-on-startup>的值爲0或正整數

    注意:Servlet的init方法,只執行一次,說明一個Servlet在內存中只存在一個對象,Servlet是單例的。多個用戶同時訪問時,可能存在線程安全問題。
    解決:儘量不要在Servlet中定義成員變量。即使定義了成員變量,也不要對修改值
    ②提供服務:執行service方法,執行多次
    每次訪問Servlet時,Service方法都會被調用一次。
    ③被銷燬:執行destroy方法,只執行一次
    Servlet被銷燬時執行。服務器關閉時,Servlet被銷燬
    只有服務器正常關閉時,纔會執行destroy方法。
    destroy方法在Servlet被銷燬之前執行,一般用於釋放資源

  3. Servlet3.0:
    ①好處:支持註解配置。可以不需要web.xml了。
    ②步驟:

    1. 創建JavaEE項目,選擇Servlet的版本3.0以上,可以不創建web.xml
    2. 定義一個類,實現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 "";
    }
    

遇到的問題:

  1. 版本不匹配
    java.lang.UnsupportedClassVersionError: cn/itcast/web/servlet/ServletDemo has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0 (無法載入的.類 [cn.itcast.web.servlet.ServletDemo])
    
    解決: 不支持版本,IDEA → file → project structure → module SDK改爲1.8(原來11,太高了)
  2. 修改虛擬路徑
    IDEA → run → Edit Configurations → development → 修改虛擬路徑

四、IDEA與tomcat的相關配置

  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. 斷點調試:使用"小蟲子"啓動 dubug 啓動
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章