JSP 複習總結

JSP 複習


第二章 基本語法

  1. 在 " <%! " 和 “%>” 之間聲明變量和方法。聲明的變量在整個 JSP 頁面都有效,同時多個用戶訪問時會互相影響,用 synchronized 修飾的成員變量同一時間只能被一個線程訪問。
  2. 在" <%" 和 “%>” 之間插入 Java 程序片,並且按順序執行。程序片裏面的變量都是局部變量,不互相影響。可以在程序片中插入 HTML 標記,選擇執行哪一段標記。
  3. "<%=""%>" 之間插入 Java 表達式, 在"<%--""--%>" 之間插入 註釋。
  4. page 指令標記。用來定義整個 JSP 頁面的屬性和值。可選屬性:
    ① contentType,指定用戶瀏覽器用什麼來解析所受到的信息。
    <%@ page contentType="text/html; charset = gb2312" %>
    ② language,定義 JSP 頁面使用的腳本語言,只能去 “java”。
    ③ import,引入 Java 的包。④ session,用於設置是否需要 session 對象。
    ⑤ buffer,設置緩衝區大小。⑥ autoFlush,設置緩衝區填滿是否刷新。
    ⑦ isThreadsafe,設置是否可以多線程訪問 JSP 頁面。
    ⑧ info,定義一個常用字符串。
  5. include 指令標記。在 JSP 中靜態的插入一個文件。
    <%@ include file="文件的 URL" %>
  6. include 動作標記。在 JSP 中動態的包含一個文件,即運行時纔將文件加入。可以傳參數(名,值對應),被引用文件可以用 getParameter()getParameter() 獲取參數。
    <jsp:include page = "文件的 URL">
    	param 子標記
    </jsp:include>
    
  7. forward 動作標記。跟上一個差不多用法,只不過這個轉向後,頁面地址欄仍是轉向前的 URL 地址。

第三章 JSP 內置對象

1. request 對象

內置對象 request 封裝了用戶提交的信息,該對象調用相應的方法就可以獲取封裝的信息。同時也是 ServletRequest 接口類的一個實例。

  1. 用戶通常使用 HTML 表單提交信息。request 對象最常用 getParameter()getParameter() 來獲取信息。
  2. 處理漢字信息。在獲取信息之前使用 setCharacterEncodingsetCharacterEncoding 方法設置自己的編碼。
  3. 處理 HTML 標記。
    表單 <form> 標記:
    <form action = "tom.jsp" method = "post">
    		<input type = "text" name = "boy" value = "ok" >
    		<input type = "submit" value = "送出" name = "submit">
    </form>
    
    子標記 <input> 可以選擇表單的類型:文本框 text,單選按鈕 radio,複選框 checkbox,口令框 password,隱藏 hidden,submit 按鈕,重置按鈕 reset。
    下拉和滾動列表通過 <select> 和它的子標記 <option>定義。
    圖像標記 <image>,視頻標記 <embed>,表格標記 <table>
  4. 處理超鏈接
    超鏈接標記 <a href = 鏈接的 URL?參數=值> 文字說明 </a>,使用超鏈接的同時還可以傳遞參數。
2. response 對象
  1. setContentTypesetContentType 方法動態改變了 contentType 的屬性值。
  2. 動態添加響應頭和值:setHeader(String head, String value)
  3. sendRedirect()sendRedirect() 方法重定向另一個頁面。
  4. setStatus()setStatus() 設置響應的狀態行。
3. session 對象

HTTP 是一個無狀態協議,因此需要藉助 session 對象記錄有關連接的信息,它是 HttpSession 接口類的一個實例。(注意:同一個用戶在不同的 web 服務目錄的 session 是互不干擾的)

session 對象使用下列方法處理數據:
public Object setAttribute(String key, Object obj) 向會話加入數據。
public Object getAttribute(String key) 返回會話中的指定數據。
public void removeAttribute(String name) 移除會話中的指定數據。

session 對象的生存期限:
invalidate() 方法使其無效
public boolean isNew() 判斷是否爲新建 session 對象
public long getLastAccessedTime() 獲取 session 對象創建的時間,單位毫秒。
public itn getMaxInactiveInterval() 獲取 session 最後一次被操作的時間,單位秒。

4. application 對象

application 對象服務器創建,每個 Web 服務目錄下的 application 對象由所有用戶共享,但不同 Web 服務目錄下不互相同。

常用方法:
public void setAttribute(String key, Object obj),向對象添加數據
public Object getAttribute(String key),從對象讀取數據
public void removeAttribute(String key),從對象刪除特定數據

注意任何用戶對該對象的操作都會影響到其他用戶。在某些情況下,對該對象的操作需要同步處理。

5. out 對象

out 對象是一個輸出流,用來向用戶端輸出數據。

out.print(),輸出值
out.flush(),輸出緩衝區的內容
out.close(),關閉流

第四章 Javabean

Javabean 是一個可重複使用的軟件組件,實際上就是一個 Java 類,通過封裝屬性和方法成爲具有某種功能或者處理某個業務的對象,簡稱 bean。

1. 編寫 Javabean

編寫 Javabean 實際上就是編寫一個 Java 類,並把字節碼編譯好。
首先在當前 Web 服務目錄建立子目錄 WEB-INF\classes,然後根據類的包名建立子目錄結構,將字節碼放到最底層裏面。這樣 Tomcat服務器就能找到字節碼,並根據它創建 bean 對象以使用。

2. 使用 bean

通過 JSP 動作標記 useBean 來使用 bean。
<jsp:useBean id = "circle" class = "tom.jiafei.Circle" scope = "page" />

加載原理:
當加載一個 bean 時,JSP 引擎首先查找內置對象 pageContent 中是否含有這樣的 bean,如果存在,就分配這樣的 bean 給用戶。如果不存在就根據 class 指定的字節碼創建一個 bean,並添加到 pageContent 對象。

注意:如果修改了字節碼文件,必須重啓 JSP 引擎才能使用。

3. bean 的生存週期

bean 的生存週期取決於 scope 所取得值。

scope = page:
bean 只在當前頁面有效,直到頁面執行完畢。

scope = session
bean 在用戶訪問的 Web 服務目錄各個頁面都有效,直到用戶的會話 session 消失。

scope = request
bean 只在當前頁面有效,直到相應結束。存活時間略長於 page。因爲 JSP 引擎認爲頁面執行完畢後,響應纔算結束。

注意:上面三種不同的用戶對 bean 的改變,互不影響

scope = application
bean 爲所有用戶所共享。不用的用戶 scope 取值是 application 的 bean 也都是相同的。

4. 獲取和修改 bean 的屬性

除了上面提到的用 useBean 動作標記獲得一個 bean,然後直接調用 bean 的方法之外,

還可以用 <getProperty>, <setProperty> 動作標記來修改屬性。
<jsp:getProperty name = "bean 的 id 的名字" property = :"bean 的屬性"/>
<jsp:setProperty name = "bean 的 id 的名字" property = :"bean 的屬性" value = 字符串/>

第五章 Java Servlet

當用戶請求一個 JSP 頁面時,JSP 引擎首先將 JSP 頁面文件轉譯成一個 Java 文件、編譯 Java 文件,並用得到的字節碼文件創建一個 servlet 對象來響應用戶的請求。

可以看出 Java Servlet 技術是 JSP 的根基。而它的核心思想就是在服務器創建能相應用戶請求的 servlet 對象。

1. 創建 servlet 類

寫一個創建 servlet 的類就是編寫 javax.servlet.http 包中的 HttpServlet 類的子類。首先在當前 Web 服務目錄下創建子目錄 WEB-INF\classes,然後根據 servlet 類的包名結構創建相應的目錄,最後將字節碼文件放入。

2. 編寫部署文件 web.xml

Servlet 類的字節碼文件保存到指定目錄後,必須爲 Tomcat 服務器編寫一個部署文件,以便於按用戶的請求使用字節碼文件創建對象。

改部署文件是一個 XML 文件,由標記組成。格式如下:
第一行一定是 XML 聲明:
<?xml version = "1.0" encoding = "ISO-8859-1" ?>
接着是根標記<web-app>,所有的標記都在根標記裏面。
<servlet> 標記有兩個子標記
<servlet-name> 是創建的 servlet 的名字
<servlet-class> 指定哪個 Servlet 類來創建 servlet
<servlet-mapping> 標記有兩個子標記
<servlet-name> 創建的 servlet 的名字
<url-pattern> 用來指定用戶用怎樣的URL 格式來請求 servlet

每當 Web 服務目錄增加新的 servlet 時,都需要爲 web.xml 文件添加相應的標記。
在這裏插入圖片描述

3. servlet 運行原理

① servlet 對象的聲明週期:
servlet 是 javax.servlet 包中 HttpServlet 類的子類的一個實例,由服務器創建並完成初始化工作。當多個用戶請求一個 servlet 時,服務器爲每一個用戶啓動一個線程而不是啓動一個進程,效率高很多。

  • 初始化 servlet。服務器初始化這個 servlet,即創建一個 servlet,這個 servlet 調用 init 方法完成初始化。
  • 新誕生的 servlet 再調用 service 方法相應用戶的請求。
  • 當服務器關閉時,調用 destroy 方法銷燬 servlet。

② init 方法
public void init(ServletConfig config) throws ServletException
方法執行時,服務器會把一個 ServletConfig 對象傳遞過來,她負責傳遞服務設置信息。注意 init 方法只執行一次對於多個用戶。

③ service 方法

public void service (HttpServletRequest request, HttpServletResponse response) throw ServletException, IOException

兩個參數分別代表用戶的請求信息,返回用戶的相應。service 方法執行多次對於不同用戶。

④ destroy 方法
public destroy()

4. 通過 JSP 頁面訪問 servlet

用戶除了可以按 servlet 的請求格式在瀏覽器的地址欄直接輸入請求一個 servlet 之外,還可以通過 JSP 頁面來請求。

即:讓 JSP 頁面負責數據的顯示,而讓一個 servlet 去做和處理數據有關的事情。

① 通過表單向 servlet 提交數據
將表單的 action 值設置爲 web.xml 下設定的某個 servlet 訪問 URL即可。同時還可以添加參數。
<form action = "computeBill?sideA=10.66&sideB=23.9" ...></form>

② 通過超鏈接訪問 servlet
<a href = "triangle"></a>

5. 共享變量

編寫 Servlet 類聲明的成員變量將被所有用戶所共享。

6. doGet 和 doPost 方法

前面提到:服務器創建 servlet 後,它會調用 init 方法初始化自己(只初始化一次),之後每當接受用戶的請求時,就會產生一個新的線程,並在這個新的線程中調用 service 方法。

實際上,HttpServlet 類所給出的 service 方法只是先檢查 HTTP 請求類型(get、post),並在 service 方法根據用戶的請求方式,再調用相對應的 doGet, doPost 方法。同時還可以重寫這兩個方法來靈活響應用戶的請求。

7. 重定向與轉發

重定向的功能是將用戶從當前頁面或 servlet 定向到另一個 JSP 頁面或 servlet。
轉發的功能是將用戶對當前 JSP 頁面或 servlet 的請求轉發給另一個 JSP 頁面或 servlet。

區別:轉發的話,只能看到另一個頁面的效果,但是地址欄還是原來的地址。

① sendRedirect 方法
void sendRedirect (String location) 方法是 HttpServletResponse 類中的方法。注意重定向之後不能使用 request 獲取對象之前提交的數據
② RequestDispatcher 對象
RequestDispatcher 對象可以將用戶對當前頁面的請求和響應轉發給另一個頁面

步驟:

  • 獲得 RequestDispatcher 對象
    public RequestDispatcher getRequestDispatcher(String path)
    其中參數是要轉發到的 JSP 頁面,例:
    RequestDispatcher dispatcher = request.gerRequestDispatcher("a.jsp")
  • 轉發
    dispatcher.forward(request, response)
8. 使用 session

怎麼樣在 Servlet 類中使用 session 對象?
通過 HttpServletRequest 對象 request 調用 getSession 方法獲取用戶的 session 對象。
HttpSession session = request.getSession(true);

第六章 MVC 模式

模型-視圖-控制器 (Model-View-Controller),簡稱MVC 模式。

  • 模型 (model) :用於存儲數據的對象
  • 視圖 (view) :像控制器提交所需數據,顯示模型中的數據
  • 控制器 (controller):負責具體的業務邏輯操作,即控制器根據視圖提出的要求對數據作出處理,將有關結果存儲到模型中,並負責讓模型和視圖進行必要的交互,當模型中數據變化時,讓試圖更新顯示。
    在這裏插入圖片描述

在 JSP 中實現 MVC 模式:

  • 模型:一個或多個 Javabean 對象,用於存儲數據。Javabean 只要提供簡單的 setXxx 方法和 getXxx 方法,不涉及對數據的具體處理。
  • 視圖:一個或多個 JSP 頁面,其作用是像控制器提交必要的數據和顯示數據。
  • 控制器:一個或多個 servlet 對象,根據試圖提交的數據進行數據處理操作,並將有關的結果存儲到 Javabean 對象中,然後 servlet 使用轉發或重定向的方式請求視圖中的某個 JSP 頁面顯示數據。

在這裏插入圖片描述

第七章 JSP 連接數據庫

JDBC (Java DataBase Connectivity) 提供了訪問數據庫的一些 API,即由一些 Java 類和接口組成,是 Java 運行平臺核心類庫的一部分。

1. 首先需要建立連接

建立連接的代碼:

String uri= "jdbc:mysql://127.0.0.1/warehouse?useUnicode=true&characterEncoding=gb2312";
String user="root";
String password="stormjing7";
con=DriverManager.getConnection(uri,user,password);
//也可以寫成con=DriverManager.getConnection(uri+"?user=root&password=");
sql=con.createStatement();
rs=sql.executeQuery("SELECT * FROM product ");

建立連接之後就可以用 SQL 語句與數據庫進行交互。

2. 解決中文編碼問題

有時候訪問數據庫會出現編碼問題,解決編碼問題的方法就是整個項目所有編碼的地方都設置成同樣的編碼格式。比如:

  1. 建立數據庫時
    create database warehouse default character set gb2312;
  2. 建立數據表時
    name varchar(100) character set gb2312,
  3. 連接語句也要寫出編碼格式:
    jdbc:mysql://127.0.0.1/warehouse?useUnicode=true&characterEncoding=gb2312"
3. 進行交互

JDBC 與數據庫表進行交互的主要方式就是 SQL 語句,他可以將標準的 SQL 語句發送給數據庫。

  1. SQL 查詢語句和結果集和
    使用 Statement 語句聲明一個 SQL 語句對象,然後讓已創建的連接對象 con 調用方法創建這個 SQL 語句對象。
    Statement sql = con.createSatement();
  2. 得到 SQL 語句對象後,就可以調用相應的方法去查詢,並且將結果放入一個 ResultSet 結果集中。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章