Jsp全稱Java Server Pages,也就是在咱們JavaWeb中的動態頁面。css
html
Jsp其本質就是一個Servlet。Servlet能作的事情JSP都能作。java
Jsp必須運行在服務器中,不能直接使用瀏覽器打開。web
數據庫
apache
Jsp是動態頁面,html是靜態頁面 瀏覽器
動態頁面 | 靜態頁面 | |
---|---|---|
運行原理 | 經過服務器解析後,將數據在瀏覽器中顯示 | 直接在瀏覽器中解析運行 |
維護成本 | 較低,能夠修改後臺數據,進而影響頁面中的數據 | 較高,必須將修改後的頁面覆蓋原頁面 |
數據庫 | 能夠鏈接數據庫 | 不可鏈接數據庫 |
訪問速度 | 較慢 | 較快 |
書寫代碼 | 能夠書寫java代碼 |
注意事項tomcat
一、jsp頁面是一個相似於html的一個頁面。 jsp直接存放到WebContent目錄下,和html同樣訪問jsp的時候,也和訪問html同樣服務器
cookie
若是文件未改變,不會被翻譯和編譯
指令
<% int i = 0;%>
<%=i%>
html:<!-- -->
JSP註釋 | Java註釋 | HTML註釋 | |
---|---|---|---|
JSP頁面 | 可見 | 可見 | 可見 |
Java代碼 | 不可見 | 可見 | 可見 |
瀏覽器 | 不可見 | 不可見 |
<%@ 指令名 屬性=屬性值 屬性2=屬性值2 ... %>
<%@ 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內置對象,捕獲異常 。
<%@include file="被包含文件的路徑" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
prefix用來指定前綴名,咱們經過該名來使用JSTL。
uri至關於庫的惟一標識,由於JSTL由多個不一樣的庫組成,使用該屬性指定要導入哪一個庫。
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>
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 |
JSP容器爲每一個頁面提供的Java對象,開發者能夠直接使用它們而不用顯式聲明
定義:表明頁面域對象,用來表明整個JSP頁面。
做用:
頁面域對象
九大隱式對象的「大哥」,能夠直接調用其餘八大隱式對象。
定義:表明瀏覽器向服務器發送的請求報文,該對象由服務器建立,最終以參數的形式發送到doGet()和doPost()方法中。
每當客戶端請求一個JSP頁面時,JSP引擎就會製造一個新的request對象來表明這個請求。request對象提供了一系列方法來獲取HTTP頭信息,cookies,HTTP方法等等。
做用(詳見Servlet中request對象)
獲取請求參數
獲取url地址參數
請求轉發
向請求域中保存數據(獲取數據&移除數據)
獲取請求頭信息
定義:表明瀏覽器與服務器之間的會話。
做用
會話域對象,
session對象用來跟蹤在各個客戶端請求間的會話。
定義:Servlet上下文,表明當前web應用。
Web容器在啓動時,它會爲每一個Web應用程序都建立一個惟一對應的ServletContext對象,意思是Servlet上下文,表明當前Web應用。
做用
獲取項目的上下文路徑(帶/的項目名):getContextPath()
獲取虛擬路徑所映射的本地真實路徑:getRealPath(String path)
4. 獲取Web應用初始化參數:application.getInitParameter("ParamName");
類型:Object
做用:this,當前類對象。
類型:HttpServletResponse
定義:表明服務器向瀏覽器發送的響應報文,該對象由服務器建立,最終以參數的形式發送到doGet()和doPost()方法中。
做用:
向頁面(響應體)中響應數據,數據包括文本、Html等。
重定向
設置響應頭信息
在Servlet中獲取方式:doGet()或doPost()中直接使用
類型:ServletConfig
定義:表明當前Servlet的配置信息,每個Servlet都有一個惟一對應的ServletConfig對象。
做用:
獲取Servlet名稱:getServletName()
獲取全局上下文ServletContext對象:getServletContext()
獲取Servlet初始化參數:getInitParameter(String) / getInitParameterNames()。
在Servlet中獲取方式:this.getServletConfig()
類型:JspWriter
定義:表明當前頁面的輸出流。
做用:與Servlet中的PrintWriter功能相似,將數據響應到頁面,響應的數據能夠是頁面、頁面片斷、字符串等。
在Servlet中獲取方式:無
類型:Throwable
定義:表明當前頁面的異常對象。
做用:捕獲處理頁面中的異常信息。
九大內置對象,都是咱們能夠在【代碼腳本】中或【表達式腳本】中直接使用的對象。
程序中的域對象,主要負責在不一樣web資源之間進行數據交換,(如:servlet和jsp之間的數據交換)。
每一個域對象內部都維護了一個Map<String , Object>,域對象的共同方法。
設置屬性到域中:void setAttribute(String key , Object value);
從域中獲取指定的屬性:Object getAttribute(String key);
移除域中指定屬性:void removeAttribute(String key);
每一個頁面都有本身惟一的一個pageContext對象。
注意servlet中沒有該對象。
request: 當前請求中共享數據有效。
當前請求:轉發、直接訪問一個頁面爲當前請求。
不在當前請求:重定向、 打開頁面再點擊頁面中的超連接不在當前請求 。
session: 一次會話範圍中共享數據有效。
當前會話:當前瀏覽器不關閉&不更換瀏覽器即爲當前會話。
只關心瀏覽器是否關閉,不關心服務器關閉重啓。
不一樣瀏覽器不共享會話。
application: 在服務器運行的一次過程當中共享數據有效。
做用範圍 | 起始時間 | 結束時間 | |
---|---|---|---|
pageContext | 當前JSP頁面 | 頁面加載 | 離開頁面 |
request | 同一個請求 | 收到請求 | 響應 |
session | 同一個會話 | 開始會話 | 結束會話 |
application | 當前Web應用 | Web應用加載 |