1. 程式人生 > 實用技巧 >JavaWeb - Tomcat、Servlet

JavaWeb - Tomcat、Servlet

1.Web相關概念回顧

  1.軟體架構

    1.C/S:客戶端/伺服器端

    2.B/S:瀏覽器/伺服器端

  2.資源分類

    1.靜態資源:所有使用者訪問後,得到的結果都是一樣的,稱為靜態資源。靜態資源可以直接被瀏覽器解析

      *如:html、css、Javascript

    2.動態資源:每個使用者訪問相同的資源後,得到的結果可能不一樣。稱為動態資源。動態資源被訪問後,需要先轉換為靜態資源,再返回給瀏覽器。(響應)

      *如:servelet/jsp,php,asp...

  3.網路通訊三要素

    1. IP:電子裝置(計算機)在網路中的唯一標識

    2. 埠:應用程式在計算機中的唯一標識。0 - 65536

    3. 傳輸協議:規定了資料傳輸的規則

      1.基礎協議:

        1.tcp:安全協議,三次握手。速度稍慢

        2.udp:不安全協議,速度快

2.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.下載:https://tomcat.apache.org/

    2.安裝:解壓壓縮包即可

      * 注意:安裝目錄不要有中文和空格

    3.解除安裝:刪除目錄

    4.啟動

      * bin/startup.bat,雙擊執行該檔案即可

      * 訪問:在瀏覽器輸入:http://localhost:8080 回車訪問 輸入別人的ip也可以訪問別人的tomcat

      *可能遇到的問題

        1.黑視窗一閃而過:

          * 原因: 沒有正確的配置JAVA_HOME環境變數

          * 解決: 正確配置環境變數

        2.啟動報錯

          1.暴力解決:找到佔用的埠號,並且找到對應的程序,殺死該程序

            * cmd視窗下輸入 : netstat -ano 查詢佔用8080埠號的程式 並關閉

          2.溫柔解決:修改自身的埠號

            * conf/server.xml

            * 一般會將tomcat的預設埠號修改為80。80埠號是http協議的預設埠號

              * 好處:在訪問時,就不用輸入埠號

              * <Connector port="80" protocol="HTTP/1.1"
             connectionTimeout="20000"
             redirectPort="8443" />

    5.關閉

      1.正常關閉:bin/shutdown.bat 或者 ctrl + C

      2.強制關閉:點選啟動視窗的X

    6.配置:

      *部署專案的方式:

        1.直接將專案放到webapps目錄下即可

          * /hello :專案的訪問路徑 - - > 虛擬目錄

          * 簡化部署:將專案打成一個war包,再將war包放置到webapps目錄下

            * war包會自動解壓縮

        2. 配置conf \ server.xml 檔案

          *在<host> 標籤體中配置

            <Context docBase="專案存放的絕對路徑" path="想起的虛擬目錄名稱" />

        3. 在conf \ Catalina \ localhost 建立任意名稱的xml檔案。在檔案中編寫(熱部署)

          <Context docBase="專案存放的絕對路徑" />

          * 虛擬目錄:xml的檔名稱

      *靜態專案和動態專案:

        目錄結構:

          * java動態專案的目錄結構:

            - - 專案的根目錄

              - - WEB - INF 目錄:

                - - web.xml :web專案的核心配置檔案

                - - classes目錄:放置位元組碼檔案的目錄

                - - lib目錄:放置依賴的jar包

      *將Tomcat整合到IDEA中,並且建立JavaEE專案,部署專案

        * run下 Edit Configuration 然後Tomcat Server部署

3. Servlet入門 server applet

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

    * Servlet 就是一個介面,定義了Java類被瀏覽器訪問到(被tomcat識別的)的規則

    * 將來我們自定義一個類,實現Servlet介面,複寫方法

  * 快速入門:

    1. 建立javaEE專案

      *記得勾選Web Application

    2. 在src下定義一個類,實現Servlet介面

    3. 實現介面中的抽象方法

    4. 配置Servlet

      在web.xml中配置

    <!-- 配置Servlet-->
    <servlet>
        <servlet-name>demo01</servlet-name>
        <servlet-class>web.servlet.ServletDemo01</servlet-class> //全類名標識檔案位置資訊 *tomcat通過反射將全類名對於的位元組碼檔案載入進記憶體 Class.forName();
    </servlet>

    <!-- 對映的網址-->    
    <servlet-mapping>
        <servlet-name>demo01</servlet-name>
        <url-pattern>/demo01</url-pattern>
    </servlet-mapping>

  Servlet執行原理:

文字版:

4.Servlet的生命週期和方法

  1. 被建立:執行init方法,只執行一次。說明Servlet在記憶體中只存在一個物件,Servlet是單例的。多個使用者同時訪問時,可能存線上程安全問題

    * Servlet什麼時候被建立?

      * 預設情況,第一次被訪問時,Servlet被建立

      * 可以配置執行Servlet的建立時機(在<Servlet標籤下配置>)

    *init方法,只執行一次。說明Servlet在記憶體中只存在一個物件,Servlet是單例的。多個使用者同時訪問時,可能存線上程安全問題

      解決:儘量不要在Servlet中定義成員變數。即使定義了成員變數,也不要對其修改值

    <servlet>
        <servlet-name>demo01</servlet-name>
        <servlet-class>web.servlet.ServletDemo01</servlet-class>
        <!--
            1.指定Servlet的建立時機
                1.第一次訪問時建立,
                    *<load-on-startup>的值為負數時
                2.在Tomcat伺服器啟動時建立,
                     *<load-on-startup>的值為0或正整數數時
        -->
        <load-on-startup>0</load-on-startup>
    </servlet>

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

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

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

    * Servlet被銷燬時執行。伺服器關閉時,Servlet被銷燬

    * 只有伺服器正常關閉時才會執行destroy方法

    * destroy方法在Servlet被銷燬之前執行,一般用於釋放資源

  4. Servlet3.0:

    * 好處:

      *支援註解配置。可以不需要web.xml了

    * 步驟:

      1. 建立JavaEE專案,選擇Servlet的版本3.0以上,可以不建立web.xml

      2. 定義一個類實現Servlet介面

      3. 複寫方法

      4. 在類上使用@WebServlet註解,進行配置

        * @webServlet("資源路徑") 既配置檔案中的urlPattern

5.IDEA與tomcat的相關配置

  1. IDEA會為每一個tomcat部署的專案單獨建立一份配置檔案

    * 檢視控制檯的log:Using CATALINA_BASE: "C:\Users\lenovo\.IntelliJIdea2017.3\system\tomcat\_java_html"

  2. 工作空間專案 和 tomcat部署的web專案

    * tomcat真正訪問的是“tomcat部署的web專案”,“tomcat部署的web專案”對應著“工作空間專案”的web目錄下的所有資源  

    * WEB-INF目錄下的資源不能被瀏覽器直接訪問

    * 斷點除錯:使用“小蟲子”debug啟動