Jsp
Jsp全稱Java Server Pages,也就是在我們JavaWeb中的動態頁面,
Jsp能夠以HTML頁面的方式呈現資料,是一個可以嵌入Java代碼的HTML,
Jsp其本質就是一個Servlet,Servlet能做的事情JSP都能做,
Jsp必須運行在服務器中,不能直接使用瀏覽器打開,
Jsp是Web網頁的技術標準,主要語法組成包括:指令,html模板元素,腳本片段(小腳本),運算式,宣告,注釋,后綴是*.jsp,
Jsp主要負責顯示及獲取資料
Jsp是動態頁面,html是靜態頁面
| 動態頁面 | 靜態頁面 | |
|---|---|---|
| 運行原理 | 通過服務器決議后,將資料在瀏覽器中顯示 | 直接在瀏覽器中決議運行 |
| 維護成本 | 較低,可以修改后臺資料,進而影響頁面中的資料 | 較高,必須將修改后的頁面覆寫原頁面 |
| 資料庫 | 可以連接資料庫 | 不可連接資料庫 |
| 訪問速度 | 較慢 | 較快 |
| 書寫代碼 | 可以書寫java代碼 | 不能書寫java代碼 |
注意事項
1、jsp頁面是一個類似于html的一個頁面, jsp直接存放到WebContent目錄下,和html一樣訪問jsp的時候,也和訪問html一樣
2、jsp的默認編碼集是iso-8859-1,修改jsp的默認編碼為UTF-8
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頁面,
-
作用:
-
頁面域物件
-
九大隱式物件的“大哥”,可以直接呼叫其他八大隱式物件,
-
-
在Servlet中獲取方式:無,
request
-
型別:HttpServletRequest
-
定義:代表瀏覽器向服務器發送的請求報文,該物件由服務器創建,最終以引數的形式發送到doGet()和doPost()方法中,
每當客戶端請求一個JSP頁面時,JSP引擎就會制造一個新的request物件來代表這個請求,request物件提供了一系列方法來獲取HTTP頭資訊,cookies,HTTP方法等等,
-
作用(詳見Servlet中request物件)
-
獲取請求引數
-
獲取url地址引數
-
請求轉發
-
向請求域中保存資料(獲取資料&移除資料)
-
獲取請求頭資訊
-
-
在Servlet中獲取方式:doGet()或doPost()中直接使用,
session
-
型別:HttpSession
-
定義:代表瀏覽器與服務器之間的會話,
-
作用
-
會話域物件,
session物件用來跟蹤在各個客戶端請求間的會話,
-
在Servlet中獲取方式 :request.getSession();
application
-
型別:ServletContext
-
定義:Servlet背景關系,代表當前web應用,
Web容器在啟動時,它會為每個Web應用程式都創建一個唯一對應的ServletContext物件,意思是Servlet背景關系,代表當前Web應用,
-
作用
-
獲取專案的背景關系路徑(帶/的專案名):getContextPath()
-
獲取虛擬路徑所映射的本地真實路徑:getRealPath(String path)
-
獲取WEB應用程式的全域初始化引數(基本不用)
-
4. 獲取Web應用初始化引數:application.getInitParameter("ParamName");
- 在Servlet中獲取方式:使用this.getServletContext()方法獲取,
page
-
型別:Object
-
作用:this,當前類物件,
response
-
型別:HttpServletResponse
-
定義:代表服務器向瀏覽器發送的回應報文,該物件由服務器創建,最終以引數的形式發送到doGet()和doPost()方法中,
-
作用:
-
向頁面(回應體)中回應資料,資料包括文本、Html等,
-
重定向
-
設定回應頭資訊
-
-
在Servlet中獲取方式:doGet()或doPost()中直接使用
config
-
型別:ServletConfig
-
定義:代表當前Servlet的配置資訊,每一個Servlet都有一個唯一對應的ServletConfig物件,
-
作用:
-
獲取Servlet名稱:getServletName()
-
獲取全域背景關系ServletContext物件:getServletContext()
-
獲取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應用卸載 |
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/86960.html
標籤:Html/Css
