Web基礎瞭解版06-Jsp

Jsp

 Jsp全稱Java Server Pages,也就是在咱們JavaWeb中的動態頁面。css

Jsp可以以HTML頁面的方式呈現數據,是一個能夠嵌入Java代碼的HTML。html

Jsp其本質就是一個Servlet。Servlet能作的事情JSP都能作。java

Jsp必須運行在服務器中,不能直接使用瀏覽器打開。web

Jsp是Web網頁的技術標準,主要語法組成包括:指令,html模板元素,腳本片斷(小腳本),表達式,聲明,註釋,後綴是*.jsp。數據庫

Jsp主要負責顯示及獲取數據apache

Jsp是動態頁面,html是靜態頁面 瀏覽器

  動態頁面 靜態頁面
運行原理 經過服務器解析後,將數據在瀏覽器中顯示 直接在瀏覽器中解析運行
維護成本 較低,能夠修改後臺數據,進而影響頁面中的數據 較高,必須將修改後的頁面覆蓋原頁面
數據庫 能夠鏈接數據庫 不可鏈接數據庫
訪問速度 較慢 較快
書寫代碼 能夠書寫java代碼 不能書寫java代碼

注意事項tomcat

一、jsp頁面是一個相似於html的一個頁面。 jsp直接存放到WebContent目錄下,和html同樣訪問jsp的時候,也和訪問html同樣服務器

二、jsp的默認編碼集是iso-8859-1,修改jsp的默認編碼爲UTF-8cookie

JSP運行原理

  • 實際上Tomcat在運行JSP時,並非直接顯示的咱們所編寫的JSP頁面,而是將JSP頁面轉換成了一個Java類,它實際上就是一個Servlet。
  • 讓咱們來找到那個目錄,對於Eclipse來講是在:工做空間下,右鍵Tomcat服務點擊Browse Deployment Location...
  • 在work目錄下的...work\Catalina\localhost\day07_jsp\org\apache\jsp文件夾中
  • 打開index_jsp.java文件查看裏面的內容:發現,生成的類繼承於HttpJspBase類。這是一個jsp文件生成Servlet程序要繼承的基類!而且這個HttpJspBase類繼承於HttpServlet類。
  • 那麼當咱們訪問 一個xxx.jsp文件後翻譯成java文件的全名是 xxx_jsp.java文件。
  • 在tomcat下的conf目錄中的web.xml配置好了JSP的映射信息

之後在訪問同一個jsp文件

  • 若是文件未改變,不會被翻譯和編譯

  • 若是文件改變,會翻譯和編譯

Jsp基本語法

指令

  • 語法格式:<%@ %>

  • 三大指令:<%@ page %> ,<%@ include %> ,| <%@ taglib %>

模板元素

  • html&css&js&jQuery等...

代碼腳本片斷

  • 格式 :<%%>

  • 做用:在_jspService()方法中,書寫java代碼。

<% int i = 0;%>

表達式

  • 格式: <%=%>

  • 做用:將數據顯示到頁面,與out.print()做用相同。

 <%=i%>

聲明

  • 格式:<%!%>

  • 做用:在翻譯後的class helloworld_jsp這個Servlet類中,書寫java代碼。

註釋

  • java:單行註釋://,多行註釋:/**/

  • html:<!-- -->

  • jsp:<%-- --%> 

  JSP註釋 Java註釋 HTML註釋
JSP頁面 可見 可見 可見
Java代碼 不可見 可見 可見
瀏覽器 不可見 不可見 可見

Jsp經常使用指令

語法格式

  • <%@ 指令名 屬性=屬性值 屬性2=屬性值2 ... %>

page指令

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

屬性

  • language:語言,值爲java且僅java。

  • contentType:與response.setContentType()做用一致,設置瀏覽器編碼。

  • pageEncoding:設置Jsp頁面的編碼字符集。

  • import:導包

  • isErrorPage:設置當前頁面是否爲錯誤頁面,默認值"false"。

    • true:設置當前頁面爲錯誤頁面,可使用exception內置對象,捕獲異常 。

    • false:設置當前頁面不是錯誤頁面,不可使用exception內置對象,捕獲異常 。

  • errorPage:設置當前頁面錯誤時的跳轉目標頁面。錯誤須要在_jspService()中才能夠捕獲。

include指令:靜態包含

<%@include file="被包含文件的路徑" %>     
  • 做用:將目標文件包含到當前文件中。

  • 特色:被包含的文件不會被翻譯&編譯。(先包含,再翻譯)

taglib指令

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
  • 屬性

    • prefix用來指定前綴名,咱們經過該名來使用JSTL。

    • uri至關於庫的惟一標識,由於JSTL由多個不一樣的庫組成,使用該屬性指定要導入哪一個庫。

  • 做用:引入標籤庫。

Jsp動做標籤

JSP動做標籤與HTML標籤不一樣,HTML標籤由瀏覽器來解析,而JSP動做標籤須要服務器(Tomcat)來運行。

轉發動做標籤

做用:在頁面中用於轉發操做

<jsp:forward page="target.jsp"></jsp:forward>

轉發子標籤;在轉發時設置請求參數,經過request.getParameter()在目標頁面獲取請求參數。

<jsp:forward page="target.jsp">
    <jsp:param value="paramValue" name="paramName"/>
</jsp:forward>

注意:若是轉發動做標籤不須要設置請求參數,該標籤開始與結束標籤內部,不容許書寫任何內容,(包括空格)

動態包含動做標籤

做用:動態包含,將其餘頁面包含到當前頁面中。

<jsp:include page="target.jsp"></jsp:include>

特色:被包含的文件同時會被翻譯&編譯。(先翻譯,再包含)

  • 本質原理:當使用動態包含時,Tomcat會在生成的Servlet中加入以下代碼:

org.apache.jasper.runtime.JspRuntimeLibrary.include(request, response, "target.jsp", out, false);

動態包含與靜態包含的區別

  @include指令 jsp:include標籤
特色 靜態包含 動態包含
語法的基本形式 <%@ include file=」…」%> <jsp:include page=」…」/>
包含動做發生的時機 翻譯期間 請求期間
是否生成java文件 不生成 生成
合併方式 代碼複製 合併運行結果
包含的內容 文件實際內容 頁面輸出結果
代碼衝突 有可能 不可能
編譯次數 1 包含的文件 + 1
適用範圍 適用包含純靜態內容(CSS,HTML,JS),或沒有很是耗時操做。或大量java代碼的jsp 包含須要傳遞參數。含有大量java代碼,運算,耗時很長的操做。

Jsp九大隱式對象

JSP容器爲每一個頁面提供的Java對象,開發者能夠直接使用它們而不用顯式聲明

pageContext

  • 類型:PageContext

  • 定義:表明頁面域對象,用來表明整個JSP頁面。

  • 做用:

    1. 頁面域對象

    2. 九大隱式對象的「大哥」,能夠直接調用其餘八大隱式對象。

  • 在Servlet中獲取方式:無。

  • 類型:HttpServletRequest

  • 定義:表明瀏覽器向服務器發送的請求報文,該對象由服務器建立,最終以參數的形式發送到doGet()和doPost()方法中。

    每當客戶端請求一個JSP頁面時,JSP引擎就會製造一個新的request對象來表明這個請求。request對象提供了一系列方法來獲取HTTP頭信息,cookies,HTTP方法等等。

  • 做用(詳見Servlet中request對象)

    1. 獲取請求參數

    2. 獲取url地址參數

    3. 請求轉發

    4. 向請求域中保存數據(獲取數據&移除數據)

    5. 獲取請求頭信息

  • 在Servlet中獲取方式:doGet()或doPost()中直接使用。

session

  • 類型:HttpSession

  • 定義:表明瀏覽器與服務器之間的會話。

  • 做用

    • 會話域對象,

    session對象用來跟蹤在各個客戶端請求間的會話。

application

  • 在Servlet中獲取方式 :request.getSession();

  • 類型:ServletContext

  • 定義:Servlet上下文,表明當前web應用。

    Web容器在啓動時,它會爲每一個Web應用程序都建立一個惟一對應的ServletContext對象,意思是Servlet上下文,表明當前Web應用。

  • 做用

    1. 獲取項目的上下文路徑(帶/的項目名):getContextPath()

    2. 獲取虛擬路徑所映射的本地真實路徑:getRealPath(String path)

    3. 獲取WEB應用程序的全局初始化參數(基本不用)

      4. 獲取Web應用初始化參數:application.getInitParameter("ParamName");

  • 在Servlet中獲取方式:使用this.getServletContext()方法獲取。

page

  • 類型:Object

  • 做用:this,當前類對象。

response

  • 類型:HttpServletResponse

  • 定義:表明服務器向瀏覽器發送的響應報文,該對象由服務器建立,最終以參數的形式發送到doGet()和doPost()方法中。

  • 做用:

    1. 向頁面(響應體)中響應數據,數據包括文本、Html等。

    2. 重定向

    3. 設置響應頭信息

  • 在Servlet中獲取方式:doGet()或doPost()中直接使用

config

  • 類型:ServletConfig

  • 定義:表明當前Servlet的配置信息,每個Servlet都有一個惟一對應的ServletConfig對象。

  • 做用:

    1. 獲取Servlet名稱:getServletName()

    2. 獲取全局上下文ServletContext對象:getServletContext()

    3. 獲取Servlet初始化參數:getInitParameter(String) / getInitParameterNames()。

  • 在Servlet中獲取方式:this.getServletConfig()

out

  • 類型:JspWriter

  • 定義:表明當前頁面的輸出流。

  • 做用:與Servlet中的PrintWriter功能相似,將數據響應到頁面,響應的數據能夠是頁面、頁面片斷、字符串等。

  • 在Servlet中獲取方式:無

exception

  • 類型:Throwable

  • 定義:表明當前頁面的異常對象。

  • 做用:捕獲處理頁面中的異常信息。

  • 在Servlet中獲取方式:new Throwable()

九大內置對象,都是咱們能夠在【代碼腳本】中或【表達式腳本】中直接使用的對象。

Jsp四大域對象

程序中的域對象,主要負責在不一樣web資源之間進行數據交換,(如:servlet和jsp之間的數據交換)。

域對象分析

每一個域對象內部都維護了一個Map<String , Object>,域對象的共同方法。

  • 設置屬性到域中:void setAttribute(String key , Object value);

  • 從域中獲取指定的屬性:Object getAttribute(String key);

  • 移除域中指定屬性:void removeAttribute(String key);

域對象有效性

  • pageContext: 當前頁面中共享數據有效,離開當前頁面失效。

    • 每一個頁面都有本身惟一的一個pageContext對象。

    • 注意servlet中沒有該對象。

  • request: 當前請求中共享數據有效。

    • 當前請求:轉發、直接訪問一個頁面爲當前請求。

    • 不在當前請求:重定向、 打開頁面再點擊頁面中的超連接不在當前請求 。

  • session: 一次會話範圍中共享數據有效。

    • 當前會話:當前瀏覽器不關閉&不更換瀏覽器即爲當前會話。

    • 只關心瀏覽器是否關閉,不關心服務器關閉重啓。

    • 不一樣瀏覽器不共享會話。

  • application: 在服務器運行的一次過程當中共享數據有效。

    • 服務器關閉銷燬

域對象 做用範圍 起始時間 結束時間
pageContext 當前JSP頁面 頁面加載 離開頁面
request 同一個請求 收到請求 響應
session 同一個會話 開始會話 結束會話
application 當前Web應用 Web應用加載 Web應用卸載
相關文章
相關標籤/搜索