Tomcat & Servlet

今日內(nèi)容

1. web相關(guān)概念回顧
2. web服務(wù)器軟件:Tomcat
3. Servlet入門學(xué)習(xí)

web相關(guān)概念回顧

1. 軟件架構(gòu)
    1. C/S:客戶端/服務(wù)器端
    2. B/S:瀏覽器/服務(wù)器端

2. 資源分類
    1. 靜態(tài)資源:所有用戶訪問(wèn)后,得到的結(jié)果都是一樣的,稱為靜態(tài)資源.靜態(tài)資源可以直接被瀏覽器解析
        * 如: html,css,JavaScript
    2. 動(dòng)態(tài)資源:每個(gè)用戶訪問(wèn)相同資源后,得到的結(jié)果可能不一樣。稱為動(dòng)態(tài)資源。動(dòng)態(tài)資源被訪問(wèn)后,需要先轉(zhuǎn)換為靜態(tài)資源,在返回給瀏覽器
        * 如:servlet/jsp,php,asp....


3. 網(wǎng)絡(luò)通信三要素
    1. IP:電子設(shè)備(計(jì)算機(jī))在網(wǎng)絡(luò)中的唯一標(biāo)識(shí)。
    2. 端口:應(yīng)用程序在計(jì)算機(jī)中的唯一標(biāo)識(shí)。 0~65536
    3. 傳輸協(xié)議:規(guī)定了數(shù)據(jù)傳輸?shù)囊?guī)則
        1. 基礎(chǔ)協(xié)議:
            1. tcp:安全協(xié)議,三次握手。 速度稍慢
            2. udp:不安全協(xié)議。 速度快

web服務(wù)器軟件:

  • 服務(wù)器:安裝了服務(wù)器軟件的計(jì)算機(jī)
    • 服務(wù)器軟件:接收用戶的請(qǐng)求,處理請(qǐng)求,做出響應(yīng)
    • web服務(wù)器軟件:接收用戶的請(qǐng)求,處理請(qǐng)求,做出響應(yīng)。
      • 在web服務(wù)器軟件中,可以部署web項(xiàng)目,讓用戶通過(guò)瀏覽器來(lái)訪問(wèn)這些項(xiàng)目
      • web容器
  • 常見(jiàn)的java相關(guān)的web服務(wù)器軟件:
    * webLogic:oracle公司,大型的JavaEE服務(wù)器,支持所有的JavaEE規(guī)范,收費(fèi)的。
    * webSphere:IBM公司,大型的JavaEE服務(wù)器,支持所有的JavaEE規(guī)范,收費(fèi)的。
    * JBOSS:JBOSS公司的,大型的JavaEE服務(wù)器,支持所有的JavaEE規(guī)范,收費(fèi)的。
    * Tomcat:Apache基金組織,中小型的JavaEE服務(wù)器,僅僅支持少量的JavaEE規(guī)范servlet/jsp。開(kāi)源的,免費(fèi)的。
  • JavaEE:Java語(yǔ)言在企業(yè)級(jí)開(kāi)發(fā)中使用的技術(shù)規(guī)范的總和,一共規(guī)定了13項(xiàng)大的規(guī)范

  • Tomcat:web服務(wù)器軟件

    1. 下載:http://tomcat.apache.org/
    2. 安裝:解壓壓縮包即可。
      • 注意:安裝目錄建議不要有中文和空格
    3. 卸載:刪除目錄就行了
    4. 啟動(dòng):
      • bin/startup.bat ,雙擊運(yùn)行該文件即可

      • 訪問(wèn):瀏覽器輸入:http://localhost:8080 回車訪問(wèn)自己
        http://別人的ip:8080 訪問(wèn)別人

      • 可能遇到的問(wèn)題:
        1. 黑窗口一閃而過(guò):

        • 原因: 沒(méi)有正確配置JAVA_HOME環(huán)境變量
        • 解決方案:正確配置JAVA_HOME環(huán)境變量
        1. 啟動(dòng)報(bào)錯(cuò):
          • 暴力:找到占用的端口號(hào),并且找到對(duì)應(yīng)的進(jìn)程,殺死該進(jìn)程——netstat -ano
          • 溫柔:修改自身的端口號(hào)

conf/server.xml
<Connector port="8888" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8445" />

  • 一般會(huì)將tomcat的默認(rèn)端口號(hào)修改為80。80端口號(hào)是http協(xié)議的默認(rèn)端口號(hào)。
  • 好處:在訪問(wèn)時(shí),就不用輸入端口號(hào)
  1. 關(guān)閉:
    1. 正常關(guān)閉:
      • bin/shutdown.bat
      • ctrl+c
    2. 強(qiáng)制關(guān)閉:
    • 點(diǎn)擊啟動(dòng)窗口的×
  2. 配置:
    • 部署項(xiàng)目的方式:

      1. 直接將項(xiàng)目放到webapps目錄下即可。

        • /hello:項(xiàng)目的訪問(wèn)路徑-->虛擬目錄
        • 簡(jiǎn)化部署:將項(xiàng)目打成一個(gè)war包,再將war包放置到webapps目錄下。
        • war包會(huì)自動(dòng)解壓縮
      2. 配置conf/server.xml文件

        • 在<Host>標(biāo)簽體中配置
          <Context docBase="D:\hello" path="/hehe" />
        • docBase:項(xiàng)目存放的路徑
        • path:虛擬目錄
      3. 在conf\Catalina\localhost創(chuàng)建任意名稱的xml文件。在文件中編寫(xiě)
        <Context docBase="D:\hello" />

        • 虛擬目錄:xml文件的名稱

        • 靜態(tài)項(xiàng)目和動(dòng)態(tài)項(xiàng)目:

          • 目錄結(jié)構(gòu)
            • java動(dòng)態(tài)項(xiàng)目的目錄結(jié)構(gòu):
              -- 項(xiàng)目的根目錄
              -- WEB-INF目錄:
              -- web.xml:web項(xiàng)目的核心配置文件
              -- classes目錄:放置字節(jié)碼文件的目錄
              -- lib目錄:放置依賴的jar包
      • 將Tomcat集成到IDEA中,并且創(chuàng)建JavaEE的項(xiàng)目,部署項(xiàng)目。

Servlet: server applet

  • 概念:運(yùn)行在服務(wù)器端的小程序
    • Servlet就是一個(gè)接口,定義了Java類被瀏覽器訪問(wèn)到(tomcat識(shí)別)的規(guī)則。
    • 將來(lái)我們自定義一個(gè)類,實(shí)現(xiàn)Servlet接口,復(fù)寫(xiě)方法。

快速入門:

  1. 創(chuàng)建JavaEE項(xiàng)目

  2. 定義一個(gè)類,實(shí)現(xiàn)Servlet接口

    • public class ServletDemo1 implements Servlet
  3. 實(shí)現(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. 當(dāng)服務(wù)器接受到客戶端瀏覽器的請(qǐng)求后,會(huì)解析請(qǐng)求URL路徑,獲取訪問(wèn)的Servlet的資源路徑
  2. 查找web.xml文件,是否有對(duì)應(yīng)的<url-pattern>標(biāo)簽體內(nèi)容。
  3. 如果有,則在找到對(duì)應(yīng)的<servlet-class>全類名
  4. tomcat會(huì)將字節(jié)碼文件加載進(jìn)內(nèi)存,并且創(chuàng)建其對(duì)象
  5. 調(diào)用其方法

Servlet中的生命周期方法:

  1. 被創(chuàng)建:執(zhí)行init方法,只執(zhí)行一次

    • Servlet什么時(shí)候被創(chuàng)建?

      默認(rèn)情況下,第一次被訪問(wèn)時(shí),Servlet被創(chuàng)建

    • 可以配置執(zhí)行Servlet的創(chuàng)建時(shí)機(jī)。

    <u>在<servlet>標(biāo)簽下配置</u>

    • 第一次被訪問(wèn)時(shí),創(chuàng)建

      <load-on-startup>的值為負(fù)數(shù)

    • 在服務(wù)器啟動(dòng)時(shí),創(chuàng)建

      <load-on-startup>的值為0或正整數(shù)

    • Servlet的init方法,只執(zhí)行一次,說(shuō)明<u>一個(gè)Servlet在內(nèi)存中只存在一個(gè)對(duì)象</u>,<u>Servlet是單例的</u>

      多個(gè)用戶同時(shí)訪問(wèn)時(shí),可能存在線程安全問(wèn)題。

      解決:盡量不要在Servlet中定義成員變量。即使定義了成員變量,也不要對(duì)修改值

  2. 提供服務(wù):執(zhí)行service方法,執(zhí)行多次
    * 每次訪問(wèn)Servlet時(shí),Service方法都會(huì)被調(diào)用一次。

  3. 被銷毀:執(zhí)行destroy方法,只執(zhí)行一次

  • Servlet被銷毀時(shí)執(zhí)行。服務(wù)器關(guān)閉時(shí),Servlet被銷毀

  • 只有服務(wù)器正常關(guān)閉時(shí),才會(huì)執(zhí)行destroy方法。

  • destroy方法在Servlet被銷毀之前執(zhí)行,一般用于釋放資源

  • Servlet3.0:

    • 好處:

? 支持注解配置??梢圆恍枰獁eb.xml了。
?
? * 步驟:
? 1. 創(chuàng)建JavaEE項(xiàng)目,選擇Servlet的版本3.0以上,可以不創(chuàng)建web.xml
? 2. 定義一個(gè)類,實(shí)現(xiàn)Servlet接口
? 3. 復(fù)寫(xiě)方法
? 4. <u>在類上使用@WebServlet注解,進(jìn)行配置</u>

            @WebServlet("資源路徑") // 例如:@WebServlet(urlPatterns="/demo")【可以只寫(xiě)路徑】
            @Target({ElementType.TYPE})
            @Retention(RetentionPolicy.RUNTIME)
            @Documented
            public @interface WebServlet {
                String name() default "";//相當(dāng)于<Servlet-name>
            
                String[] value() default {};//代表urlPatterns()屬性配置
            
                String[] urlPatterns() default {};//相當(dāng)于<url-pattern>
            
                int loadOnStartup() default -1;//相當(dāng)于<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會(huì)為每一個(gè)tomcat部署的項(xiàng)目單獨(dú)建立一份配置文件
  • 查看控制臺(tái)的log:

    Using CATALINA_BASE:   "C:\Users\fqy\.IntelliJIdea2018.1\system\tomcat\_itcast"
    
  1. 工作空間項(xiàng)目 和 tomcat部署的web項(xiàng)目
    • tomcat真正訪問(wèn)的是“tomcat部署的web項(xiàng)目”,"tomcat部署的web項(xiàng)目"對(duì)應(yīng)著 "工作空間項(xiàng)目" 的web目錄下的所有資源。
    • WEB-INF目錄下的資源不能被瀏覽器直接訪問(wèn)。
  2. 斷點(diǎn)調(diào)試:使用"小蟲(chóng)子"啟動(dòng) dubug 啟動(dòng)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容