JSP全稱是Java Server Page,它和Servlet同樣,也是sun公司推出的一套開發動態web資源的技術,稱爲JSP/Servlet規範。其本質也是一個Servlet。html
HTML:只能開發靜態資源,不能包含java代碼,沒法添加動態數據。java
Servlet:寫java代碼,能夠輸出頁面內容,可是很不方便,開發效率極低。web
JSP:HTML+Servlet瀏覽器
寫在以前:緩存
明確JSP就是一個Servlet。是一個特殊的Servlet。tomcat
JSP的原理:服務器
客戶端提交請求——Tomcat服務器解析請求地址——找到JSP頁面——Tomcat將JSP頁面翻譯成Servlet的java文件——將翻譯好的.java文件編譯成.class文件——返回到客戶瀏覽器上。session
jsp中的模板元素指的就是jsp中的html標籤,在開發過程當中,先寫好這些模板元素,由於它們決定了頁面的外觀。架構
在jsp中,可使用java腳本代碼。形式爲:app
<%
在裏面寫java程序腳本
須要注意:這裏面的內容由tomcat負責翻譯,翻譯以後是service方法的成員變量
%>
使用<%=表達式%>
翻譯完後是out.print(表達式內容);
<%out.print("當前時間);%>和<%="當前時間"%>是同樣的
JSP的聲明
<%!
聲明能夠是變量,方法,靜態方法等
須要注意的是:
寫在裏面的內容將會被tomcat翻譯成全局的屬性或者類方法。
%>
JSP中的註釋:<%--註釋--%>
注意:
在Jsp中可使用html的註釋,可是隻能註釋html元素,不能註釋java程序片斷和表達式。
jsp的註釋不只能夠註釋java程序片斷,也能夠註釋html元素。
JSP指令是爲JSP引擎服務的,它不會產生可見輸出,而是告訴引擎如何處理JSP的其他部分(非指令部分)。
基本語法:
<%@ 指令名稱 屬性1="值1" 屬性2="值2".......%>
通常把指令放在JSP頁面的頂部(不是必須的)
指令的屬性能夠寫在一個指令的中,也能夠分開寫:好比:
<%@指令 屬性1=」值1」 屬性2=」值2」%>.
等價於:
<%@指令 屬性1=」值1」 %>.
<%@指令 屬性2=」值2」%>.
屬性:
language:告知引擎,腳本使用的是java,默認是java,支持java。不寫也行。
extends:告知引擎,JSP對應的Servlet的父類是哪一個,不須要寫,也不須要改。
import:告知引擎,導入哪些包(類)。
注意:引擎會自動導入:java.lang.*,javax.servlet.*,javax.servlet.http.*,javax.servlet.jsp.*
導入的形式:
<%@page import=」java.util.Date,java.util.UUID」%>或者:
<%@page import=」java.util.Date」%>
<%@page import=」java.util.UUID」%> 用Eclipse:Alt+/ 自動導入
session:告知引擎是否產生HttpSession對象,便是否在代碼中調用request.getSession()。默認是true。
buffer:JspWriter用於輸出JSP內容到頁面上。告知引擎,設定他的緩存大小。默認8kb。
errorPage:告知引擎,當前頁面出現異常後,應該轉發到哪一個頁面上(路徑寫法:/表明當前應用)
注意:當在errorpage上使用了isErrorPage=true以後,ie8有時候不能正常顯示
配置全局錯誤頁面:web.xml
當使用了全局錯誤頁面,就無須再寫errorPage來實現轉到錯誤頁面,而是由服務器負責跳轉到錯誤頁面。
isErrorPage:告知引擎,是否抓住異常。若是該屬性爲true,頁面中就可使用exception對象,打印異常的詳細信息。默認值是false。
contentType:告知引擎,響應正文的MIME類型。contentType="text/html;charset=UTF-8"
至關於response.setContentTYpe("text/html;charset=UTF-8");
pageEncoding:告知引擎,翻譯jsp時(從磁盤上讀取jsp文件)所用的碼錶。
pageEncoding="UTF-8"至關於告知引擎用UTF-8讀取JSP
isELIgnored:告知引擎,是否忽略EL表達式,默認值是false,不忽略。
總結:
屬性衆多,通常都用默認值。用起來很簡單。
該指令是包含外部頁面。
屬性:file,以/開頭,就表明當前應用。
該指令用於引入外部標籤
uri:外部標籤的URI地址,相似名稱空間。
prefix:前綴。
語法:<jsp:forward page="/forwarddemojsp"></jsp:forward> 是jsp的內置標籤
該方式等價於:
參數:<jsp:param name="message" value="transfer" />
獲取參數:
注意:
在使用forward帶參數時,不能在中間添加除空格和換行以外的內容。不然報錯。
靜態包含:只有一種,<%@include file=%>,又稱爲include指令。特色是將兩個頁面合成一個。在包含者中可使用被包含者的屬性。
動態包含:除了include指令外,其他全是動態包含。
jsp的動態包含語法:
<jsp:include page="" />
又稱爲include動做。
動態包含的特色是,各編譯各的,會產生多個java和class文件。只是合併輸出結果。
隱式對象名稱 |
類型 |
備註 |
request |
javax.servlet.http.HttpServletRequest |
|
response |
javax.servlet.http.HttpServletResponse |
|
session |
javax.servlet.http.HttpSession |
Page指令能夠控制開關 |
application |
javax.servlet.ServletContext |
|
page |
Java.lang.Object |
當前jsp對應的servlet引用實例 |
config |
javax.servlet.ServletConfig |
|
exception |
java.lang.Throwable |
page指令有開關 |
out |
javax.servlet.jsp.JspWriter |
字符輸出流,至關於printwriter |
pageContext |
javax.servlet.jsp.PageContext |
很重要 |
它是JSP獨有的對象,Servlet中沒有這個對象。自己也是一個域(做用範圍)對象,可是它能夠操做其餘3個域對象中的屬性。並且還能夠獲取其餘8個隱式對象。(自定義標籤時用)
它是一個局部變量,因此它的生命週期隨着JSP的建立而誕生,隨着JSP的結束而消失。每一個JSP頁面都有一個獨立的PageContext。
頁面範圍的方法:
void setAttribute(String name,Object value);
void removeAttribute(String name);
Object getAttribute(String name);
操做其餘域屬性的方法:
比上面的三個方法多了一個參數 int scope。
void setAttribute(String name,Object value,int scope);
void removeAttribute(String name,int scope);
Object getAttribute(String name,int scope);
int scope:它自己是一個常量,有四個值,分別對應四個範圍。
APPLICATION_SCOPE 應用級
SESSION_SCOPE 會話級
REQUEST_SCOPE 請求級
PAGE_SCOPE 頁面級
在四個範圍內根據名稱查找對象的方法:
Object findAttribute(String name);
查找順序是:PAGE——>REQUEST——>SESSION——>APPLICATION。只要在一個範圍內找到就再也不繼續查找。
獲取其餘八個隱式對象的方法:(自定義標籤時用)
pageContext.getRequest();
pageContext.getResponse();
pageContext.getSession();
pageContext.getServletConfig();
pageContext.getServletContext();
pageContext.getException();
pageContext.getPage();
pageContext.getOut();(此方法是其父類JspContext提供)
實際開發中用於存放數據的。
域對象名稱 |
範圍 |
級別 |
備註 |
PageContext |
頁面範圍 |
最小 |
因範圍過小,開發中用的不多 |
ServletRequest |
請求範圍 |
比page大,比session小 |
不一樣的資源,只有轉發用 |
HttpSession |
會話範圍 |
比request大,比application小 |
屢次請求共享數據,但不一樣的客戶端不能共享 |
ServletContext |
應用範圍 |
最大 |
儘可能少用,若是對數據有修改須要作同步處理 |
Servlet:擅長處理業務邏輯,不擅長輸出顯示界面。在web開發中多用於控制程序邏輯(流程)。因此咱們稱之爲:控制器。
JSP:擅長顯示界面,不擅長處理程序邏輯。在web開發中多用於展現動態界面。因此咱們稱之爲:視圖。
例如:
M:model 封裝的是數據模型
V:view 指的是jsp頁面
C:Controller 指的是Servlet
注意:MVC模型針對的只是表現層的模型,和三層架構是沒有關係的。