Web 容器加載 Servlet 並將其實例化後,Servlet 生命週期開始,容器運行其 init 方法進行 Servlet 的初始化,請求到達時運行其 service 方法,service 方法自動派遣,運行請求的 doXXX 方法(doGet、doPost),當服務器決定將實例銷燬的時候調用其 Destroy 方法。與 CGI 的區別在於,Servlet 處於服務器進程中,它經過多線程方式運行其 service 方法,一個實例能夠運行多個請求,而且其實例通常不會銷燬,而 CGI 對每一個請求都產生新的進程,服務完成後就銷燬,因此效率上低於 Servlet。html
forward 是控制權的轉向,是服務器請求資源,服務器直接請求目標地址的 URL,把那個 URL 的響應內容讀取過來,而後把這些內容再發給瀏覽器。瀏覽器不知道服務器發送的內容是哪兒來的,因此它的地址仍是原來的地址。redirect 就是服務器端根據邏輯,發送一個狀態碼,告訴瀏覽器去請求一個新的地址,瀏覽器地址欄上顯示的是新的請求地址。forward 更高效。有些狀況下,若是須要使用其它服務器上的資源,則必須使用 redirectjava
動態 include 用 jsp:include 動做實現:<jsp:include page="test.jsjp" flush="true"/>,它老是檢查所包含文件中的變化,適用於包含動態頁面,而且能夠帶參數;靜態 include 用 include 僞代碼實現,它不會檢查所含文件的變化,適用於包含靜態頁面:<%@ include file="test.html" %>web
request:同 Servlet 裏的requestsql
response:同 Servlet 裏的response數據庫
session:同 request.getSession()編程
application:同 request.getServletContext後端
out:同 response.getWriter()設計模式
config:同 Servelt 的 init 方法裏的 ServletConfig 參數瀏覽器
page:表示該頁面產生的一個 Servlet 實例緩存
exception:針對錯誤網頁,未捕捉的除外
<%@ page language="java" pageEncoding="utf-8" contentType="text/html;charset=utf-8" %>
<%@ include file="test.html" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/fmt" %>
JSP 共有如下 6 種動做
jsp:include 在頁面被請求時引用一個文件
jsp:useBean 尋找或實例化一個 JavaBean
jsp:setProperty 設置 JavaBean 的屬性
jsjp:getProperty 輸出某個 JavaBean 的屬性
jsp:forward 轉發
jsp:plugin 根據瀏覽器類型爲 Java 插件生成 object 標記
form 中的 get 和 post 方法,在數據傳輸過程當中分別對應了 http 協議中的 GET 與 POST 方法。
GET 是用來從服務器上獲取數據,而 POST 是用來向服務器上傳數據
GET 將表單中數據按 variable=value 的形式,添加到 action 所指向的 URL 後面,二者使用「?」鏈接,而多個變量之間使用「&」鏈接;POST 是將表單中的數據放在 form 的數據體中,按照變量和值相對應的方式,傳遞到 action 所指向的 URL
GET 是不安全的,由於在傳輸過程,數據被放在請求的 URL 中;POST 的全部操做對用戶來講是不可見的
GET傳輸的數據量小,這主要是由於受 URL 長度限制;POST 能夠傳輸大量的數據,因此上傳文件只能使用 POST
GET 限制 form 表單的數據集必須爲 ASCII 字符,而 POST 支持整個 ISO10646 字符集
GET 是 form 的默認方法
最經常使用的容器:tomcat、weblogic
開發工具:eclipse、jbuilder、ItelliJ IDEA
webapps
application
jsp 頁面
WEB-INF
classes
lib
web.xml
jsp 頁面
META-INF
JSP 是 Servlet 技術的擴展,本質上是 Servlet 的簡易方式,更強調應用的視圖表達。JSP 編譯後是「Servlet 類」。Servlet 和 JSP 最主要的不一樣點在於,Servlet 的應用邏輯是在 Java 文件中,而且徹底從表示層中的 HTML 裏分離開來。而 JSP 的狀況是 Java 和 HTML 能夠組合成一個擴展名爲 .jsp 的文件。JSP 側重於視圖,Servlet 主要用於控制邏輯
pageContext 是表明與一個頁面相關的對象和屬性。一個頁面由一個編譯好的 Servlet 類(能夠帶有任何的 include 指令,沒有 include 動做)表示。這既包括 Servlet 又包括被編譯成 Servlet 的 JSP 頁面
Request 是代碼 web 客戶機發出的一個請求相關的對象和屬性。一個請求可能跨越多個頁面,涉及多個 web 組件(因爲 forward 指令和 include 動做的關係)
Session 是表明與用於某個 web 客戶機的一個用戶體驗相關的對象和屬性。一個 web 會話能夠也常常或跨越多個客戶機請求
Application 是表明與整個 web 應用程序相關的對象和屬性。這實質上是跨越整個 web 應用程序,包括多個頁面、請求和會話的一個全局做用域
基於 Java 的 Web 應用系統採用 MVC 架構模式,即 model(模型)、view(視圖)、control(控制器)分離設計;這是目前 Web 應用服務系統的主流設計方向
MVC 設計模式:應用觀察者模式的框架模式
model:處理業務邏輯的模塊,每一種處理一個模塊(模型,操做數據的業務處理層,並獨立於表現層)
view:負責頁面顯示,顯示 model 處理結果給用戶,主要實現數據到頁面轉換過程(視圖,經過客戶端數據類型顯示數據,並回顯模型層的執行結果)
control:負責請求分發,把 form 數據傳遞給 model 處理,把處理結果的數據傳遞給 view 顯示(控制器,視圖層和模型層的橋樑,控制數據的流向,接受視圖發出的事件,並重繪視圖)
JSP + Servlet + JavaBean,以控制器爲核心,JSP 只負責顯示和收集數據,Servlet,鏈接視圖和模型,將視圖層數據發送給模型層,JavaBean,分爲業務類和數據實體,業務類處理業務數據,數據實體承載數據,基本上大多數的項目都是使用這種 MVC 的實現模式
Cookie、URL 重寫、設置表單隱藏域
驗證客戶是否來自可信網絡
對客戶提交的數據進行從新編碼
過濾掉客戶的某些不該該出現的詞彙
驗證用戶是否能夠登陸
驗證客戶的瀏覽器是否支持當前的應用
記錄系統日誌
用戶配置 web 應用的信息,如 listener、filter、Servlet
<c:if>
<c:choose>、<c:when>、<c:otherwise>
<c:forEach>
<c:set>
中間件就是程序中可植入的,可重用的,與業務邏輯無關的各類組件
中間件是基礎軟件的一大類,屬於可複用軟件的範疇。顧名思義,中間件處於操做系統軟件與用戶的應用軟件的中間。中間件在操做系統、網絡和數據庫之上,應用軟件的下層,總的做用是爲處於本身上層的應用軟件提供運行與開發的環境,幫助用戶靈活、高效的開發和集成複雜的應用軟件
中間件是一種獨立的系統軟件或服務程序,分佈式應用軟件藉助這種軟件在不一樣的技術之間共享資源,中間件位於客戶機服務器的操做系統之上,管理計算資源和網絡通訊。
舉例:
RMI(Remote Method Invocation)遠程調用
Load Balancing 負載均衡,將訪問符合分散到各個服務器中
Treasparent Fail-over 透明的故障切換
Clustering 集羣,用多個小的服務器代替大型機
Back-end-Integration 後端集成,用現有的、新開發的系統如何去集成遺留的系統
Transaction 事務(全局事務:分佈式事務)(局部事務:在同一數據庫鏈接內的事務)
Dynamic Redeployment 動態從新部署,在不中止原系統的狀況下,部署新的系統
System Managerment 系統管理
Threading 多線程處理
Message-oriented Middleware 面向消息的中間件(異步的調用編程)
Component Life Cycle 組件的生命週期管理
Resource pooling 資源池
Security 安全
Caching 緩存
String str = new String("testABC".getBytes("iso-8859-1"), "utf-8");
J2EE 自己是一個標準,一個爲企業分佈式應用開發提供的標準平臺
J2EE 也是一個框架,包括 JDBC、JNDI、RMI、JMS、EJB、JTA 等技術
對象關係映射(Object-Relational Mapping)是一種爲了解決面向對象與面向關係數據庫存在的互不匹配的技術,簡單說,ORM 是經過使用描述對象和數據庫之間映射的元數據,將 Java 程序中的對象自動持久化到關係數據庫中,本質上就是將數據從一種形式轉換到另外一種形式
Configuration:配置 Hibernate,根據其啓動 Hibernate,建立 SessionFactory 對象
SessionFactory:初始化 Hibernate,充當數據存儲源的代理,建立 session 對象,SessionFactory 是線程安全的,意味着它的同一個實例能夠被應用的多個線程共享,是重量級、二級緩存
Session:負責保存、更新、刪除、加載和查詢對象,是線程不安全的,避免多個線程共享一個 session,是輕量級、一級緩存
Query 和 Criteria:執行數據庫的查詢
Hibernate 的事務其實是底層的 JDBC Transaction 的封裝或者是 JTA Transaction 的封裝,默認狀況下使用 JDBC Transaction
setAutoCommit(boolean autoCommint):設置是否自動提交事務,默認爲自動提交
commint():提交事務
rollback():回滾事務
Java 中訪問數據庫的步驟以下
1)註冊驅動
2)創建鏈接
3)建立 Statement
4)執行 sql 語句
5)處理結果集(若 sql 語句爲查詢語句)
6)關閉鏈接
Statement、PreparedStatement 區別
1) 建立時的區別:
Statement stm = con.createStatement();
PreparedStatement pstm = con.prepareStatement(sql);
執行的時候:
stm.execute(sql);
pstm.execute();
2) PreparedStatement 一旦綁定了 SQL,此 pstm 就不能執行其它的 SQL,即只能執行一條 SQL 命令;Statement 能夠執行多條 SQL 命令。
3) 對於執行同構的 SQL(只有參數值不一樣,其它SQL 結構都相同),用 PreparedStatement 的執行效率比較高,支持預編譯,能夠執行批量處理任務;對於異構的SQL 語句,Statement 的執行效率較高。
4) 代碼的可讀性和可維護性;(例如一個insert 的 SQL 語句,stm 在 SQL 中須要用字符形式寫入傳遞的參數,pstm 提供方法傳遞參數,而且過濾掉SQL 中的特俗字符「 ’」,「-」)。
5) PreparedStatement 提升了安全性,防止了SQL 注入,但 Statement 不能實現,只能作判斷和過濾。
1)臨時狀態(transient)
特徵:
不處於 Session 緩存中
數據庫中沒有對象記錄
Java 對象若是進入臨時狀態:
經過 new 語句建立一個對象時
當調用 session 的 delete() 方法,從 session 緩存刪除一個對象時
2)持久化狀態(persisted)
特徵:
處於 session 緩存中
數據庫中有對象記錄
session 在特定時刻會保持兩者同步
Java 對象如何進入持久化狀態
session 的 save() 從臨時狀態到持久化狀態
session 的 load(), get() 方法返回的對象
session 的 find() 返回的 list 集合中存放的對象
session 的 update(), saveOrUpdate() 使遊離態到持久化狀態
3)遊離狀態(detached)
特徵:
再也不位於 session 緩存中
遊離對象由持久化狀態轉變而來,數據庫中可能還有對應記錄
Java 對象如何從持久化狀態到遊離狀態
session 的 close() 方法
session 的 evict() 方法,從緩存中刪除一個對象。 提升性能,少用。
JDBC 效率高、直接操做數據庫比較靈活
當 Hibernate 在查詢數據的時候,數據並無存在內存中,當程序真正對數據進行操做時,對象才存在內存中,就實現了延時加載。節省了服務器的內存開銷,從而提升了服務器的性能
均可以根據指定的實體類和 id 從數據庫讀取記錄,並返回與之對應的實體對象
若是沒有發現符合條件的記錄,get 方法返回 null,而 load 方法會拋出一個 ObjectNotFundException
cookie 機制採用的是在客戶端保持狀態的方案,而 session 機制採用的是在服務器端保持狀態的方案。因爲服務器端保持狀態的方案也須要在客戶端保存一個標識,全部,session 機制可能須要藉助於 cookie 機制來達到保存標識的目的
轉發495303098的,供參考學習