day09 Servlet

課程回顧:

* 服務(wù)器
    * 網(wǎng)絡(luò)的架構(gòu)
        * C/S   客戶端/服務(wù)器
            * 服務(wù)器壓力小,如果客戶端需要更新下載
        * B/S   瀏覽器/服務(wù)器
            * 服務(wù)器壓力大,不用更新
            
    * 服務(wù)器概念
        * 硬件:一臺(tái)電腦。
        * 軟件:服務(wù)器的軟件(Tomcat)
        * 訪問:http://ip+端口號(hào)  找到主機(jī)
        
    * Tomcat服務(wù)器,免費(fèi)的,apache組織,支持Servelt/JSP的規(guī)范。
    * 安裝JDK,配置好環(huán)境變量。
    * 常見的啟動(dòng)的問題:
        * 環(huán)境變量沒配置好。
        * 端口占用的問題。
            * 找到占用的程序,結(jié)束掉。
            * 修改端口號(hào)。(改成80)
            
    * Tomcat的文件夾
        * bin       啟動(dòng)服務(wù)器和關(guān)閉服務(wù)器
        * conf(*****)   配置文件
        * lib       Tomcat運(yùn)行時(shí)jar包
        * temp      臨時(shí)文件
        * logs      日志
        * webapps(*****)    web的應(yīng)用們
        * work(*****)       JSP翻譯Servlet
    
    * 動(dòng)態(tài)的WEB資源
        * Servlet/JSP
        * 在服務(wù)器中有固定的目錄結(jié)構(gòu)
        * 在webapps目錄下創(chuàng)建一個(gè)文件夾
        website
            |
        WEB-INF
            |
            web.xml     必須有的(配置文件)
            classes     文件夾(編譯.class文件)
            lib         文件夾(第三方j(luò)ar包)
            
    * Tomcat和MyEclipse集成到一起
        
    * 部署項(xiàng)目(三種)
        * 直接復(fù)制到webapps目錄下
        * 配置虛擬路徑(訪問路徑)
            * 在tomcat/conf/server.xml中<Host>標(biāo)簽下
                <Context docBase="項(xiàng)目真實(shí)的路徑" path="/訪問路徑" ></Context>
                
            * 自己在tomcat/conf/引擎名稱/主機(jī)的名稱/xxx.xml文件   
                <Context docBase="項(xiàng)目真實(shí)的路徑" ></Context>
                * 因?yàn)閤xx作為訪問路徑
HTTP的協(xié)議
    * 超文本傳輸協(xié)議:post請求,參數(shù)封裝請求體中。做出響應(yīng),展示頁面上內(nèi)容,封裝的響應(yīng)體中。
        * 基于請求和響應(yīng)模式,先有請求再有響應(yīng)。
        * 默認(rèn)端口號(hào)80
        * 基于TCP協(xié)議
        
    * HTTP/1.1和HTTP/1.0區(qū)別:
        * 1.1一次鏈接獲取多個(gè)資源。
        * 1.0一次鏈接只能獲取一個(gè)資源。
    
    * 請求
        * 請求行
            * 請求方式
                * get和post區(qū)別
            * 請求路徑
            * 協(xié)議版本
                * HTTP/1.1版本
        * 請求頭
            * if-modefied-since     和last-modefied 完成控制緩存。
            * referer               記住當(dāng)前網(wǎng)頁的來源
            * user-agent            查看瀏覽器的版本
        * 空行
        * 請求體
            * 封裝post請求參數(shù)列表
    
    
    * 響應(yīng)
        * 響應(yīng)行
            * 協(xié)議版本
            * 狀態(tài)碼
                * 200       一起ok
                * 302       完成重定向操作
                * 304       if-modefied-since和last-modefied一起控制緩存
                * 404       找不到資源
                * 500       程序內(nèi)部錯(cuò)誤
            * 狀態(tài)碼描述
        * 響應(yīng)頭
            * Location      和302完成重定向
            * last-modefied 
            * refresh       頁面定時(shí)刷新
            * Content-Dispostion    文件下載
                
                禁用瀏覽器的緩存。
            
        * 空行
        * 響應(yīng)體
            * 展示用戶的數(shù)據(jù)

============================================================================================================

Servlet(好好學(xué))
  • 動(dòng)態(tài)WEB的資源。
    • 什么是Servlet
      • 實(shí)現(xiàn)Servlet接口,重寫5個(gè)方法。

      • Servlet是一個(gè)小的java程序,運(yùn)行在服務(wù)器中,接收和響應(yīng)從客戶端(瀏覽器)發(fā)送過來的請求。

      • 快速入門

        1. 編寫一個(gè)類,實(shí)現(xiàn)Servlet接口,重寫5個(gè)方法。
        2. 編寫一個(gè)類,繼承GenericServlet類,重寫一個(gè)方法。
        3. 配置文件,配置Servlet信息。(必須會(huì))
          <servlet>
              <!-- 配置Servlet名稱,名稱必須唯一 -->
              <servlet-name>ServletDemo1</servlet-name>
              <!-- 配置Servlet的完全路徑(包名+類名) -->
              <servlet-class>cn.itcast.servlet.ServletDemo1</servlet-class>
          </servlet>
          
          <!-- 配置Servlet映射(訪問路徑) -->
          <servlet-mapping>
              <!-- 配置Servlet名稱,和上面的名稱必須相同 -->
              <servlet-name>ServletDemo1</servlet-name>
              <!-- 配置虛擬路徑(訪問路徑) -->
              <url-pattern>/demo1</url-pattern>
          </servlet-mapping>
          
          
      • 編譯

        • javac -d . HelloServlet.java
        • HelloServlet.java:4: 軟件包 javax.servlet 不存在
        • set classpath=%classpath%;servlet-api.jar 設(shè)置臨時(shí)的環(huán)境變量,只對(duì)當(dāng)前的窗口有效。
      • Servlet的生命周期(面試題)

        • 生命周期過程:實(shí)例被創(chuàng)建,對(duì)外提供服務(wù),銷毀。

          1. Servlet被創(chuàng)建后,然后調(diào)用init方法進(jìn)行初始化
            void init(ServletConfig config)
          2. 從客戶端發(fā)送所有的請求是service方法進(jìn)行處理的。
            void service(ServletRequest req, ServletResponse res)
          3. 從服務(wù)器中移除服務(wù),調(diào)用destroy方法。
            void destroy()
        • Servlet的生命周期:第一次請求的時(shí)候,Servlet實(shí)例被創(chuàng)建,立即調(diào)用init方法進(jìn)行初始化。
          實(shí)例通過service方法提供服務(wù)。服務(wù)器關(guān)閉或者移除服務(wù)時(shí),調(diào)用destroy方法進(jìn)行銷毀。

      • Servlet的關(guān)系

        Servlet接口
        |
        GenericServlet(重寫5個(gè)方法)
        |
        HttpServlet(繼承GenericServlet實(shí)現(xiàn)了Servlet接口)
        |
        MyServlet

      • 為什么會(huì)有GenericServlet?為什么有HttpServlet?

      • 注意事項(xiàng):

        • 如果想重寫init方法,重寫無參數(shù)的init方法。
      • 開發(fā)步驟(最終)

        • 編寫一個(gè)類,繼承HttpServlet

        • 重寫doGet和doPost方法

          • 在doPost方法中調(diào)用doGet方法。

          • 表單是get方式,調(diào)用doGet

          • 表單是post方法,調(diào)用doPost方法

          • doGet和doPost互相調(diào)用。

            <form action="http://localhost:80/day09/demo5" method="post">
            姓名:<input type="text" name="username" />
            <input type="submit" value="查詢" />
            </form>

        • 在web.xml配置

修改Servlet模板
  • 先找到MyEclipse的安裝路徑。

    • \myeclipse10.7\Common\plugins\com.genuitec.eclipse.wizards.xxxx.jar
    • 我自己的:com.genuitec.eclipse.wizards_9.0.0.me201211011550.jar
  • 千萬別解壓,右鍵--選擇壓縮工具打開--templates--Servlet.java

  • 拖回去之前,先MyEclipse關(guān)閉。

Servlet自動(dòng)加載
  • Servlet默認(rèn)是第一次訪問時(shí)候創(chuàng)建實(shí)例。通過配置,服務(wù)器啟動(dòng),創(chuàng)建實(shí)例。

  • init做初始化的操作,非常消耗時(shí)間的。

  • 在<servlet>標(biāo)簽下
    <load-on-startup>3</load-on-startup>
    * 值是正整數(shù)
    * 如果值越小,優(yōu)先級(jí)越高。

配置虛擬路徑(訪問路徑)
      <servlet-mapping>
        <url-pattern>/demo5</url-pattern>
      </servlet-mapping>
WEB開發(fā)中路徑的問題
  • ServletConfig對(duì)象和配置文件相關(guān)
    • 配置初始化參數(shù)
    • 需要在<servlet></servlet>標(biāo)簽下配置。
    • 如果要是配置在某個(gè)servlet的標(biāo)簽下,那么只能在該servlet中獲取初始化參數(shù)。
                <init-param>
                    <param-name>username</param-name>
                    <param-value>root</param-value>
                </init-param>
  • String getServletName() 獲取配置文件中servlet的名稱
  • String getInitParameter(String name) 獲取初始化參數(shù)
  • Enumeration getInitParameterNames() 獲取初始化參數(shù)的名稱們
    * ServletContext對(duì)象(域?qū)ο螅?(*****)
        * 定義:WEB容器在啟動(dòng)時(shí),它會(huì)為每個(gè)WEB應(yīng)用程序都創(chuàng)建一個(gè)對(duì)應(yīng)的ServletContext對(duì)象,它代表當(dāng)前web應(yīng)用。
        一個(gè)WEB應(yīng)用對(duì)應(yīng)一個(gè)ServletContext對(duì)象
        一個(gè)WEB應(yīng)用下有多個(gè)Servlet程序
        所有的servlet程序都共享同一個(gè)ServletContext對(duì)象
        
        demo1存入內(nèi)容   ServletContext  demo2中取出來
        
        * 作用:
            * 獲取WEB應(yīng)用全局初始化參數(shù)
                * 在web.xml中配置
                    <context-param>
                        <param-name>encoding</param-name>
                        <param-value>GBK</param-value>
                    </context-param>
                
                String getInitParameter(String name)      
                getInitParameterNames()                     
                
            * 實(shí)現(xiàn)數(shù)據(jù)的共享(*****)
                void setAttribute(String name, Object object)   存入數(shù)據(jù)
                void removeAttribute(String name)               刪除數(shù)據(jù)
                Object getAttribute(String name)                獲取數(shù)據(jù)
                
            * 讀取資源文件(*****)
                InputStream getResourceAsStream(String path)    通過文件的地址獲取輸入流
                String getRealPath(String path)         通過文件的地址獲取文件的絕對(duì)磁盤路徑

======================================================================================================
* HTTP的協(xié)議
* 請求
* referer 記住當(dāng)前網(wǎng)頁的來源
* user-agent 瀏覽器版本信息
* if-modefied-since

    * 響應(yīng)
        * 響應(yīng)頭
        * location      和302一起來完成重定向的操作
        * refresh       頁面的定時(shí)刷新
        * last-modefied 和 if-modefied-since和304狀態(tài)碼一起來控制緩存。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,697評(píng)論 19 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,288評(píng)論 6 342
  • 從三月份找實(shí)習(xí)到現(xiàn)在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂視家的研發(fā)崗...
    時(shí)芥藍(lán)閱讀 42,885評(píng)論 11 349
  • 本文包括: Servlet簡介關(guān)于Servlet的一些類 Servlet生命周期 ServletConfig獲得初...
    廖少少閱讀 4,112評(píng)論 1 67
  • 新的一天,新的一年,新的氣象。 2017年,跨入了我的次超級(jí)吉祥年。這一年我就快22歲。(ps.所謂吉祥年,是我迷...
    QimuAI閱讀 298評(píng)論 0 0

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