day09 Servlet

課程回顧:

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

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

Servlet(好好學)
  • 動態WEB的資源。
    • 什么是Servlet
      • 實現Servlet接口,重寫5個方法。

      • Servlet是一個小的java程序,運行在服務器中,接收和響應從客戶端(瀏覽器)發送過來的請求。

      • 快速入門

        1. 編寫一個類,實現Servlet接口,重寫5個方法。
        2. 編寫一個類,繼承GenericServlet類,重寫一個方法。
        3. 配置文件,配置Servlet信息。(必須會)
          <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 設置臨時的環境變量,只對當前的窗口有效。
      • Servlet的生命周期(面試題)

        • 生命周期過程:實例被創建,對外提供服務,銷毀。

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

      • Servlet的關系

        Servlet接口
        |
        GenericServlet(重寫5個方法)
        |
        HttpServlet(繼承GenericServlet實現了Servlet接口)
        |
        MyServlet

      • 為什么會有GenericServlet?為什么有HttpServlet?

      • 注意事項:

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

        • 編寫一個類,繼承HttpServlet

        • 重寫doGet和doPost方法

          • 在doPost方法中調用doGet方法。

          • 表單是get方式,調用doGet

          • 表單是post方法,調用doPost方法

          • doGet和doPost互相調用。

            <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關閉。

Servlet自動加載
  • Servlet默認是第一次訪問時候創建實例。通過配置,服務器啟動,創建實例。

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

  • 在<servlet>標簽下
    <load-on-startup>3</load-on-startup>
    * 值是正整數
    * 如果值越小,優先級越高。

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

======================================================================================================
* HTTP的協議
* 請求
* referer 記住當前網頁的來源
* user-agent 瀏覽器版本信息
* if-modefied-since

    * 響應
        * 響應頭
        * location      和302一起來完成重定向的操作
        * refresh       頁面的定時刷新
        * last-modefied 和 if-modefied-since和304狀態碼一起來控制緩存。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,622評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,716評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,746評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,991評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,706評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,036評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,029評論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,203評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,725評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,451評論 3 361
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,677評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,161評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,857評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,266評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,606評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,407評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,643評論 2 380

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,836評論 18 139
  • Spring Boot 參考指南 介紹 轉載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,925評論 6 342
  • 從三月份找實習到現在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂視家的研發崗...
    時芥藍閱讀 42,339評論 11 349
  • 本文包括: Servlet簡介關于Servlet的一些類 Servlet生命周期 ServletConfig獲得初...
    廖少少閱讀 3,891評論 1 67
  • 新的一天,新的一年,新的氣象。 2017年,跨入了我的次超級吉祥年。這一年我就快22歲。(ps.所謂吉祥年,是我迷...
    Jimuboy閱讀 246評論 0 0