Servlet課上筆記

                          Servlet課上筆記html

    這兩天在學習servlet,課上本身動手記了了一些筆記,內容不是很詳細,有些地方可能作的不是很明瞭,畢竟在課堂生仍是以聽和練爲主,因此你們要是看就對付看吧。java

   Servlet:
  一、什麼是Servlet?
      是一個java類,要按照servlet規範來編寫,而且要部署在符合servlet規範的容器當中運行。其
      做用是擴展web服務器的功能(生成動態資源,與CGI程序相似)。
                      請求a.html
                ——————————>                |—— 動態————>CGI程序
      browser        返回a.html                apche        
               <——————————非動態————|             
  二、Servlet的優勢:
      (1)能夠訪問數據庫
      (2)方便地處理業務邏輯
      (3)一個請求只會啓動一個線程(CGI程序是一個請求啓動一個進程),消耗的資源相對少
      (4)多個請求能夠共享同一個Servlet實例
      (5)servlet能夠在任何符合servlet規範的容器(tomcat/was/...)上運行,方便維護。
  三、如何去寫一個servlet?
       step1:
          寫一個java類實並現Servlet接口或者繼承HttpServlet。
       step2:
          編譯(依賴servlet-api.jar)
       step3:
          打包
   appName(應用名)
      WEB-INF
          classes(放servlet字節碼)
          lib(好比數據庫驅動)
          web.xml(部署描述文件:好比配置servlet-url)
       step4:
          部署   將第三步目錄結構copy to 服務器特定的目錄。
       step5:
          啓動服務器
       step6:
          訪問
http://ip:port/appName/servlet-urlmysql

  四、安裝服務器
      (1)解壓tomcat

      (2)配置環境變量
         JAVA_HOME
         CATALINA_HOME:tomcat解壓到的目錄
         PATH:CATALINA_HOME/bin
      (3)啓動tomcat
         cd CATALINA_HOME/bin
         linux:sh startup.sh
         windows:startup.bat
      (4)http://localhost:8080
  五、服務端寫servlet不用考慮網絡問題
  六、web服務器=servlet容器(符合servlet規範的web服務器)
    
linux

     1)、Servlet的運行的基本過程:

         http協議是應用層協議                               將請求中的數據先解析而後生成對象
          
web

              (1)請求(經過http協議)       servlet        (2)
         
——————————————>             ————————>HttpServletRequest(對象)
  browser                                        引      (3)
                                                    ————————>HttpServletResponse(對象) 
                   (7)響應                                (4)而後
           <——————————————         ————————>  Servlet
                                                                  調用service (5)處理請求
                                                       (6)引擎讀取HttpServletResponse  
sql

   第五步時能夠從request中獲取數據(方便),
   也能夠將處理的結果放到response  
              第四步先看要調用的servlet是否有對應
                                                 的實例,若無,則建立實例,如有再也不建立新的實例
        
數據庫

  第二步爲何引擎要將請求中的數據轉化成一個request對象?
  由於servlet再也不須要考慮http協議。
windows

step1 瀏覽器會將表單中的數據打包(http數據包)
step2 發送
       (地址 http:ip:port/appName/pricing(action的值)
step3 服務器將請求地址去掉應用名以前的內容(包括應用名),保留應用名以後的地址
       再將該地址與web.xml中的url-pattern做比較,找不到的話顯示404
step4 找到
step5 若是servlet沒有相應的實例則建立實例
step6 調service方法
api

   2)、Http協議瀏覽器

什麼是http協議?
 超文本傳輸協議,用於制訂瀏覽器與web服務器之間數據交互的方式與數據自己的格式。
 A.數據交互的方式
     瀏覽器發送鏈接請求
     服務器接受
     瀏覽器將數據打包,發送
     服務器處理完畢,數據打包,發送
  , 發送完畢,關閉鏈接。
 B. 數據包的格式
    請求數據包(請求消息)
       請求行:
           請求方式(get/post)
           要訪問的資源路徑(若是是get,包含請求數據)
           協議的版本號(1.0,1.1)
       若干消息頭(瀏覽器與服務器之間的一些約定):
           好比在消息頭中,能夠攜帶cookie。
           又好比,在消息頭中,能夠告訴服務器,
           當前瀏覽器支持的語言。
       實體內容
           若是請求方式是post,則表單中的數據會存放到這兒。
           若是請求方式是get,則數據會放到請求行(資源路徑以後)
   響應數據包(響應消息)
       狀態行:
           協議的版本號
           狀態碼 
               404:找不到資源
               500:系統內部錯誤
               200:正常
           狀態碼的描述
       若干消息頭:
           好比,告訴瀏覽器,以什麼樣的編碼來顯示返回的內容。
       實體內容:
           返回的處理結果。
 
 練習:
   計價
    規則  產品的最終價格 = 原始價格 * (1 + 稅率)。
   界面:
    pricing2.html
    表單 
     原始價格 basePrice
     銷售城市 city     先依據城市,找到對應的稅率(if...else)。
 

  3 )、get/post方式:

   get方式:
       A. 表單默認提交的方式,瀏覽器地址欄直接輸入一個地址,使用連接訪問。
       B. 表單中的數據會添加到請求行,放置的數據有限,並且數據會直接在瀏覽器的地址欄顯示,不安全。
       C. get方式,通常不適合用於瀏覽器向服務器提交數據。適用於請求某個資源。
   post方式:
       A.對錶單,設置了method="post"。
       B.表單中的數據會添加到實體內容裏,能夠存放大量數據。相對於get方式,會安全一些。(無論哪一種方式,都不是絕對安全的,由於瀏覽器不會對數據進行加密)
       C.通常若是有大量的數據須要提交給服務器。
 
   練習:
      寫一個ListEmpServlet,會返回一個
      表格,表格中的內容是:
      id   name salary
      1  zs  2000

   4)、表單的處理


 

 (1)若是得到表單中的數據
  String request.getParameter(paramName);
  //有多個同名的paramName
  //好比 interest=fishing&interest=sleep
  String[] request.getParameterValues(paramName);
 (2)表單中的中文問題
 step1:
   對於html文件,添加<meta http-equiv="content-Type" 
                      content="text/html;charset=utf-8">
   要注意:該文件保存時所使用的編碼必定也是utf-8
   做用是:要求瀏覽器按照指定的編碼來顯示該文檔。
 step2:
   在servlet中,使用request.setCharacterEncoding("utf-8");
   要注意:此處的編碼應該與meta中設置的一致
   做用:設置request對象的解碼所採用的編碼。
   默認狀況下,request採用iso-8859-1編碼來解碼。
   此外,還要使用response.setContentType("text/html;charset=utf-8");
   做用有兩個:
       1、response中寫入數據時,所使用的編碼
       2、生成一個消息頭,要求瀏覽器按指定的編碼來顯示返回的數據。
  (3) 數據庫的中文問題(mysql)
   對於某些版本的mysql jdbc驅動,須要告訴它,
   數據庫當前存放數據採用的編碼是什麼(把URL設置以下)
   String url = "jdbc:mysql://localhost:3306/sd1005db2?" +
    "useUnicode=true&characterEncoding=utf8";

   create database name default character set utf8 指定數據庫的編碼 統一設定成utf8

    5)、重定向


  服務器向瀏覽器發送一個狀態碼302以及一個地址。
  瀏覽器收到該狀態碼以後,會當即向這個地址發送請求。
  特色:
   重定向的地址是任意的(既能夠是當前服務器上的某個地址,也能夠是其它服務器上的某個地址)
   瀏覽器的地址欄的地址會發生變化。
 

練習   按照servlet02工程的要求實現   學生信息的維護   id name age classname      create table t_student(   id bigint primary key auto_increment   name varchar(50),   age int(3),   classname varchar(50));      注意,中文問題

相關文章
相關標籤/搜索