實用javaweb技術知識點

在這裏插入圖片描述

卑微小吳勵志寫博客第四天

Web技術

我們平常說的Java一般指Java SE,也就是Java Standard Edition,Java的標準版,一般用來開發桌面應用程序,但是在開發桌面應用程序上相對VB,Delphi,VC++並沒有什麼優勢。
JavaWeb則到了Java EE領域了,也就是Java Enterprise Edition,Java的企業版,看那個web就應該想到是與Internet有關的,其實開發JavaWeb應用程序,初級的一般是用JSP(Java Server Pages)+servlet+Javabean來開發的,對大型的網站一般是使用框架來開發的,例如struts,hibernate,spring,springmvc,springboot等。
Java還有一個版本是JavaME,Java Micro Edition,Java的微型版,諾基亞手機上運行的Java程序就是指用這個版本開發的程序。

1 Servlet的生命週期詳解

大多數程序員都知道Servlet的生命週期,簡單的概括這就分爲四步:servlet類加載—>實例化—>服務—>銷 毀。對這個過程只是膚淺瞭解下,對於servlet何時被銷燬,還是不太情楚。下面我們描述一下Tomcat與Servlet是如何工作的,首先看下面的 時序圖.
在這裏插入圖片描述

  1. Web Client 向Servlet容器(Tomcat)發出Http請求
  2. Servlet容器接收Web Client的請求
  3. Servlet容器創建一個HttpRequest對象,將Web Client請求的信息封裝到這個對象中
  4. Servlet容器創建一個HttpResponse對象
  5. Servlet容器調用HttpServlet對象的service方法,把HttpRequest對象與HttpResponse對象作爲參數傳給 HttpServlet對象
  6. HttpServlet調用HttpRequest對象的有關方法,獲取Http請求信息
  7. HttpServlet調用HttpResponse對象的有關方法,生成響應數據
  8. Servlet容器把HttpServlet的響應結果傳給Web Client
  9. Servlet的框架是由兩個Java包組成的:javax.servlet與

javax.servlet.http。在javax.servlet包中定義了所有的Servlet類都必須實現或者擴展的通用接口和類。在 javax.servlet.http包中定義了採用Http協議通信的HttpServlet類。Servlet的框架的核心是 javax.servlet.Servlet接口,所有的Servlet都必須實現這個接口。
其中3個方法代表了Servlet的生命週期:
1、init方法:負責初始化Servlet對象。
2、service方法:負責響應客戶的請求。
3、destroy方法:當Servlet對象退出生命週期時,負責釋放佔用的資源。

2 Jsp和servlet的區別

jsp和servlet的區別和聯繫:

  1. jsp經編譯後就變成了Servlet。(JSP的本質就是Servlet,JVM只能識別java的類,不能識別JSP的代碼,Web容器將JSP的代碼編譯成JVM能夠識別的java類)
  2. jsp更擅長表現於頁面顯示,servlet更擅長於邏輯控制。
  • Servlet中沒有內置對象,Jsp中的內置對象都是必須通過
    HttpServletRequest對象,HttpServletResponse對象以及HttpServlet對象得到.
    Jsp是Servlet的一種簡化,使用Jsp只需要完成程序員需要輸出到客戶端的內容,Jsp中的Java腳本如何鑲嵌到一個類中,由Jsp容器完成。而Servlet則是個完整的Java類,這個類的Service方法用於生成對客戶端的響應。
    聯繫:
  • JSP是Servlet技術的擴展,本質上就是Servlet的簡易方式。JSP編譯後是“類servlet”。
  • Servlet和JSP最主要的不同點在於: Servlet的應用邏輯是在Java文件中,並且完全從表示層中的HTML裏分離開來。
  • 而JSP的情況是Java和HTML可以組合成一個擴展名爲.jsp的文件。 JSP側重於視圖,Servlet主要用於控制邏輯
    Servlet更多的是類似於一個Controller,用來做控制。
  • Servlet能夠很好地組織業務邏輯代碼,但是在Java源文件中通過字符串拼接的方式生成動態HTML內容會導致代碼維護困難、可讀性差
    JSP雖然規避了Servlet在生成HTML內容方面的劣勢,但是在HTML中混入大量、複雜的業務邏輯同樣也是不可取的

通過MVC雙劍合璧
既然JSP和Servlet都有自身的適用環境,那麼能否揚長避短,讓它們發揮各自的優勢呢?答案是肯定的——MVC(Model-View-Controller)模式非常適合解決這一問題。

Model代表的是應用的業務邏輯(通過Java Bean,EJB組件實現)。
View是應用的表示面(由JSP頁面產生)。
Controller是提供應用的處理過程控制(一般是一個Servlet),通過這種設計模型把應用邏輯,處理過程和顯示邏輯分成不同的組件實現,這些組件可以進行交互和重用。

3 jdbc操作數據庫的步驟是什麼,爲什麼要使用PreparedStatement?

第一步:Class.forName()加載數據庫連接驅動;
第二步:DriverManager.getConnection()獲取數據連接對象;
第三步:根據 SQL 獲取 sql 會話對象,有 2 種方式 Statement、PreparedStatement ;
第四步:執行 SQL 處理結果集,執行 SQL 前如果有參數值就設置參數值 setXXX();
第五步:關閉結果集、關閉會話、關閉連接。

使用PreparedStatement的原因?
1、 PreparedStatement 接口繼承 Statement, PreparedStatement 實例包含已編譯的 SQL 語句,所以其執行速度要快於 Statement 對象。
2 、 作 爲 Statement 的 子 類 , PreparedStatement 繼 承 了 Statement 的 所 有 功 能 。 三 種 方
法 execute、 executeQuery 和 executeUpdate 已被更改以使之不再需要參數
3、在 JDBC 應用中,在任何時候都不要使用 Statement,原因如下:
①、代碼的可讀性和可維護性.Statement 需要不斷地拼接,而 PreparedStatement 不會。
②、 PreparedStatement 盡最大可能提高性能.DB 有緩存機制,相同的預編譯語句再次被調用不會再次需要編譯。
③、 最重要的一點是極大地提高了安全性.Statement 容易被 SQL 注入,而 PreparedStatementc 傳入的內容不會和 sql 語句發生任何匹配關係。

4 會話跟蹤技術有哪些

由於HTTP協議本身是無狀態的,服務器爲了區分不同的用戶,就需要對用戶會話進行跟蹤,簡單的說就是爲用戶進行登記,爲用戶分配唯一的ID,下一次用戶在請求中包含此ID,服務器據此判斷到底是哪一個用戶。

  1. URL 重寫:在URL中添加用戶會話的信息作爲請求的參數,或者將唯一的會話ID添加到URL結尾以標識一個會話。
  2. 設置表單隱藏域:將和會話跟蹤相關的字段添加到隱式表單域中,這些信息不會在瀏覽器中顯示但是提交表單時會提交給服務器。

這兩種方式很難處理跨越多個頁面的信息傳遞,因爲如果每次都要修改URL或在頁面中添加隱式表單域來存儲用戶會話相關信息,事情將變得非常麻煩。

  1. cookie:cookie有兩種,一種是基於窗口的,瀏覽器窗口關閉後,cookie就沒有了;另一種是將信息存儲在一個臨時文件中,並設置存在的時間。
    當用戶通過瀏覽器和服務器建立一次會話後,會話ID就會隨響應信息返回存儲在基於窗口的cookie中,那就意味着只要瀏覽器沒有關閉,會話沒有超時,下一次請求時這個會話ID又會提交給服務器讓服務器識別用戶身份。會話中可以爲用戶保存信息。會話對象是在服務器內存中的,而基於窗口的cookie是在客戶端內存中的。如果瀏覽器禁用了cookie,那麼就需要通過下面兩種方式進行會話跟蹤。當然,在使用cookie時要注意幾點:
    首先不要在cookie中存放敏感信息;
    其次cookie存儲的數據量有限(4k),不能將過多的內容存儲cookie中;
    再者瀏覽器通常只允許一個站點最多存放20個cookie。當然,和用戶會話相關的其他信息(除了會話ID)也可以存在cookie方便進行會話跟蹤。
  2. HttpSession:在所有會話跟蹤技術中,HttpSession對象是最強大也是功能最多的。當一個用戶第一次訪問某個網站時會自動創建
    =HttpSession,每個用戶可以訪問他自己的HttpSession。可以通過HttpServletRequest對象的getSession方法獲得HttpSession,通過HttpSession的setAttribute方法可以將一個值放在HttpSession中,通過調用HttpSession對象的getAttribute方法,同時傳入屬性名就可以獲取保存在HttpSession中的對象。
    與上面三種方式不同的是,HttpSession放在服務器的內存中,因此不要將過大的對象放在裏面,即使目前的Servlet容器可以在內存將滿時將HttpSession中的對象移到其他存儲設備中,但是這樣勢必影響性能。添加到HttpSession中的值可以是任意Java對象,這個對象最好實現了Serializable接口,這樣Servlet容器在必要的時候可以將其序列化到文件中,否則在序列化時就會出現異常。

5 Cookie和session區別

1、cookie數據存放在客戶的瀏覽器上,session數據放在服務器上。
2、cookie不是很安全,別人可以分析存放在本地的COOKIE並進行COOKIE欺騙
考慮到安全應當使用session。
3、session會在一定時間內保存在服務器上。當訪問增多,會比較佔用你服務器的性能,考慮到減輕服務器性能方面,應當使用COOKIE。
4、單個cookie保存的數據不能超過4K,很多瀏覽器都限制一個站點最多保存20個cookie。
5、所以個人建議:
將登陸信息等重要信息存放爲SESSION
其他信息如果需要保留,可以放在COOKIE中

6 HTTP請求狀態碼,get與post請求的區別

在這裏插入圖片描述在這裏插入圖片描述

7 轉發(Forward)和重定向(Redirect)的區別?

轉發是服務器行爲,重定向是客戶端行爲。
轉發(Forword)通過RequestDispatcher對象的forward(HttpServletRequest request,HttpServletResponse response)方法實現的。RequestDispatcher可以通過HttpServletRequest 的getRequestDispatcher()方法獲得。例如下面的代碼就是跳轉到login_success.jsp頁面。

request.getRequestDispatcher("login_success.jsp").forward(request, response);

重定向(Redirect) 是利用服務器返回的狀態嗎來實現的。客戶端瀏覽器請求服務器的時候,服務器會返回一個狀態碼。服務器通過HttpServletRequestResponse的setStatus(int status)方法設置狀態碼。如果服務器返回301或者302,則瀏覽器會到新的網址重新請求該資源。
從地址欄顯示來說

  • forward是服務器請求資源,服務器直接訪問目標地址的URL,把那個URL的響應內容讀取過來,然後把這些內容再發給瀏覽器.瀏覽器根本不知道服務器發送的內容從哪裏來的,所以它的地址欄還是原來的地址.
  • redirect是服務端根據邏輯,發送一個狀態碼,告訴瀏覽器重新去請求那個地址.所以地址欄顯示的是新的URL.

從數據共享來說

  • forward:轉發頁面和轉發到的頁面可以共享request裏面的數據.
  • redirect:不能共享數據.

從運用地方來說

  • forward:一般用於用戶登陸的時候,根據角色轉發到相應的模塊.
  • redirect:一般用於用戶註銷登陸時返回主頁面和跳轉到其它的網站等

從效率來說

  • forward:高.;redirect:低.

8 Httpclient是什麼?怎樣使用?

HttpClient 是 Apache Jakarta Common 下的子項目。它是一個客戶端的HTTP通信實現庫。HttpClient的目標是發送和接收HTTP報文。HttpClient不會去緩存內容,執行嵌入在HTML頁面中的javascript代碼,猜測內容類型,重新格式化請求/重定向URI,或者其它和HTTP運輸無關的功能。它主要就是支持HTTP傳輸協議的。
簡單來講:httpclient就是用java代碼發送http請求(開發中一般用來調用接口)
HTTP協議的連接方法有GET、POST、PUT和HEAD方式,在創建Method實例的時候可以更具具體的方法來創建。HttpClient的使用一般分如下幾步:
1、創建HttpClient實例。
2、創建具體連接方法的實例。如POST方法創建PostMethod的實例,在實例化時從構造函數中傳入待連接的URL地址。
3、對post的發送內容等信息進行配置。
4、執行HttpClient的execute方法。
5、如果返回的狀態碼正常,表明連接成功,可以讀取response的內容。
![在這裏插入圖片描述](https://img-blog.csdnimg.cn/20200521213922495.png?x-oss-process=在這裏插入圖片描述

卑微小吳最近寫的都是一些偏理解的知識點,以後會往實戰方向走。希望能給關注的朋友一些幫助。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章