標籤:基本 不能 enc 相關 forward 錯誤 ips 屬性 對象
1.JSP
[1] 簡介
> HTML
- HTML擅長顯示一個靜態網頁,但是不能調用Java程式。
> Servlet
- Servlet擅長調用Java程式和後台進行互動,但是它不擅長顯示一個完整的HTML頁面。
> 我們希望建立一個新的技術 HTML + Servlet 強強聯合
> JSP全稱Java Server Pages,顧名思義就是運行中java伺服器中頁面,也就是在我們JavaWeb中的動態網頁面,其本質就是一個Servlet。 > JSP不能脫離伺服器運行。 > JSP = HTML + JAVA代碼 > 平常開發中Servlet負責處理請求,JSP負責顯示頁面 注意:對於頁面的編碼問題,可以通過在Eclipse.ini檔案的最後添加-Dfile.encoding=utf-8來解決! [2] 運行原理 > JSP的本質就是一個Servlet > JSP的運行之前會先被Tomcat伺服器翻譯為.java檔案,然後在將.java文本編譯為.class檔案 而我們在訪問jsp時,處理請求的就是那個翻譯後的類。 jsp --翻譯--> java --編譯--> class > 我們需要去到鏡像伺服器中去尋找結果。 > 實際上最終翻譯為的java檔案就是一個Servlet。 1.繼承HttpJspBase這個類,而該類又繼承了HttpServlet 2.在總的web.xml檔案中,同樣發現了jsp相關的配置 由此證明jsp確實是一個Servlet。 [3] 基本文法 > 學習jsp的基本文法主要就是學習伺服器是如何將一個JSP檔案翻譯為一個java檔案 > 模板元素 就是JSP中html代碼 模板元素的內容最終會作為out.write()的參數,最終在頁面中輸出 在HTML頁面中怎麼寫網頁,在JSP中就怎麼寫 > 指令碼片段 <% %> - 在指令碼片段中可以直接來編寫Java代碼 - 指令碼片段中的代碼會原封不動的複製到java檔案的service方法中的指定的位j置 - 在service方法中可以寫什麼在指令碼片段中就可以寫什麼 - 在jsp頁面可以有多個指令碼片段,但是多個指令碼片段之間要保證結構完整 > 運算式 <%= %> - jsp運算式用來向頁面中輸出一個對象 - jsp運算式中的內容最終會作為out.print()的參數輸出到頁面中 - out.print()方法能接收什麼樣的參數,運算式中就可以寫什麼 而out.print()可以接收任意類型的參數,所以運算式中可以傳任意對象。 > 注釋 <%-- --%> - jsp注釋中的內容不會被翻譯到jsp對應java檔案中 - 在JSP中可以使用三種注釋 - html注釋 java注釋 jsp注釋 <!-- 片段 --> //java注釋! <%-- --%> - 三種注釋的可見範圍 jsp源碼 java源檔案 網頁的源碼 html注釋 可見 可見 可見 java注釋 可見 可見 不可見 jsp注釋 可見 不可見 不可見 > 聲明 <%! %> - JSP聲明中的內容會直接寫到jsp對應的java類中。 - 在類中可以寫什麼在聲明就可以寫什麼。可以定義屬性,可以定義方法。。 - 一般情況我們不會在jsp對應的類中寫東西,所以聲明基本不用,知道就行。 [4] JSP指令 > 格式:<%@指令名 屬性名稱1=”屬性值1” 屬性名稱2=”屬性值2” %> > page指令 - page 指令主要是告訴jsp引擎如何解析jsp檔案。 - 可能會用到的屬性 - import 用來導包 - language指定jsp檔案被翻譯為哪種語言 該屬性只有一個值就是 java - contentType 指定當前網頁的編碼 response.setContentType("text/html;charset=utf-8"); - 給瀏覽器看的 - pageEncoding 指定當前頁面的編碼,jsp引擎會根據該編碼解析jsp檔案 - 給伺服器看的 - errorPage 指定頁面出現錯誤以後轉寄到的頁面,這個屬性的地址不加項目名。 - isErrorPage 當前頁面是否為一個錯誤頁面,如果為true則可以在頁面中使用exception對象。
- 基本不使用的屬性 - autoFlush 是否自動重新整理緩衝,預設值是true,一般不去修改這個屬性 - buffer 緩衝的大小 預設8kb 一般不修改 - extends 指定jsp對應的java類所要基礎的父類。根本不用 - info 設定當前jsp的資訊,沒用 - isELIgnored 是否自動忽略EL運算式,預設為false,不忽略,一般不修改 - session 是否可以直接使用session對象,預設值為true,一般不修改 > include指令 - <%@ include file="" %> - 靜態包含指令 - include指令主要用來將其他網頁包含進當前JSP頁面 - 他會將被包含頁面原封不動複製到目標頁面的指定位置。 - 它只會翻譯目標頁面,而不會翻譯被包含頁面 - 比如 1.jsp include 2.jsp 相當於將2.jsp複製進1.jsp的指定位置 只會翻譯1.jsp,而不會翻譯2.jsp [5] JSP動作標籤 > JSP動作標籤最終都會被翻譯為一套java代碼,在程式中執行。 <jsp:標籤名 屬性名稱="屬性值"></jsp:標籤名> <jsp:forward page="target.jsp"> <jsp:param value="paramValue" name="paramName"/> </jsp:forward> > jsp:forward標籤作用就是轉寄請求! > 如果標籤中沒有子標籤,那麼標籤體不能出現任何內容 > 可以標籤中使用jsp:param標籤向目標頁面傳遞請求參數。 <jsp:include page="target.jsp"></jsp:include> > jsp:include 動態包含 > 動態包含會為所有網頁都產生一個java檔案 > 動態包含並不是直接將被包含頁面直接複製進目標頁面,而是通過如下代碼,將頁麵包含進當前頁 org.apache.jasper.runtime.JspRuntimeLibrary.include(request, response, "/include/2.jsp", out, false); [6] 隱含對象 > 在JSP中一共有9個隱含對象,這個9個對象我可以在JSP中直接使用。 > 因為在service方法已經對這個九個隱含對象進行聲明及賦值,所以可以在JSP中直接使用。 - pageContext 類型:PageContext 代表:當前頁面的上下文 作用:可以擷取到頁面中的其他隱含對象,同時它還是一個域對象。 - request 類型:HttpServletRequest 代表:請求 作用:可以擷取使用者發送的請求資訊,它也是一個域對象。 - session 類型:HttpSession 代表:當前會話 作用:可以作為域對象,用來共用資料。 - application 類型:ServletContext 代表:代表整個WEB應用 作用:是JavaWeb中最大的域對象。 - response 類型:HttpServletResponse 代表:響應 作用:向瀏覽器發送響應資訊 - out 類型:JspWriter 代表:輸出資料流 作用:可以向頁面輸出內容 - config 類型:ServletConfig 代表:當前JSP的配置資訊 作用:可以擷取到Servlet標籤中初始化參數 - page 類型:Object 在service方法中有如下代碼 Object page = this; 代表:代表當前JSP的對象 作用: - exception 類型:Throwable 代表:異常資訊 作用:擷取頁面中的異常
[6] JSP與Servlet分工 > JSP本質就是一個Servlet!!! > 曾經在Model1這個年代,在我們的項目中已經看不見Servlet,JSP已經完全代替了Servlet。 > JSP擅長顯示一個頁面,不擅長編寫Java代碼 > Servlet擅長編寫java代碼,而不擅長顯示頁面 > 我們使用Servlet處理常式,而使用JSP顯示頁面。 > 將servlet處理後的結果放入進域中,然後交給JSP顯示。 >練習: 通過Servlet去資料庫中查詢一組學生列表,然後交給JSP顯示列表。 1.使用者先要訪問ListServlet 2.ListServlet去資料庫查詢學生列表 - 直接在Servlet建立一個List 3.將列表放入域對象中 4.通過JSP顯示列表
170820-關於JSP頁面的知識點