1. 程式人生 > >Tomcat&Servlet【12】簡單入門

Tomcat&Servlet【12】簡單入門

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的專案,部署專案。

Servlet: server applet

概念:執行在伺服器端的小程式

    * Servlet就是一個介面,定義了Java類被瀏覽器訪問到(tomcat識別)的規則。
    * 將來我們自定義一個類,實現Servlet介面,複寫方法。

快速入門:

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的資源路徑
    2. 查詢web.xml檔案,是否有對應的<url-pattern>標籤體內容。
    3. 如果有,則在找到對應的<servlet-class>全類名
    4. tomcat會將位元組碼檔案載入進記憶體,並且建立其物件
    5. 呼叫其方法

Servlet中的生命週期方法:

1. 被建立:執行init方法,只執行一次

        * Servlet什麼時候被建立?
            * 預設情況下,第一次被訪問時,Servlet被建立
            * 可以配置執行Servlet的建立時機。
                * 在<servlet>標籤下配置
                    1. 第一次被訪問時,建立
                        * <load-on-startup>的值為負數
                    2. 在伺服器啟動時,建立
                        * <load-on-startup>的值為0或正整數


        * Servlet的init方法,只執行一次,說明一個Servlet在記憶體中只存在一個物件,Servlet是單例的
            * 多個使用者同時訪問時,可能存線上程安全問題。
            * 解決:儘量不要在Servlet中定義成員變數。即使定義了成員變數,也不要對修改值

2. 提供服務:執行service方法,執行多次

        * 每次訪問Servlet時,Service方法都會被呼叫一次。

3. 被銷燬:執行destroy方法,只執行一次

        * Servlet被銷燬時執行。伺服器關閉時,Servlet被銷燬
        * 只有伺服器正常關閉時,才會執行destroy方法。
        * destroy方法在Servlet被銷燬之前執行,一般用於釋放資源

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 "";
            }

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 啟動